mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 03:31:05 +00:00
typefind: Switch to normal mode before have-type
Before emitting have-type, switch to NORMAL mode, as part of the have-type processing sends the caps event downstream, which might trigger actions like downstream autoplugging or flushing seeks - and the latter are only passed upstream if we've set typefind to NORMAL mode.
This commit is contained in:
parent
f727d67d53
commit
e68c071bf0
1 changed files with 7 additions and 1 deletions
|
@ -558,6 +558,7 @@ gst_type_find_element_src_event (GstPad * pad, GstObject * parent,
|
||||||
|
|
||||||
if (typefind->mode != MODE_NORMAL) {
|
if (typefind->mode != MODE_NORMAL) {
|
||||||
/* need to do more? */
|
/* need to do more? */
|
||||||
|
GST_LOG_OBJECT (typefind, "Still typefinding. Not passing event upstream");
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -783,6 +784,8 @@ gst_type_find_element_setcaps (GstTypeFindElement * typefind, GstCaps * caps)
|
||||||
if (gst_caps_is_any (caps))
|
if (gst_caps_is_any (caps))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
/* Set to MODE_NORMAL before emitting have-type, in case it triggers a seek */
|
||||||
|
typefind->mode = MODE_NORMAL;
|
||||||
gst_type_find_element_emit_have_type (typefind, GST_TYPE_FIND_MAXIMUM, caps);
|
gst_type_find_element_emit_have_type (typefind, GST_TYPE_FIND_MAXIMUM, caps);
|
||||||
|
|
||||||
/* Shortcircuit typefinding if we get caps */
|
/* Shortcircuit typefinding if we get caps */
|
||||||
|
@ -967,6 +970,8 @@ gst_type_find_element_chain_do_typefinding (GstTypeFindElement * typefind,
|
||||||
|
|
||||||
/* probability is good enough too, so let's make it known ... emiting this
|
/* probability is good enough too, so let's make it known ... emiting this
|
||||||
* signal calls our object handler which sets the caps. */
|
* signal calls our object handler which sets the caps. */
|
||||||
|
/* Set to MODE_NORMAL before emitting have-type, in case it triggers a seek */
|
||||||
|
typefind->mode = MODE_NORMAL;
|
||||||
gst_type_find_element_emit_have_type (typefind, probability, caps);
|
gst_type_find_element_emit_have_type (typefind, probability, caps);
|
||||||
|
|
||||||
/* .. and send out the accumulated data */
|
/* .. and send out the accumulated data */
|
||||||
|
@ -1158,8 +1163,9 @@ gst_type_find_element_loop (GstPad * pad)
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG ("Emiting found caps %" GST_PTR_FORMAT, found_caps);
|
GST_DEBUG ("Emiting found caps %" GST_PTR_FORMAT, found_caps);
|
||||||
gst_type_find_element_emit_have_type (typefind, probability, found_caps);
|
/* Set to MODE_NORMAL before emitting have-type, in case it triggers a seek */
|
||||||
typefind->mode = MODE_NORMAL;
|
typefind->mode = MODE_NORMAL;
|
||||||
|
gst_type_find_element_emit_have_type (typefind, probability, found_caps);
|
||||||
gst_caps_unref (found_caps);
|
gst_caps_unref (found_caps);
|
||||||
} else if (typefind->mode == MODE_NORMAL) {
|
} else if (typefind->mode == MODE_NORMAL) {
|
||||||
GstBuffer *outbuf = NULL;
|
GstBuffer *outbuf = NULL;
|
||||||
|
|
Loading…
Reference in a new issue