diff options
Diffstat (limited to 'ext/dash/gstmpdrepresentationbasenode.c')
-rw-r--r-- | ext/dash/gstmpdrepresentationbasenode.c | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/ext/dash/gstmpdrepresentationbasenode.c b/ext/dash/gstmpdrepresentationbasenode.c new file mode 100644 index 000000000..29e43d311 --- /dev/null +++ b/ext/dash/gstmpdrepresentationbasenode.c @@ -0,0 +1,165 @@ +/* GStreamer + * + * Copyright (C) 2019 Collabora Ltd. + * Author: Stéphane Cerveau <scerveau@collabora.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ +#include "gstmpdrepresentationbasenode.h" +#include "gstmpdparser.h" + +G_DEFINE_TYPE (GstMPDRepresentationBaseNode, gst_mpd_representation_base_node, + GST_TYPE_MPD_NODE); + +/* GObject VMethods */ + +static void +gst_mpd_representation_base_node_finalize (GObject * object) +{ + GstMPDRepresentationBaseNode *self = + GST_MPD_REPRESENTATION_BASE_NODE (object); + + if (self->profiles) + xmlFree (self->profiles); + g_slice_free (GstXMLRatio, self->sar); + g_slice_free (GstXMLFrameRate, self->frameRate); + g_slice_free (GstXMLFrameRate, self->minFrameRate); + g_slice_free (GstXMLFrameRate, self->maxFrameRate); + if (self->audioSamplingRate) + xmlFree (self->audioSamplingRate); + if (self->mimeType) + xmlFree (self->mimeType); + if (self->segmentProfiles) + xmlFree (self->segmentProfiles); + if (self->codecs) + xmlFree (self->codecs); + if (self->scanType) + xmlFree (self->scanType); + g_list_free_full (self->FramePacking, + (GDestroyNotify) gst_mpd_descriptor_type_node_free); + g_list_free_full (self->AudioChannelConfiguration, + (GDestroyNotify) gst_mpd_descriptor_type_node_free); + g_list_free_full (self->ContentProtection, + (GDestroyNotify) gst_mpd_descriptor_type_node_free); + + G_OBJECT_CLASS (gst_mpd_representation_base_node_parent_class)->finalize + (object); +} + +/* Base class */ + +static void +gst_mpd_representation_base_get_xml_node (GstMPDNode * node, + xmlNodePtr representation_base_node) +{ + GstMPDRepresentationBaseNode *self = GST_MPD_REPRESENTATION_BASE_NODE (node); + + if (self->profiles) + gst_xml_helper_set_prop_string (representation_base_node, "profiles", + self->profiles); + if (self->width) + gst_xml_helper_set_prop_uint (representation_base_node, "width", + self->width); + if (self->height) + gst_xml_helper_set_prop_uint (representation_base_node, "height", + self->height); + + gst_xml_helper_set_prop_ratio (representation_base_node, "sar", self->sar); + gst_xml_helper_set_prop_framerate (representation_base_node, "minFrameRate", + self->minFrameRate); + gst_xml_helper_set_prop_framerate (representation_base_node, "maxFrameRate", + self->maxFrameRate); + gst_xml_helper_set_prop_framerate (representation_base_node, "frameRate", + self->frameRate); + + gst_xml_helper_set_prop_string (representation_base_node, + "audioSamplingRate", self->audioSamplingRate); + gst_xml_helper_set_prop_string (representation_base_node, "mimeType", + self->mimeType); + gst_xml_helper_set_prop_string (representation_base_node, "segmentProfiles", + self->segmentProfiles); + gst_xml_helper_set_prop_string (representation_base_node, "codecs", + self->codecs); + if (self->maximumSAPPeriod) + gst_xml_helper_set_prop_double (representation_base_node, + "maximumSAPPeriod", self->maximumSAPPeriod); + if (self->startWithSAP) + gst_xml_helper_set_prop_int (representation_base_node, "startWithSAP", + self->startWithSAP); + if (self->maxPlayoutRate) + gst_xml_helper_set_prop_double (representation_base_node, "maxPlayoutRate", + self->maxPlayoutRate); + if (self->codingDependency) + gst_xml_helper_set_prop_boolean (representation_base_node, + "codingDependency", self->codingDependency); + + gst_xml_helper_set_prop_string (representation_base_node, "scanType", + self->scanType); + + g_list_foreach (self->FramePacking, + gst_mpd_node_get_list_item, representation_base_node); + g_list_foreach (self->AudioChannelConfiguration, + gst_mpd_node_get_list_item, representation_base_node); + g_list_foreach (self->ContentProtection, + gst_mpd_node_get_list_item, representation_base_node); +} + +static void +gst_mpd_representation_base_node_class_init (GstMPDRepresentationBaseNodeClass * + klass) +{ + GObjectClass *object_class; + + object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = gst_mpd_representation_base_node_finalize; +} + +static void +gst_mpd_representation_base_node_init (GstMPDRepresentationBaseNode * self) +{ + self->profiles = NULL; + self->width = 0; + self->height = 0; + self->sar = NULL; + self->minFrameRate = NULL; + self->maxFrameRate = NULL; + self->frameRate = NULL; + self->audioSamplingRate = NULL; + self->mimeType = NULL; + self->segmentProfiles = NULL; + self->codecs = NULL; + self->maximumSAPPeriod = 0; + self->startWithSAP = GST_SAP_TYPE_0; + self->maxPlayoutRate = 0.0; + self->codingDependency = FALSE; + self->scanType = NULL; + self->FramePacking = NULL; + self->AudioChannelConfiguration = NULL; + self->ContentProtection = NULL; +} + +void +gst_mpd_representation_base_node_get_list_item (gpointer data, + gpointer user_data) +{ + GstMPDNode *node = (GstMPDNode *) data; + xmlNodePtr parent_xml_node = (xmlNodePtr) user_data; + xmlNodePtr new_xml_node = gst_mpd_node_get_xml_pointer (node); + + gst_mpd_representation_base_get_xml_node (node, new_xml_node); + xmlAddChild (parent_xml_node, new_xml_node); +} |