diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c
index 8cd285871a..f88bb6c807 100644
--- a/ext/dash/gstmpdparser.c
+++ b/ext/dash/gstmpdparser.c
@@ -503,35 +503,14 @@ error:
static void
gst_mpdparser_parse_content_protection_node (GList ** list, xmlNode * a_node)
{
- gchar *value = NULL;
- if (gst_xml_helper_get_prop_string (a_node, "value", &value)) {
- if (!g_strcmp0 (value, "MSPR 2.0")) {
- xmlNode *cur_node;
- for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
- if (cur_node->type == XML_ELEMENT_NODE) {
- if (xmlStrcmp (cur_node->name, (xmlChar *) "pro") == 0) {
- GstMPDDescriptorTypeNode *new_descriptor;
- new_descriptor = gst_mpd_descriptor_type_node_new ((const gchar *)
- cur_node->name);
- *list = g_list_append (*list, new_descriptor);
+ GstMPDDescriptorTypeNode *new_descriptor;
+ new_descriptor = gst_mpd_descriptor_type_node_new ((const gchar *)
+ a_node->name);
+ *list = g_list_append (*list, new_descriptor);
- gst_xml_helper_get_prop_string_stripped (a_node, "schemeIdUri",
- &new_descriptor->schemeIdUri);
-
- gst_xml_helper_get_node_content (cur_node, &new_descriptor->value);
- goto beach;
- }
- }
- }
- } else {
- gst_mpdparser_parse_descriptor_type (list, a_node);
- }
- } else {
- gst_mpdparser_parse_descriptor_type (list, a_node);
- }
-beach:
- if (value)
- g_free (value);
+ gst_xml_helper_get_prop_string_stripped (a_node, "schemeIdUri",
+ &new_descriptor->schemeIdUri);
+ gst_xml_helper_get_node_as_string (a_node, &new_descriptor->value);
}
static void
diff --git a/tests/check/elements/dash_mpd.c b/tests/check/elements/dash_mpd.c
index cc5596a08f..51448e69aa 100644
--- a/tests/check/elements/dash_mpd.c
+++ b/tests/check/elements/dash_mpd.c
@@ -1392,6 +1392,7 @@ GST_START_TEST
gboolean ret;
GstMPDClient *mpdclient = gst_mpd_client_new ();
+ gchar *str;
ret = gst_mpd_client_parse (mpdclient, xml, (gint) strlen (xml));
assert_equals_int (ret, TRUE);
@@ -1402,13 +1403,76 @@ GST_START_TEST
contentProtection =
(GstMPDDescriptorTypeNode *) representationBase->ContentProtection->data;
assert_equals_string (contentProtection->schemeIdUri, "TestSchemeIdUri");
- assert_equals_string (contentProtection->value, "TestValue");
+
+ /* 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 */
+ str = strstr (contentProtection->value, "value, "value=\"TestValue\"");
+ fail_if (str == NULL);
+ str = strstr (contentProtection->value, "");
+ fail_if (str == NULL);
gst_mpd_client_free (mpdclient);
}
GST_END_TEST;
+/*
+ * Test parsing Period AdaptationSet RepresentationBase ContentProtection
+ * with custom ContentProtection content.
+ */
+GST_START_TEST
+ (dash_mpdparser_period_adaptationSet_representationBase_contentProtection_with_content)
+{
+ GstMPDPeriodNode *periodNode;
+ GstMPDAdaptationSetNode *adaptationSet;
+ GstMPDRepresentationBaseNode *representationBase;
+ GstMPDDescriptorTypeNode *contentProtection;
+ const gchar *xml =
+ ""
+ ""
+ " customns=\"foo\""
+ " "
+ " "
+ " "
+ " Hello world"
+ " ";
+
+ gboolean ret;
+ GstMPDClient *mpdclient = gst_mpd_client_new ();
+ gchar *str;
+
+ ret = gst_mpd_client_parse (mpdclient, xml, (gint) strlen (xml));
+ assert_equals_int (ret, TRUE);
+
+ periodNode = (GstMPDPeriodNode *) mpdclient->mpd_root_node->Periods->data;
+ adaptationSet = (GstMPDAdaptationSetNode *) periodNode->AdaptationSets->data;
+ representationBase = GST_MPD_REPRESENTATION_BASE_NODE (adaptationSet);
+ contentProtection =
+ (GstMPDDescriptorTypeNode *) representationBase->ContentProtection->data;
+ assert_equals_string (contentProtection->schemeIdUri, "TestSchemeIdUri");
+
+ /* 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 */
+ str = strstr (contentProtection->value, "value,
+ "Hello world");
+ fail_if (str == NULL);
+ str = strstr (contentProtection->value, "");
+ fail_if (str == NULL);
+
+ gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+
/*
* Test parsing ContentProtection element that has no value attribute
*/
@@ -6388,6 +6452,8 @@ dash_suite (void)
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_representationBase_contentProtection_with_content);
tcase_add_test (tc_simpleMPD,
dash_mpdparser_period_adaptationSet_accessibility);
tcase_add_test (tc_simpleMPD, dash_mpdparser_period_adaptationSet_role);