mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
alphadecodebin: Use normal queues instead of multiqueue
The multiqueue was too flexible for our need, allowing to queue passed the configured threshold. It also didn't work well when trying to propagate EOS flow return. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2238>
This commit is contained in:
parent
1229257ad4
commit
c63b2f2712
1 changed files with 18 additions and 28 deletions
|
@ -97,7 +97,8 @@ gst_alpha_decode_bin_constructed (GObject * obj)
|
|||
GstPad *src_gpad, *sink_gpad;
|
||||
GstPad *src_pad = NULL, *sink_pad = NULL;
|
||||
GstElement *alphademux = NULL;
|
||||
GstElement *multiqueue = NULL;
|
||||
GstElement *queue = NULL;
|
||||
GstElement *alpha_queue = NULL;
|
||||
GstElement *decoder = NULL;
|
||||
GstElement *alpha_decoder = NULL;
|
||||
GstElement *alphacombine = NULL;
|
||||
|
@ -118,19 +119,20 @@ gst_alpha_decode_bin_constructed (GObject * obj)
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
multiqueue = gst_element_factory_make ("multiqueue", NULL);
|
||||
if (!multiqueue) {
|
||||
priv->missing_element = "multiqueue";
|
||||
queue = gst_element_factory_make ("queue", NULL);
|
||||
alpha_queue = gst_element_factory_make ("queue", NULL);
|
||||
if (!queue || !alpha_queue) {
|
||||
priv->missing_element = "queue";
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
decoder = gst_element_factory_make (klass->decoder_name, NULL);
|
||||
decoder = gst_element_factory_make (klass->decoder_name, "maindec");
|
||||
if (!decoder) {
|
||||
priv->missing_element = klass->decoder_name;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
alpha_decoder = gst_element_factory_make (klass->decoder_name, NULL);
|
||||
alpha_decoder = gst_element_factory_make (klass->decoder_name, "alphadec");
|
||||
if (!alpha_decoder) {
|
||||
priv->missing_element = klass->decoder_name;
|
||||
goto cleanup;
|
||||
|
@ -142,7 +144,7 @@ gst_alpha_decode_bin_constructed (GObject * obj)
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
gst_bin_add_many (GST_BIN (self), alphademux, multiqueue, decoder,
|
||||
gst_bin_add_many (GST_BIN (self), alphademux, queue, alpha_queue, decoder,
|
||||
alpha_decoder, alphacombine, NULL);
|
||||
|
||||
/* link elements */
|
||||
|
@ -150,34 +152,21 @@ gst_alpha_decode_bin_constructed (GObject * obj)
|
|||
gst_ghost_pad_set_target (GST_GHOST_PAD (sink_gpad), sink_pad);
|
||||
gst_clear_object (&sink_pad);
|
||||
|
||||
sink_pad = gst_element_request_pad_simple (multiqueue, "sink_0");
|
||||
src_pad = gst_element_get_static_pad (multiqueue, "src_0");
|
||||
g_object_set (sink_pad, "group_id", 0, NULL);
|
||||
g_object_set (src_pad, "group_id", 0, NULL);
|
||||
gst_clear_object (&sink_pad);
|
||||
gst_clear_object (&src_pad);
|
||||
gst_element_link_pads (alphademux, "src", multiqueue, "sink_0");
|
||||
gst_element_link_pads (multiqueue, "src_0", decoder, "sink");
|
||||
gst_element_link_pads (alphademux, "src", queue, "sink");
|
||||
gst_element_link_pads (queue, "src", decoder, "sink");
|
||||
gst_element_link_pads (decoder, "src", alphacombine, "sink");
|
||||
|
||||
sink_pad = gst_element_request_pad_simple (multiqueue, "sink_1");
|
||||
src_pad = gst_element_get_static_pad (multiqueue, "src_1");
|
||||
g_object_set (sink_pad, "group_id", 1, NULL);
|
||||
g_object_set (src_pad, "group_id", 1, NULL);
|
||||
gst_clear_object (&sink_pad);
|
||||
gst_clear_object (&src_pad);
|
||||
gst_element_link_pads (alphademux, "alpha", multiqueue, "sink_1");
|
||||
gst_element_link_pads (multiqueue, "src_1", alpha_decoder, "sink");
|
||||
gst_element_link_pads (alphademux, "alpha", alpha_queue, "sink");
|
||||
gst_element_link_pads (alpha_queue, "src", alpha_decoder, "sink");
|
||||
gst_element_link_pads (alpha_decoder, "src", alphacombine, "alpha");
|
||||
|
||||
src_pad = gst_element_get_static_pad (alphacombine, "src");
|
||||
gst_ghost_pad_set_target (GST_GHOST_PAD (src_gpad), src_pad);
|
||||
gst_object_unref (src_pad);
|
||||
|
||||
gst_element_link_pads (alphademux, "alpha", multiqueue, "sink_0");
|
||||
|
||||
/* configure the elements */
|
||||
g_object_set (multiqueue, "max-size-bytes", 0, "max-size-time", 0,
|
||||
g_object_set (queue, "max-size-bytes", 0, "max-size-time", 0,
|
||||
"max-size-buffers", 1, NULL);
|
||||
g_object_set (alpha_queue, "max-size-bytes", 0, "max-size-time", 0,
|
||||
"max-size-buffers", 1, NULL);
|
||||
|
||||
/* signal success, we will handle this in NULL->READY transition */
|
||||
|
@ -186,7 +175,8 @@ gst_alpha_decode_bin_constructed (GObject * obj)
|
|||
|
||||
cleanup:
|
||||
gst_clear_object (&alphademux);
|
||||
gst_clear_object (&multiqueue);
|
||||
gst_clear_object (&queue);
|
||||
gst_clear_object (&alpha_queue);
|
||||
gst_clear_object (&decoder);
|
||||
gst_clear_object (&alpha_decoder);
|
||||
gst_clear_object (&alphacombine);
|
||||
|
|
Loading…
Reference in a new issue