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
@ -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…
x
Reference in New Issue
Block a user