diff options
Diffstat (limited to 'ext/dash/gstmpdrepresentationnode.c')
-rw-r--r-- | ext/dash/gstmpdrepresentationnode.c | 62 |
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; |