diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index 8851571f9f..d00d123e82 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -623,8 +623,10 @@ gst_v4l2_buffer_pool_start (GstBufferPool * bpool) &max_buffers)) goto wrong_config; - /* TODO Also consider min_buffers_for_output when implemented */ - min_latency = MAX (GST_V4L2_MIN_BUFFERS, obj->min_buffers_for_capture); + if (V4L2_TYPE_IS_OUTPUT (obj->type)) + min_latency = MAX (GST_V4L2_MIN_BUFFERS, obj->min_buffers_for_output); + else + min_latency = MAX (GST_V4L2_MIN_BUFFERS, obj->min_buffers_for_capture); switch (obj->mode) { case GST_V4L2_IO_RW: diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index 8021490d2b..9073a48ecd 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -3472,10 +3472,13 @@ gst_v4l2_object_propose_allocation (GstV4l2Object * obj, GstQuery * query) if (v4l2_ioctl (obj->video_fd, VIDIOC_G_CTRL, &ctl) >= 0) { GST_DEBUG_OBJECT (obj->element, "driver require a miminum of %d buffers", ctl.value); - - min = MAX (ctl.value, GST_V4L2_MIN_BUFFERS); + obj->min_buffers_for_output = ctl.value; + } else { + obj->min_buffers_for_output = 0; } + min = MAX (obj->min_buffers_for_output, GST_V4L2_MIN_BUFFERS); + gst_query_add_allocation_pool (query, pool, size, min, max); /* we also support various metadata */ diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h index c13cd64568..141f62df79 100644 --- a/sys/v4l2/gstv4l2object.h +++ b/sys/v4l2/gstv4l2object.h @@ -121,6 +121,9 @@ struct _GstV4l2Object { * calculate the minimum latency of a m2m decoder. */ guint32 min_buffers_for_capture; + /* This will be set if supported in propose allocation. */ + guint32 min_buffers_for_output; + /* wanted mode */ GstV4l2IOMode req_mode;