3 * Copyright (C) 2019 Collabora Ltd.
4 * Author: Stéphane Cerveau <scerveau@collabora.com>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "gstmpdsegmenttemplatenode.h"
22 #include "gstmpdparser.h"
24 G_DEFINE_TYPE (GstMPDSegmentTemplateNode, gst_mpd_segment_template_node,
25 GST_TYPE_MPD_MULT_SEGMENT_BASE_NODE);
29 PROP_MPD_SEGMENT_TEMPLATE_0,
30 PROP_MPD_SEGMENT_TEMPLATE_MEDIA,
31 PROP_MPD_SEGMENT_TEMPLATE_INDEX,
32 PROP_MPD_SEGMENT_TEMPLATE_INITIALIZATION,
33 PROP_MPD_SEGMENT_TEMPLATE_BITSTREAM_SWITCHING,
36 /* GObject VMethods */
39 gst_mpd_segment_template_node_set_property (GObject * object, guint prop_id,
40 const GValue * value, GParamSpec * pspec)
42 GstMPDSegmentTemplateNode *self = GST_MPD_SEGMENT_TEMPLATE_NODE (object);
44 case PROP_MPD_SEGMENT_TEMPLATE_MEDIA:
45 self->media = g_value_dup_string (value);
47 case PROP_MPD_SEGMENT_TEMPLATE_INDEX:
48 self->index = g_value_dup_string (value);
50 case PROP_MPD_SEGMENT_TEMPLATE_INITIALIZATION:
51 self->initialization = g_value_dup_string (value);
53 case PROP_MPD_SEGMENT_TEMPLATE_BITSTREAM_SWITCHING:
54 self->bitstreamSwitching = g_value_dup_string (value);
57 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
63 gst_mpd_segment_template_node_get_property (GObject * object, guint prop_id,
64 GValue * value, GParamSpec * pspec)
66 GstMPDSegmentTemplateNode *self = GST_MPD_SEGMENT_TEMPLATE_NODE (object);
68 case PROP_MPD_SEGMENT_TEMPLATE_MEDIA:
69 g_value_set_string (value, self->media);
71 case PROP_MPD_SEGMENT_TEMPLATE_INDEX:
72 g_value_set_string (value, self->index);
74 case PROP_MPD_SEGMENT_TEMPLATE_INITIALIZATION:
75 g_value_set_string (value, self->initialization);
77 case PROP_MPD_SEGMENT_TEMPLATE_BITSTREAM_SWITCHING:
78 g_value_set_string (value, self->bitstreamSwitching);
81 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
87 gst_mpd_segment_template_node_finalize (GObject * object)
89 GstMPDSegmentTemplateNode *self = GST_MPD_SEGMENT_TEMPLATE_NODE (object);
92 xmlFree (self->media);
94 xmlFree (self->index);
95 if (self->initialization)
96 xmlFree (self->initialization);
97 if (self->bitstreamSwitching)
98 xmlFree (self->bitstreamSwitching);
100 G_OBJECT_CLASS (gst_mpd_segment_template_node_parent_class)->finalize
107 gst_mpd_segment_template_get_xml_node (GstMPDNode * node)
109 xmlNodePtr segment_template_xml_node = NULL;
110 GstMPDSegmentTemplateNode *self = GST_MPD_SEGMENT_TEMPLATE_NODE (node);
112 segment_template_xml_node = xmlNewNode (NULL, (xmlChar *) "SegmentTemplate");
115 gst_xml_helper_set_prop_string (segment_template_xml_node, "media",
119 gst_xml_helper_set_prop_string (segment_template_xml_node, "index",
122 if (self->initialization)
123 gst_xml_helper_set_prop_string (segment_template_xml_node, "initialization",
124 self->initialization);
126 if (self->bitstreamSwitching)
127 gst_xml_helper_set_prop_string (segment_template_xml_node,
128 "bitstreamSwitching", self->bitstreamSwitching);
130 return segment_template_xml_node;
134 gst_mpd_segment_template_node_class_init (GstMPDSegmentTemplateNodeClass *
137 GObjectClass *object_class;
138 GstMPDNodeClass *m_klass;
140 object_class = G_OBJECT_CLASS (klass);
141 m_klass = GST_MPD_NODE_CLASS (klass);
143 object_class->finalize = gst_mpd_segment_template_node_finalize;
144 object_class->set_property = gst_mpd_segment_template_node_set_property;
145 object_class->get_property = gst_mpd_segment_template_node_get_property;
147 m_klass->get_xml_node = gst_mpd_segment_template_get_xml_node;
149 g_object_class_install_property (object_class,
150 PROP_MPD_SEGMENT_TEMPLATE_MEDIA, g_param_spec_string ("media",
151 "media", "media", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
152 g_object_class_install_property (object_class,
153 PROP_MPD_SEGMENT_TEMPLATE_INDEX, g_param_spec_string ("index",
154 "index", "index", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
155 g_object_class_install_property (object_class,
156 PROP_MPD_SEGMENT_TEMPLATE_INITIALIZATION,
157 g_param_spec_string ("initialization", "initialization", "initialization",
158 NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
159 g_object_class_install_property (object_class,
160 PROP_MPD_SEGMENT_TEMPLATE_BITSTREAM_SWITCHING,
161 g_param_spec_string ("bitstream-switching", "bitstream switching",
162 "bitstream switching", NULL,
163 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
167 gst_mpd_segment_template_node_init (GstMPDSegmentTemplateNode * self)
171 self->initialization = NULL;
172 self->bitstreamSwitching = NULL;
175 GstMPDSegmentTemplateNode *
176 gst_mpd_segment_template_node_new (void)
178 return g_object_new (GST_TYPE_MPD_SEGMENT_TEMPLATE_NODE, NULL);
182 gst_mpd_segment_template_node_free (GstMPDSegmentTemplateNode * self)
185 gst_object_unref (self);