mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-07-07 07:05:52 +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
|
@ -903,7 +903,21 @@ gst_v4l2src_create (GstPushSrc * src, GstBuffer ** buf)
|
||||||
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
|
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
|
||||||
if (ret == GST_V4L2_FLOW_RESOLUTION_CHANGE) {
|
if (ret == GST_V4L2_FLOW_RESOLUTION_CHANGE) {
|
||||||
GST_INFO_OBJECT (v4l2src, "Resolution change detected.");
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
goto alloc_failed;
|
goto alloc_failed;
|
||||||
|
|
Loading…
Reference in a new issue