decodebin2: Store for every chain, which pad resulted in its creation
This commit is contained in:
parent
4b84d7552f
commit
366aaae825
@ -313,6 +313,8 @@ struct _GstDecodeChain
|
|||||||
|
|
||||||
GMutex *lock; /* Protects this chain and its groups */
|
GMutex *lock; /* Protects this chain and its groups */
|
||||||
|
|
||||||
|
GstPad *pad; /* srcpad that caused creation of this chain */
|
||||||
|
|
||||||
gboolean demuxer; /* TRUE if elements->data is a demuxer */
|
gboolean demuxer; /* TRUE if elements->data is a demuxer */
|
||||||
GList *elements; /* All elements in this group, first
|
GList *elements; /* All elements in this group, first
|
||||||
is the latest and most downstream element */
|
is the latest and most downstream element */
|
||||||
@ -340,7 +342,7 @@ struct _GstDecodeChain
|
|||||||
|
|
||||||
static void gst_decode_chain_free (GstDecodeChain * chain);
|
static void gst_decode_chain_free (GstDecodeChain * chain);
|
||||||
static GstDecodeChain *gst_decode_chain_new (GstDecodeBin * dbin,
|
static GstDecodeChain *gst_decode_chain_new (GstDecodeBin * dbin,
|
||||||
GstDecodeGroup * group);
|
GstDecodeGroup * group, GstPad * pad);
|
||||||
static void gst_decode_group_hide (GstDecodeGroup * group);
|
static void gst_decode_group_hide (GstDecodeGroup * group);
|
||||||
static void gst_decode_group_free (GstDecodeGroup * group);
|
static void gst_decode_group_free (GstDecodeGroup * group);
|
||||||
static GstDecodeGroup *gst_decode_group_new (GstDecodeBin * dbin,
|
static GstDecodeGroup *gst_decode_group_new (GstDecodeBin * dbin,
|
||||||
@ -1048,7 +1050,7 @@ analyze_new_pad (GstDecodeBin * dbin, GstElement * src, GstPad * pad,
|
|||||||
CHAIN_MUTEX_LOCK (oldchain);
|
CHAIN_MUTEX_LOCK (oldchain);
|
||||||
group = gst_decode_chain_get_current_group (chain);
|
group = gst_decode_chain_get_current_group (chain);
|
||||||
if (group) {
|
if (group) {
|
||||||
chain = gst_decode_chain_new (dbin, group);
|
chain = gst_decode_chain_new (dbin, group, pad);
|
||||||
group->children = g_list_prepend (group->children, chain);
|
group->children = g_list_prepend (group->children, chain);
|
||||||
}
|
}
|
||||||
CHAIN_MUTEX_UNLOCK (oldchain);
|
CHAIN_MUTEX_UNLOCK (oldchain);
|
||||||
@ -1552,7 +1554,7 @@ type_found (GstElement * typefind, guint probability,
|
|||||||
|
|
||||||
pad = gst_element_get_static_pad (typefind, "src");
|
pad = gst_element_get_static_pad (typefind, "src");
|
||||||
|
|
||||||
decode_bin->decode_chain = gst_decode_chain_new (decode_bin, NULL);
|
decode_bin->decode_chain = gst_decode_chain_new (decode_bin, NULL, pad);
|
||||||
analyze_new_pad (decode_bin, typefind, pad, caps, decode_bin->decode_chain);
|
analyze_new_pad (decode_bin, typefind, pad, caps, decode_bin->decode_chain);
|
||||||
|
|
||||||
gst_object_unref (pad);
|
gst_object_unref (pad);
|
||||||
@ -1892,6 +1894,11 @@ gst_decode_chain_free_internal (GstDecodeChain * chain, gboolean hide)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chain->pad) {
|
||||||
|
gst_object_unref (chain->pad);
|
||||||
|
chain->pad = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (chain->dbin, "%s chain %p", (hide ? "Hided" : "Freed"),
|
GST_DEBUG_OBJECT (chain->dbin, "%s chain %p", (hide ? "Hided" : "Freed"),
|
||||||
chain);
|
chain);
|
||||||
CHAIN_MUTEX_UNLOCK (chain);
|
CHAIN_MUTEX_UNLOCK (chain);
|
||||||
@ -1923,7 +1930,8 @@ gst_decode_chain_free (GstDecodeChain * chain)
|
|||||||
* a group!
|
* a group!
|
||||||
*/
|
*/
|
||||||
static GstDecodeChain *
|
static GstDecodeChain *
|
||||||
gst_decode_chain_new (GstDecodeBin * dbin, GstDecodeGroup * parent)
|
gst_decode_chain_new (GstDecodeBin * dbin, GstDecodeGroup * parent,
|
||||||
|
GstPad * pad)
|
||||||
{
|
{
|
||||||
GstDecodeChain *chain = g_slice_new0 (GstDecodeChain);
|
GstDecodeChain *chain = g_slice_new0 (GstDecodeChain);
|
||||||
|
|
||||||
@ -1933,6 +1941,7 @@ gst_decode_chain_new (GstDecodeBin * dbin, GstDecodeGroup * parent)
|
|||||||
chain->dbin = dbin;
|
chain->dbin = dbin;
|
||||||
chain->parent = parent;
|
chain->parent = parent;
|
||||||
chain->lock = g_mutex_new ();
|
chain->lock = g_mutex_new ();
|
||||||
|
chain->pad = gst_object_ref (pad);
|
||||||
|
|
||||||
return chain;
|
return chain;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user