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
|