mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
gst/playback/: Set state on newly added element to READY so that negotiation can happen ASAP.
Original commit message from CVS: * gst/playback/gstdecodebin.c: (gst_decode_bin_init), (find_compatibles), (close_pad_link), (try_to_link_1), (no_more_pads), (close_link), (type_found): * gst/playback/gstplaybasebin.c: (new_decoded_pad): * gst/playback/gstplaybin.c: (gen_video_element), (gen_audio_element): Set state on newly added element to READY so that negotiation can happen ASAP. Addes some more debug info. Do not try to plug pads with multiple caps structures or ANY because it is too dangerous since we do not do dynamic replugging.
This commit is contained in:
parent
651b92bc77
commit
e3ddfa2c41
4 changed files with 52 additions and 11 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2004-10-06 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst/playback/gstdecodebin.c: (gst_decode_bin_init),
|
||||
(find_compatibles), (close_pad_link), (try_to_link_1),
|
||||
(no_more_pads), (close_link), (type_found):
|
||||
* gst/playback/gstplaybasebin.c: (new_decoded_pad):
|
||||
* gst/playback/gstplaybin.c: (gen_video_element),
|
||||
(gen_audio_element):
|
||||
Set state on newly added element to READY so that negotiation
|
||||
can happen ASAP.
|
||||
Addes some more debug info.
|
||||
Do not try to plug pads with multiple caps structures or ANY
|
||||
because it is too dangerous since we do not do dynamic
|
||||
replugging.
|
||||
|
||||
2004-10-06 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||
|
||||
written by: Gora Mohanty <gora_mohanty@yahoo.co.in>
|
||||
|
|
|
@ -380,6 +380,14 @@ close_pad_link (GstElement * element, GstPad * pad, GstCaps * caps,
|
|||
return;
|
||||
}
|
||||
|
||||
/* the caps is any, this means the pad can be anything and
|
||||
* we don't know yet */
|
||||
if (gst_caps_is_any (caps)) {
|
||||
return;
|
||||
}
|
||||
|
||||
GST_LOG_OBJECT (element, "trying to close %" GST_PTR_FORMAT, caps);
|
||||
|
||||
/* FIXME, iterate over more structures? */
|
||||
structure = gst_caps_get_structure (caps, 0);
|
||||
mimetype = gst_structure_get_name (structure);
|
||||
|
@ -402,6 +410,8 @@ close_pad_link (GstElement * element, GstPad * pad, GstCaps * caps,
|
|||
/* see if any more pending dynamic connections exist */
|
||||
dynamic = gst_decode_bin_is_dynamic (decode_bin);
|
||||
|
||||
GST_LOG_OBJECT (element, "closed pad %s", padname);
|
||||
|
||||
/* our own signal with an extra flag that this is the only pad */
|
||||
g_signal_emit (G_OBJECT (decode_bin),
|
||||
gst_decode_bin_signals[SIGNAL_NEW_DECODED_PAD], 0, ghost, !dynamic);
|
||||
|
@ -410,18 +420,22 @@ close_pad_link (GstElement * element, GstPad * pad, GstCaps * caps,
|
|||
return;
|
||||
}
|
||||
|
||||
/* then continue plugging, first find all compatible elements */
|
||||
to_try = find_compatibles (decode_bin, caps);
|
||||
if (to_try == NULL) {
|
||||
/* no compatible elements, fire the unknown_type signal, we cannot go
|
||||
* on */
|
||||
g_signal_emit (G_OBJECT (decode_bin),
|
||||
gst_decode_bin_signals[SIGNAL_UNKNOWN_TYPE], 0, caps);
|
||||
return;
|
||||
if (gst_caps_get_size (caps) == 1) {
|
||||
/* then continue plugging, first find all compatible elements */
|
||||
to_try = find_compatibles (decode_bin, caps);
|
||||
if (to_try == NULL) {
|
||||
/* no compatible elements, fire the unknown_type signal, we cannot go
|
||||
* on */
|
||||
g_signal_emit (G_OBJECT (decode_bin),
|
||||
gst_decode_bin_signals[SIGNAL_UNKNOWN_TYPE], 0, caps);
|
||||
return;
|
||||
}
|
||||
try_to_link_1 (decode_bin, pad, to_try);
|
||||
} else {
|
||||
GST_LOG_OBJECT (element, "multiple possibilities, delaying");
|
||||
g_warning ("multiple possibilities, delaying");
|
||||
}
|
||||
|
||||
/* now try to link the elements in the to_try list to the pad */
|
||||
try_to_link_1 (decode_bin, pad, to_try);
|
||||
}
|
||||
|
||||
/* given a list of element factories, try to link one of the factories
|
||||
|
@ -452,6 +466,9 @@ try_to_link_1 (GstDecodeBin * decode_bin, GstPad * pad, GList * factories)
|
|||
/* now add the element to the bin first */
|
||||
GST_DEBUG_OBJECT (decode_bin, "adding %s", gst_element_get_name (element));
|
||||
gst_bin_add (GST_BIN (decode_bin), element);
|
||||
|
||||
gst_element_set_state (element, GST_STATE_READY);
|
||||
|
||||
/* keep out own list of elements */
|
||||
decode_bin->elements = g_list_prepend (decode_bin->elements, element);
|
||||
|
||||
|
@ -654,7 +671,7 @@ type_found (GstElement * typefind, guint probability, GstCaps * caps,
|
|||
gst_element_no_more_pads (GST_ELEMENT (decode_bin));
|
||||
} else {
|
||||
/* more dynamic elements exist that could create new pads */
|
||||
GST_DEBUG_OBJECT (decode_bin, "we more dynamic elements");
|
||||
GST_DEBUG_OBJECT (decode_bin, "we have more dynamic elements");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -336,7 +336,10 @@ new_decoded_pad (GstElement * element, GstPad * pad, gboolean last,
|
|||
play_base_bin->preroll_elems =
|
||||
g_list_prepend (play_base_bin->preroll_elems, new_element);
|
||||
|
||||
gst_element_set_state (new_element, GST_STATE_READY);
|
||||
|
||||
gst_pad_link (pad, gst_element_get_pad (new_element, "sink"));
|
||||
|
||||
gst_element_set_state (new_element, GST_STATE_PAUSED);
|
||||
}
|
||||
|
||||
|
|
|
@ -289,6 +289,8 @@ gen_video_element (GstPlayBin * play_bin)
|
|||
sink = play_bin->video_sink;
|
||||
} else {
|
||||
sink = gst_element_factory_make ("ximagesink", "sink");
|
||||
|
||||
/* g_object_set (G_OBJECT (sink), "pixel-aspect-ratio", "1/1", NULL); */
|
||||
}
|
||||
|
||||
play_bin->seekables = g_list_append (play_bin->seekables, sink);
|
||||
|
@ -302,6 +304,8 @@ gen_video_element (GstPlayBin * play_bin)
|
|||
gst_element_add_ghost_pad (element, gst_element_get_pad (conv, "sink"),
|
||||
"sink");
|
||||
|
||||
gst_element_set_state (element, GST_STATE_READY);
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
|
@ -343,6 +347,8 @@ gen_audio_element (GstPlayBin * play_bin)
|
|||
gst_element_add_ghost_pad (element,
|
||||
gst_element_get_pad (conv, "sink"), "sink");
|
||||
|
||||
gst_element_set_state (element, GST_STATE_READY);
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue