summaryrefslogtreecommitdiffstats
path: root/ext/metadata/gstmetadatamux.c
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sourceforge.net>2008-12-16 16:26:52 +0000
committerStefan Kost <ensonic@users.sourceforge.net>2008-12-16 16:26:52 +0000
commit1ea02b7a383f461d948eaeba82adb248e01e9127 (patch)
treec925ec2a1f159ee0df72fc77276a95dac5244c36 /ext/metadata/gstmetadatamux.c
parentda7ea42f920df07059e5eab0208fcaec535d187a (diff)
downloadgst-plugins-bad-1ea02b7a383f461d948eaeba82adb248e01e9127.tar.gz
gst-plugins-bad-1ea02b7a383f461d948eaeba82adb248e01e9127.tar.bz2
gst-plugins-bad-1ea02b7a383f461d948eaeba82adb248e01e9127.zip
Totally remove the internal taglists and fully use tagsetter. Fixes various tag muxing issues.
Original commit message from CVS: * ext/celt/gstceltenc.c: * ext/celt/gstceltenc.h: * ext/metadata/gstmetadatamux.c: * gst/qtmux/gstqtmux.c: * gst/qtmux/gstqtmux.h: Totally remove the internal taglists and fully use tagsetter. Fixes various tag muxing issues.
Diffstat (limited to 'ext/metadata/gstmetadatamux.c')
-rw-r--r--ext/metadata/gstmetadatamux.c47
1 files changed, 42 insertions, 5 deletions
diff --git a/ext/metadata/gstmetadatamux.c b/ext/metadata/gstmetadatamux.c
index d75c686d..657774d6 100644
--- a/ext/metadata/gstmetadatamux.c
+++ b/ext/metadata/gstmetadatamux.c
@@ -163,6 +163,10 @@ static void gst_metadata_mux_set_property (GObject * object, guint prop_id,
static void gst_metadata_mux_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
+static GstStateChangeReturn gst_metadata_mux_change_state (GstElement * element,
+ GstStateChange transition);
+
+
/*
* GstBaseMetadata virtual functions declaration
*/
@@ -274,6 +278,9 @@ gst_metadata_mux_class_init (GstMetadataMuxClass * klass)
gobject_class->set_property = gst_metadata_mux_set_property;
gobject_class->get_property = gst_metadata_mux_get_property;
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_metadata_mux_change_state);
+
gstbasemetadata_class->processing =
GST_DEBUG_FUNCPTR (gst_metadata_mux_create_chunks_from_tags);
gstbasemetadata_class->set_caps =
@@ -317,6 +324,39 @@ gst_metadata_mux_get_property (GObject * object, guint prop_id,
}
}
+static GstStateChangeReturn
+gst_metadata_mux_change_state (GstElement * element, GstStateChange transition)
+{
+ GstStateChangeReturn ret;
+ GstMetadataMux *filter = GST_METADATA_MUX (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_tag_setter_reset_tags (GST_TAG_SETTER (filter));
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
static void
@@ -351,7 +391,6 @@ gst_metadata_mux_finalize (GObject * object)
static void
gst_metadata_mux_create_chunks_from_tags (GstBaseMetadata * base)
{
-
GstMetadataMux *filter = GST_METADATA_MUX (base);
GstTagSetter *setter = GST_TAG_SETTER (filter);
const GstTagList *taglist = gst_tag_setter_get_tag_list (setter);
@@ -506,16 +545,14 @@ gst_metadata_mux_sink_event (GstPad * pad, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_TAG:
{
- GstTagList *taglist = NULL;
+ GstTagList *taglist;
GstTagSetter *setter = GST_TAG_SETTER (filter);
const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
gst_event_parse_tag (event, &taglist);
gst_tag_setter_merge_tags (setter, taglist, mode);
-
-
- }
break;
+ }
default:
break;
}