From 551e7b97f31fc5a0bd7c545b4cd8258d18da512a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 19 Aug 2015 21:33:09 +0300 Subject: [PATCH] dashdemux: Handle encoding specified in the element when dumping nodes Previous patch did not handle the case where an encoding (e.g. UTF-8) is specified in the element. Added an extra test for with and without encoding. https://bugzilla.gnome.org/show_bug.cgi?id=753813 --- ext/dash/gstmpdparser.c | 10 +------ tests/check/elements/dash_mpd.c | 49 +++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c index e800d6b1f5..ea5dc6bb14 100644 --- a/ext/dash/gstmpdparser.c +++ b/ext/dash/gstmpdparser.c @@ -972,18 +972,10 @@ gst_mpdparser_get_xml_node_as_string (xmlNode * a_node, gchar ** content) { gboolean exists = FALSE; const char *txt_encoding; - xmlCharEncodingHandlerPtr conv_hdlr = NULL; xmlOutputBufferPtr out_buf; txt_encoding = (const char *) a_node->doc->encoding; - if (txt_encoding != NULL) { - conv_hdlr = xmlFindCharEncodingHandler (txt_encoding); - if (conv_hdlr == NULL) { - GST_ERROR ("Unable to find encoder for encoding: %s", txt_encoding); - return FALSE; - } - } - out_buf = xmlAllocOutputBuffer (conv_hdlr); + out_buf = xmlAllocOutputBuffer (NULL); g_assert (out_buf != NULL); xmlNodeDumpOutput (out_buf, a_node->doc, a_node, 0, 0, txt_encoding); xmlOutputBufferFlush (out_buf); diff --git a/tests/check/elements/dash_mpd.c b/tests/check/elements/dash_mpd.c index bbf27aa983..a076d3d141 100644 --- a/tests/check/elements/dash_mpd.c +++ b/tests/check/elements/dash_mpd.c @@ -1281,7 +1281,7 @@ GST_START_TEST (dash_mpdparser_contentProtection_no_value) GstRepresentationBaseType *representationBase; GstDescriptorType *contentProtection; const gchar *xml = - "" + "" "" " " @@ -1310,7 +1310,6 @@ GST_START_TEST (dash_mpdparser_contentProtection_no_value) assert_equals_string (contentProtection->schemeIdUri, "urn:uuid:5e629af5-38da-4063-8977-97ffbd9902d4"); fail_if (contentProtection->value == NULL); - g_print ("%s\n", contentProtection->value); /* We can't do a simple compare of value (which should be an XML dump of the ContentProtection element), because the whitespace formatting from xmlDump might differ between versions of libxml */ @@ -1331,6 +1330,50 @@ GST_START_TEST (dash_mpdparser_contentProtection_no_value) GST_END_TEST; +/* + * Test parsing ContentProtection element that has no value attribute + * nor an XML encoding + */ +GST_START_TEST (dash_mpdparser_contentProtection_no_value_no_encoding) +{ + GstPeriodNode *periodNode; + GstAdaptationSetNode *adaptationSet; + GstRepresentationBaseType *representationBase; + GstDescriptorType *contentProtection; + const gchar *xml = + "" + "" + " " + " " + " " + " " + " " + " urn:marlin:kid:02020202020202020202020202020202" + " " + " " ""; + + gboolean ret; + GstMpdClient *mpdclient = gst_mpd_client_new (); + + ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml)); + assert_equals_int (ret, TRUE); + + periodNode = (GstPeriodNode *) mpdclient->mpd_node->Periods->data; + adaptationSet = (GstAdaptationSetNode *) periodNode->AdaptationSets->data; + representationBase = adaptationSet->RepresentationBase; + assert_equals_int (g_list_length (representationBase->ContentProtection), 2); + contentProtection = + (GstDescriptorType *) g_list_nth (representationBase->ContentProtection, + 1)->data; + assert_equals_string (contentProtection->schemeIdUri, + "urn:uuid:5e629af5-38da-4063-8977-97ffbd9902d4"); + fail_if (contentProtection->value == NULL); + gst_mpd_client_free (mpdclient); +} + +GST_END_TEST; + /* * Test parsing Period AdaptationSet Accessibility attributes * @@ -4405,6 +4448,8 @@ dash_suite (void) tcase_add_test (tc_simpleMPD, dash_mpdparser_period_adaptationSet_representationBase_contentProtection); tcase_add_test (tc_simpleMPD, dash_mpdparser_contentProtection_no_value); + tcase_add_test (tc_simpleMPD, + dash_mpdparser_contentProtection_no_value_no_encoding); tcase_add_test (tc_simpleMPD, dash_mpdparser_period_adaptationSet_accessibility); tcase_add_test (tc_simpleMPD, dash_mpdparser_period_adaptationSet_role);