summaryrefslogtreecommitdiff
path: root/ext/dash/gstmpdrepresentationnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dash/gstmpdrepresentationnode.c')
-rw-r--r--ext/dash/gstmpdrepresentationnode.c62
1 files changed, 57 insertions, 5 deletions
diff --git a/ext/dash/gstmpdrepresentationnode.c b/ext/dash/gstmpdrepresentationnode.c
index 3179a4a77..6b583f04a 100644
--- a/ext/dash/gstmpdrepresentationnode.c
+++ b/ext/dash/gstmpdrepresentationnode.c
@@ -22,7 +22,7 @@
#include "gstmpdparser.h"
G_DEFINE_TYPE (GstMPDRepresentationNode, gst_mpd_representation_node,
- GST_TYPE_OBJECT);
+ GST_TYPE_MPD_REPRESENTATION_BASE_NODE);
/* GObject VMethods */
@@ -35,10 +35,9 @@ gst_mpd_representation_node_finalize (GObject * object)
xmlFree (self->id);
g_strfreev (self->dependencyId);
g_strfreev (self->mediaStreamStructureId);
- gst_mpd_helper_representation_base_type_free (self->RepresentationBase);
g_list_free_full (self->SubRepresentations,
(GDestroyNotify) gst_mpd_sub_representation_node_free);
- gst_mpd_helper_segment_base_type_free (self->SegmentBase);
+ gst_mpd_segment_base_node_free (self->SegmentBase);
gst_mpd_segment_template_node_free (self->SegmentTemplate);
gst_mpd_segment_list_node_free (self->SegmentList);
g_list_free_full (self->BaseURLs, (GDestroyNotify) gst_mpd_baseurl_node_free);
@@ -46,11 +45,65 @@ gst_mpd_representation_node_finalize (GObject * object)
G_OBJECT_CLASS (gst_mpd_representation_node_parent_class)->finalize (object);
}
+/* Base class */
+
+static xmlNodePtr
+gst_mpd_representation_get_xml_node (GstMPDNode * node)
+{
+ gchar *value;
+ xmlNodePtr representation_xml_node = NULL;
+ GstMPDRepresentationNode *self = GST_MPD_REPRESENTATION_NODE (node);
+
+ representation_xml_node = xmlNewNode (NULL, (xmlChar *) "Representation");
+
+ gst_xml_helper_set_prop_string (representation_xml_node, "id", self->id);
+ gst_xml_helper_set_prop_uint (representation_xml_node, "bandwidth",
+ self->bandwidth);
+ if (self->qualityRanking)
+ gst_xml_helper_set_prop_uint (representation_xml_node, "qualityRanking",
+ self->qualityRanking);
+
+
+ if (self->dependencyId) {
+ value = g_strjoinv (" ", self->dependencyId);
+ gst_xml_helper_set_prop_string (representation_xml_node, "dependencyId",
+ value);
+ g_free (value);
+ }
+ if (self->mediaStreamStructureId) {
+ value = g_strjoinv (" ", self->mediaStreamStructureId);
+ gst_xml_helper_set_prop_string (representation_xml_node,
+ "mediaStreamStructureId", value);
+ g_free (value);
+ }
+
+ g_list_foreach (self->BaseURLs, gst_mpd_node_get_list_item,
+ representation_xml_node);
+ g_list_foreach (self->SubRepresentations,
+ gst_mpd_representation_base_node_get_list_item, representation_xml_node);
+
+ gst_mpd_node_add_child_node (GST_MPD_NODE (self->SegmentBase),
+ representation_xml_node);
+ gst_mpd_mult_segment_base_node_add_child_node (GST_MPD_NODE
+ (self->SegmentTemplate), representation_xml_node);
+ gst_mpd_mult_segment_base_node_add_child_node (GST_MPD_NODE
+ (self->SegmentList), representation_xml_node);
+
+ return representation_xml_node;
+}
+
static void
gst_mpd_representation_node_class_init (GstMPDRepresentationNodeClass * klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class;
+ GstMPDNodeClass *m_klass;
+
+ object_class = G_OBJECT_CLASS (klass);
+ m_klass = GST_MPD_NODE_CLASS (klass);
+
object_class->finalize = gst_mpd_representation_node_finalize;
+
+ m_klass->get_xml_node = gst_mpd_representation_get_xml_node;
}
static void
@@ -61,7 +114,6 @@ gst_mpd_representation_node_init (GstMPDRepresentationNode * self)
self->qualityRanking = 0;
self->dependencyId = NULL;
self->mediaStreamStructureId = NULL;
- self->RepresentationBase = NULL;
self->BaseURLs = NULL;
self->SubRepresentations = NULL;
self->SegmentBase = NULL;