summaryrefslogtreecommitdiff
path: root/gst/codecalpha/gstalphadecodebin.c
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2021-05-12 17:32:20 -0400
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-05-13 14:38:47 +0000
commitc63b2f2712541c2e79233e96f6060c762766e54c (patch)
tree6483a7c229f48528092086c4cf26a6b14b0c6c00 /gst/codecalpha/gstalphadecodebin.c
parent1229257ad4ad982009ca0300e8d5244e75321224 (diff)
downloadgstreamer-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.c46
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);