/* TRUE if the input got drained */
gboolean drained;
+
+ /* TEMPORARY HACK for knowing if upstream is already parsed and identity can
+ * be avoided */
+ gboolean input_is_parsed;
};
/* Multiqueue Slots */
/* If the incoming caps match decodebin3 output, no processing is needed */
GST_FIXME_OBJECT (sinkpad, "parsebin not needed (matches output caps) !");
parsebin_needed = FALSE;
+ } else if (input->input_is_parsed) {
+ GST_DEBUG_OBJECT (sinkpad, "input is parsed, no parsebin needed");
+ parsebin_needed = FALSE;
} else {
GList *decoder_list;
/* If the incoming caps are compatible with a decoder, we don't need to
case GST_EVENT_STREAM_START:
{
GstQuery *q = gst_query_new_selectable ();
+ const GstStructure *s = gst_event_get_structure (event);
/* Query whether upstream can handle stream selection or not */
if (gst_pad_peer_query (sinkpad, q)) {
if (input->upstream_selected)
dbin->upstream_selected = TRUE;
+ input->input_is_parsed = s
+ && gst_structure_has_field (s, "urisourcebin-parsed-data");
+
/* Make sure group ids will be recalculated */
input->group_id = GST_GROUP_ID_INVALID;
INPUT_LOCK (dbin);
}
break;
case GST_EVENT_STREAM_START:
+ {
+ /* This is a temporary hack to notify downstream decodebin3 to *not*
+ * plug in an extra parsebin */
+ if (slot->linked_info && slot->linked_info->demuxer_is_parsebin) {
+ GstStructure *s;
+ GST_PAD_PROBE_INFO_DATA (info) = ev = gst_event_make_writable (ev);
+ s = (GstStructure *) gst_event_get_structure (ev);
+ gst_structure_set (s, "urisourcebin-parsed-data", G_TYPE_BOOLEAN, TRUE,
+ NULL);
+ }
+ }
+ /* PASSTHROUGH */
case GST_EVENT_FLUSH_STOP:
BUFFERING_LOCK (urisrc);
slot->is_eos = FALSE;