mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
typefind: Avoid messing pads activation
Typefind might mess up pads modes (pull/push) if a downstream element is plugged and its pads activated in 'step 2' of typefind pads activation. This happens because the following steps don't check if we already emitted typefound due to upstream setting caps on buffers being pulled in the typefind helpers. Avoid that by checking if typefound is already emmited. Fixes #608036
This commit is contained in:
parent
fae502056f
commit
51d382e2ee
1 changed files with 14 additions and 1 deletions
|
@ -951,6 +951,18 @@ gst_type_find_element_activate (GstPad * pad)
|
|||
}
|
||||
}
|
||||
|
||||
/* the type find helpers might have triggered setcaps here (due to upstream)
|
||||
* setting caps on buffers, which emits typefound signal and an element
|
||||
* could have been linked and have its pads activated
|
||||
*
|
||||
* If we deactivate the pads in the following steps we might mess up
|
||||
* downstream element. We should prevent that.
|
||||
*/
|
||||
if (typefind->mode == MODE_NORMAL) {
|
||||
/* this means we already emitted typefound */
|
||||
goto really_done;
|
||||
}
|
||||
|
||||
/* 3 */
|
||||
gst_pad_activate_pull (pad, FALSE);
|
||||
|
||||
|
@ -973,8 +985,9 @@ done:
|
|||
/* 7 */
|
||||
g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE],
|
||||
0, probability, found_caps);
|
||||
gst_caps_unref (found_caps);
|
||||
typefind->mode = MODE_NORMAL;
|
||||
really_done:
|
||||
gst_caps_unref (found_caps);
|
||||
|
||||
/* 8 */
|
||||
if (gst_pad_is_active (pad))
|
||||
|
|
Loading…
Reference in a new issue