mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 09:55:36 +00:00
v4l2object: Don't share own pool if min exceed V4L2 capacity
If the minimum required buffer exceed V4L2 capacity, don't share down pool. This allow support very high latency, like with x264enc default encoding settings. https://bugzilla.gnome.org/show_bug.cgi?id=732288
This commit is contained in:
parent
010272a796
commit
3df949c745
1 changed files with 14 additions and 10 deletions
|
@ -3183,6 +3183,20 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
|
|||
|
||||
can_share_own_pool = (has_video_meta || !obj->need_video_meta);
|
||||
|
||||
/* Certain driver may expose a minimum through controls */
|
||||
ctl.id = V4L2_CID_MIN_BUFFERS_FOR_CAPTURE;
|
||||
if (v4l2_ioctl (obj->video_fd, VIDIOC_G_CTRL, &ctl) >= 0) {
|
||||
GST_DEBUG_OBJECT (obj->element, "driver require a minimum of %d buffers",
|
||||
ctl.value);
|
||||
obj->min_buffers_for_capture = ctl.value;
|
||||
} else {
|
||||
obj->min_buffers_for_capture = 0;
|
||||
}
|
||||
|
||||
/* We can't share our own pool, if it exceed V4L2 capacity */
|
||||
if (min + obj->min_buffers_for_capture + 1 > VIDEO_MAX_FRAME)
|
||||
can_share_own_pool = FALSE;
|
||||
|
||||
/* select a pool */
|
||||
switch (obj->mode) {
|
||||
case GST_V4L2_IO_RW:
|
||||
|
@ -3250,16 +3264,6 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
|
|||
if (size == 0)
|
||||
goto no_size;
|
||||
|
||||
/* Certain driver may expose a minimum through controls */
|
||||
ctl.id = V4L2_CID_MIN_BUFFERS_FOR_CAPTURE;
|
||||
if (v4l2_ioctl (obj->video_fd, VIDIOC_G_CTRL, &ctl) >= 0) {
|
||||
GST_DEBUG_OBJECT (obj->element, "driver require a minimum of %d buffers",
|
||||
ctl.value);
|
||||
obj->min_buffers_for_capture = ctl.value;
|
||||
} else {
|
||||
obj->min_buffers_for_capture = 0;
|
||||
}
|
||||
|
||||
/* If pushing from our own pool, configure it with queried minimum,
|
||||
* otherwise use the minimum required */
|
||||
if (pushing_from_our_pool) {
|
||||
|
|
Loading…
Reference in a new issue