diff options
author | Stefan Kost <ensonic@users.sourceforge.net> | 2008-12-16 16:26:52 +0000 |
---|---|---|
committer | Stefan Kost <ensonic@users.sourceforge.net> | 2008-12-16 16:26:52 +0000 |
commit | 1ea02b7a383f461d948eaeba82adb248e01e9127 (patch) | |
tree | c925ec2a1f159ee0df72fc77276a95dac5244c36 /ext/metadata | |
parent | da7ea42f920df07059e5eab0208fcaec535d187a (diff) | |
download | gst-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')
-rw-r--r-- | ext/metadata/gstmetadatamux.c | 47 |
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; } |