mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1987>
This commit is contained in:
parent
074f7c2e4e
commit
1170ab3c29
2 changed files with 35 additions and 5 deletions
|
@ -2657,13 +2657,12 @@ gst_wavparse_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
|
||||||
gboolean res = TRUE;
|
gboolean res = TRUE;
|
||||||
GstWavParse *wav = GST_WAVPARSE (parent);
|
GstWavParse *wav = GST_WAVPARSE (parent);
|
||||||
|
|
||||||
/* only if we know */
|
|
||||||
if (wav->state != GST_WAVPARSE_DATA) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query));
|
GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query));
|
||||||
|
|
||||||
|
if (wav->state != GST_WAVPARSE_DATA) {
|
||||||
|
return gst_pad_query_default (pad, parent, query);
|
||||||
|
}
|
||||||
|
|
||||||
switch (GST_QUERY_TYPE (query)) {
|
switch (GST_QUERY_TYPE (query)) {
|
||||||
case GST_QUERY_POSITION:
|
case GST_QUERY_POSITION:
|
||||||
{
|
{
|
||||||
|
|
|
@ -209,6 +209,36 @@ GST_START_TEST (test_seek)
|
||||||
|
|
||||||
GST_END_TEST;
|
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 *
|
static Suite *
|
||||||
wavparse_suite (void)
|
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_pull);
|
||||||
tcase_add_test (tc_chain, test_simple_file_push);
|
tcase_add_test (tc_chain, test_simple_file_push);
|
||||||
tcase_add_test (tc_chain, test_seek);
|
tcase_add_test (tc_chain, test_seek);
|
||||||
|
tcase_add_test (tc_chain, test_query_uri);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue