From 1170ab3c296d6e5b01367f761814832ccbf49775 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Cerveau?= Date: Fri, 18 Mar 2022 15:20:49 +0100 Subject: [PATCH] wavparse: handle query in any parse state In order to create the stream_id, we need to pass the query to the default query handler. If the parse state is different from GST_WAVPARSE_DATA the query should be passed to the default query handler. Part-of: --- .../gst-plugins-good/gst/wavparse/gstwavparse.c | 7 +++-- .../tests/check/elements/wavparse.c | 31 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/subprojects/gst-plugins-good/gst/wavparse/gstwavparse.c b/subprojects/gst-plugins-good/gst/wavparse/gstwavparse.c index 45b9db9..04dca3e 100644 --- a/subprojects/gst-plugins-good/gst/wavparse/gstwavparse.c +++ b/subprojects/gst-plugins-good/gst/wavparse/gstwavparse.c @@ -2657,13 +2657,12 @@ gst_wavparse_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) gboolean res = TRUE; GstWavParse *wav = GST_WAVPARSE (parent); - /* only if we know */ + GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query)); + if (wav->state != GST_WAVPARSE_DATA) { - return FALSE; + return gst_pad_query_default (pad, parent, query); } - GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query)); - switch (GST_QUERY_TYPE (query)) { case GST_QUERY_POSITION: { diff --git a/subprojects/gst-plugins-good/tests/check/elements/wavparse.c b/subprojects/gst-plugins-good/tests/check/elements/wavparse.c index 8a5702d..89e988b 100644 --- a/subprojects/gst-plugins-good/tests/check/elements/wavparse.c +++ b/subprojects/gst-plugins-good/tests/check/elements/wavparse.c @@ -209,6 +209,36 @@ GST_START_TEST (test_seek) GST_END_TEST; +GST_START_TEST (test_query_uri) +{ + GstElement *pipeline, *filesrc, *wavparse, *fakesink; + GstQuery *query; + gchar *uri; + fail_unless ((pipeline = gst_pipeline_new (NULL)) != NULL, + "Could not create pipeline"); + fail_unless ((filesrc = gst_element_factory_make ("filesrc", NULL)) != NULL, + "Could not create filesrc"); + fail_unless ((wavparse = gst_element_factory_make ("wavparse", NULL)) != NULL, + "Could not create wavparse"); + fail_unless ((fakesink = gst_element_factory_make ("fakesink", NULL)) != NULL, + "Could not create fakesink"); + gst_bin_add_many (GST_BIN (pipeline), filesrc, wavparse, fakesink, NULL); + gst_element_link_many (filesrc, wavparse, fakesink, NULL); + g_object_set (G_OBJECT (filesrc), "location", "my_test_file", NULL); + fail_unless ((query = gst_query_new_uri ()) != NULL, + "Could not prepare uri query"); + fail_unless (gst_element_query (GST_ELEMENT (wavparse), query), + "Could not query uri"); + gst_query_parse_uri (query, &uri); + fail_unless (uri != NULL); + + g_free (uri); + gst_query_unref (query); + gst_object_unref (pipeline); +} + +GST_END_TEST; + static Suite * wavparse_suite (void) { @@ -221,6 +251,7 @@ wavparse_suite (void) tcase_add_test (tc_chain, test_simple_file_pull); tcase_add_test (tc_chain, test_simple_file_push); tcase_add_test (tc_chain, test_seek); + tcase_add_test (tc_chain, test_query_uri); return s; } -- 2.7.4