summaryrefslogtreecommitdiff
blob: 3384de7bd86d76c5e817ea704b0da4e0440e6496 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From 4e319948c62aafd5339c38d065fd8dbfa5a09ced Mon Sep 17 00:00:00 2001
From: Rob Clark <rob@ti.com>
Date: Thu, 13 Jan 2011 09:43:08 -0600
Subject: [PATCH 11/11] v4l2sink: fix issue seen with autoconvert

In this scenario _set_caps() will get called earlier than _buffer_alloc()
so we need to not override the number of buffers in the case that the
upstream element answers the query about number of requested buffers.
---
 sys/v4l2/gstv4l2sink.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c
index feafe7a..ca6ae15 100644
--- a/sys/v4l2/gstv4l2sink.c
+++ b/sys/v4l2/gstv4l2sink.c
@@ -881,6 +881,8 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
 
     gst_query_parse_buffers_count (query, &min_buffers);
 
+    GST_DEBUG_OBJECT (v4l2sink, "min_buffers=%d", min_buffers);
+
     /* XXX need to account for some buffers used by queue, etc.. probably
      * queue should handle query, pass on to sink pad, and then add some
      * number of buffers to the min, so this value is dynamic depending
@@ -888,10 +890,10 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
      */
     if (min_buffers != -1) {
       min_buffers += 3 + v4l2sink->min_queued_bufs;
+      v4l2sink->num_buffers_can_change = FALSE;
     }
 
     if (min_buffers > v4l2sink->num_buffers) {
-      v4l2sink->num_buffers_can_change = FALSE;
       v4l2sink->num_buffers = min_buffers;
     }
 
@@ -972,7 +974,7 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size,
        * than four buffers:
        */
       if (!strcmp ("omap_vout", driver)) {
-        if (v4l2sink->num_buffers > 4) {
+        if (v4l2sink->num_buffers_can_change && v4l2sink->num_buffers > 4) {
           v4l2sink->num_buffers = 4;
           GST_DEBUG_OBJECT (v4l2sink,
               "limiting to 4 buffers to work-around omap_vout driver bug");
-- 
1.7.1