diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2021-05-12 17:32:20 -0400 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-05-13 14:38:47 +0000 |
commit | c63b2f2712541c2e79233e96f6060c762766e54c (patch) | |
tree | 6483a7c229f48528092086c4cf26a6b14b0c6c00 /gst/codecalpha/gstalphadecodebin.c | |
parent | 1229257ad4ad982009ca0300e8d5244e75321224 (diff) | |
download | gstreamer-plugins-bad-c63b2f2712541c2e79233e96f6060c762766e54c.tar.gz |
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>
Diffstat (limited to 'gst/codecalpha/gstalphadecodebin.c')
-rw-r--r-- | gst/codecalpha/gstalphadecodebin.c | 46 |
1 files changed, 18 insertions, 28 deletions
diff --git a/gst/codecalpha/gstalphadecodebin.c b/gst/codecalpha/gstalphadecodebin.c index aead16589..9f0a0a3f1 100644 --- a/gst/codecalpha/gstalphadecodebin.c +++ b/gst/codecalpha/gstalphadecodebin.c @@ -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); |