diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/check/Makefile.am | 5 | ||||
-rw-r--r-- | tests/check/elements/dash_mpd.c | 104 | ||||
-rw-r--r-- | tests/check/elements/dash_mpd_data/xlink_double_period.period | 2 | ||||
-rw-r--r-- | tests/check/elements/dash_mpd_data/xlink_single_period.period | 1 |
4 files changed, 110 insertions, 2 deletions
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 35a4a251d..90b216520 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -470,8 +470,9 @@ elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \ $(AM_CFLAGS) -elements_dash_mpd_CFLAGS = $(AM_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS) $(LIBXML2_CFLAGS) -elements_dash_mpd_LDADD = $(LDADD) $(LIBXML2_LIBS) \ +elements_dash_mpd_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS) $(LIBXML2_CFLAGS) \ + -DDASH_MPD_DATADIR="$(srcdir)/elements/dash_mpd_data" +elements_dash_mpd_LDADD = $(GST_BASE_LIBS) $(LDADD) $(LIBXML2_LIBS) \ $(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la elements_dash_mpd_SOURCES = elements/dash_mpd.c diff --git a/tests/check/elements/dash_mpd.c b/tests/check/elements/dash_mpd.c index 5585f4980..946921217 100644 --- a/tests/check/elements/dash_mpd.c +++ b/tests/check/elements/dash_mpd.c @@ -5529,6 +5529,107 @@ GST_START_TEST (dash_mpdparser_maximum_segment_duration) GST_END_TEST; /* + * Test parsing of Perioud using @xlink:href attribute + */ + +#define STRINGIFY_(x) #x +#define STRINGIFY(x) STRINGIFY_ (x) +#define REMOTEDIR STRINGIFY (DASH_MPD_DATADIR) +#define XLINK_SINGLE_PERIOD_FILENAME REMOTEDIR "/xlink_single_period.period" +#define XLINK_DOUBLE_PERIOD_FILENAME REMOTEDIR "/xlink_double_period.period" + +GST_START_TEST (dash_mpdparser_xlink_period) +{ + GstPeriodNode *periodNode; + GstUriDownloader *downloader; + GstMpdClient *mpdclient; + GList *period_list, *iter; + gboolean ret; + gchar *xml_joined, *file_uri_single_period, *file_uri_double_period; + const gchar *xml_frag_start = + "<?xml version=\"1.0\"?>" + "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\"" + " profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">" + " <Period id=\"Period0\"" "duration=\"PT5S\"></Period>"; + + const gchar *xml_uri_front = " <Period xlink:href=\""; + + const gchar *xml_uri_rear = + "\"" + " xlink:actuate=\"onRequest\"" + " xmlns:xlink=\"http://www.w3.org/1999/xlink\"></Period>"; + + const gchar *xml_frag_end = "</MPD>"; + + /* XLINK_ONE_PERIOD_FILENAME + * + * <Period id="xlink-single-period-Period1" duration="PT10S" xmlns="urn:mpeg:dash:schema:mpd:2011"></Period> + */ + + /* XLINK_TWO_PERIODS_FILENAME + * + * <Period id="xlink-double-period-Period1" duration="PT10S" xmlns="urn:mpeg:dash:schema:mpd:2011"></Period> + * <Period id="xlink-double-period-Period2" duration="PT20S" xmlns="urn:mpeg:dash:schema:mpd:2011"></Period> + */ + + + mpdclient = gst_mpd_client_new (); + downloader = gst_uri_downloader_new (); + + gst_mpd_client_set_uri_downloader (mpdclient, downloader); + + file_uri_single_period = + gst_filename_to_uri (XLINK_SINGLE_PERIOD_FILENAME, NULL); + file_uri_double_period = + gst_filename_to_uri (XLINK_DOUBLE_PERIOD_FILENAME, NULL); + + /* constructs inital mpd using external xml uri */ + xml_joined = g_strjoin ("", xml_frag_start, + xml_uri_front, (const char *) file_uri_single_period, xml_uri_rear, + xml_uri_front, (const char *) file_uri_double_period, xml_uri_rear, + xml_frag_end, NULL); + + ret = gst_mpd_parse (mpdclient, xml_joined, (gint) strlen (xml_joined)); + assert_equals_int (ret, TRUE); + + period_list = mpdclient->mpd_node->Periods; + /* only count periods on initial mpd (external xml does not parsed yet) */ + assert_equals_int (g_list_length (period_list), 3); + + /* process the xml data */ + ret = gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE, + -1, NULL); + assert_equals_int (ret, TRUE); + + period_list = mpdclient->mpd_node->Periods; + assert_equals_int (g_list_length (period_list), 4); + + iter = period_list; + periodNode = (GstPeriodNode *) iter->data; + assert_equals_string (periodNode->id, "Period0"); + + iter = iter->next; + periodNode = (GstPeriodNode *) iter->data; + assert_equals_string (periodNode->id, "xlink-single-period-Period1"); + + iter = iter->next; + periodNode = (GstPeriodNode *) iter->data; + assert_equals_string (periodNode->id, "xlink-double-period-Period1"); + + iter = iter->next; + periodNode = (GstPeriodNode *) iter->data; + assert_equals_string (periodNode->id, "xlink-double-period-Period2"); + + gst_mpd_client_free (mpdclient); + g_object_unref (downloader); + g_free (file_uri_single_period); + g_free (file_uri_double_period); + g_free (xml_joined); +} + +GST_END_TEST; + +/* * create a test suite containing all dash testcases */ static Suite * @@ -5654,6 +5755,9 @@ dash_suite (void) tcase_add_test (tc_simpleMPD, dash_mpdparser_various_duration_formats); tcase_add_test (tc_simpleMPD, dash_mpdparser_default_presentation_delay); + /* tests checking xlink attributes */ + tcase_add_test (tc_simpleMPD, dash_mpdparser_xlink_period); + /* tests checking the MPD management * (eg. setting active streams, obtaining attributes values) */ diff --git a/tests/check/elements/dash_mpd_data/xlink_double_period.period b/tests/check/elements/dash_mpd_data/xlink_double_period.period new file mode 100644 index 000000000..cb656b953 --- /dev/null +++ b/tests/check/elements/dash_mpd_data/xlink_double_period.period @@ -0,0 +1,2 @@ +<Period id="xlink-double-period-Period1" duration="PT10S" xmlns="urn:mpeg:dash:schema:mpd:2011"></Period> +<Period id="xlink-double-period-Period2" duration="PT20S" xmlns="urn:mpeg:dash:schema:mpd:2011"></Period> diff --git a/tests/check/elements/dash_mpd_data/xlink_single_period.period b/tests/check/elements/dash_mpd_data/xlink_single_period.period new file mode 100644 index 000000000..dd85543af --- /dev/null +++ b/tests/check/elements/dash_mpd_data/xlink_single_period.period @@ -0,0 +1 @@ +<Period id="xlink-single-period-Period1" duration="PT10S" xmlns="urn:mpeg:dash:schema:mpd:2011"></Period> |