mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 11:10:37 +00:00
v4l2src: Force renegotiation on resolution change
As mandated by the specification, make sure to cycle through streamoff / streamon regardless if the caps have changed or not. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/870>
This commit is contained in:
parent
7b8fe18d06
commit
b750fb2d5b
1 changed files with 15 additions and 1 deletions
|
@ -903,7 +903,21 @@ gst_v4l2src_create (GstPushSrc * src, GstBuffer ** buf)
|
|||
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
|
||||
if (ret == GST_V4L2_FLOW_RESOLUTION_CHANGE) {
|
||||
GST_INFO_OBJECT (v4l2src, "Resolution change detected.");
|
||||
gst_base_src_negotiate (GST_BASE_SRC (src));
|
||||
|
||||
/* It is required to always cycle through streamoff, we also need to
|
||||
* streamoff in order to allow locking a new DV_TIMING which will
|
||||
* influence the output of TRY_FMT */
|
||||
gst_v4l2src_stop (GST_BASE_SRC (src));
|
||||
|
||||
/* Force renegotiation */
|
||||
v4l2src->renegotiation_adjust = v4l2src->offset + 1;
|
||||
v4l2src->pending_set_fmt = TRUE;
|
||||
|
||||
if (!gst_base_src_negotiate (GST_BASE_SRC (src))) {
|
||||
ret = GST_FLOW_NOT_NEGOTIATED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
goto alloc_failed;
|
||||
|
|
Loading…
Reference in a new issue