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/quicktime/gstqtmux.c:
* gst/quicktime/gstqtmux.h:
Totally remove the internal taglists and fully use tagsetter. Fixes
various tag muxing issues.
This commit is contained in:
Stefan Kost 2008-12-16 16:26:52 +00:00 committed by Tim-Philipp Müller
parent 877f7fb3ab
commit 6a47f1f4b5
2 changed files with 16 additions and 35 deletions

View file

@ -239,14 +239,11 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc)
atom_moov_free (qtmux->moov); atom_moov_free (qtmux->moov);
qtmux->moov = NULL; qtmux->moov = NULL;
} }
if (qtmux->tags) {
gst_tag_list_free (qtmux->tags);
qtmux->tags = NULL;
}
if (qtmux->fast_start_file) { if (qtmux->fast_start_file) {
fclose (qtmux->fast_start_file); fclose (qtmux->fast_start_file);
qtmux->fast_start_file = NULL; qtmux->fast_start_file = NULL;
} }
gst_tag_setter_reset_tags (GST_TAG_SETTER (qtmux));
/* reset pad data */ /* reset pad data */
for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) { for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) {
@ -514,32 +511,18 @@ gst_qt_mux_add_metadata_tags (GstQTMux * qtmux, const GstTagList * list)
static void static void
gst_qt_mux_setup_metadata (GstQTMux * qtmux) gst_qt_mux_setup_metadata (GstQTMux * qtmux)
{ {
const GstTagList *user_tags; const GstTagList *tags;
GstTagList *mixedtags = NULL;
GstTagMergeMode merge_mode;
user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux)); tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux));
merge_mode = gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (qtmux));
GST_DEBUG_OBJECT (qtmux, "merging tags, merge mode = %d", merge_mode); GST_LOG_OBJECT (qtmux, "tags: %" GST_PTR_FORMAT, tags);
GST_LOG_OBJECT (qtmux, "event tags: %" GST_PTR_FORMAT, qtmux->tags);
GST_LOG_OBJECT (qtmux, "set tags: %" GST_PTR_FORMAT, user_tags);
mixedtags = gst_tag_list_merge (user_tags, qtmux->tags, merge_mode); if (tags && !gst_tag_list_is_empty (tags)) {
GST_DEBUG_OBJECT (qtmux, "Formatting tags");
GST_LOG_OBJECT (qtmux, "final tags: %" GST_PTR_FORMAT, mixedtags); gst_qt_mux_add_metadata_tags (qtmux, tags);
if (mixedtags && !gst_tag_list_is_empty (mixedtags)) {
GST_DEBUG_OBJECT (qtmux, "Parsing tags");
gst_qt_mux_add_metadata_tags (qtmux, mixedtags);
} else { } else {
GST_DEBUG_OBJECT (qtmux, "No tags found"); GST_DEBUG_OBJECT (qtmux, "No tags received");
} }
if (mixedtags)
gst_tag_list_free (mixedtags);
return;
} }
static GstFlowReturn static GstFlowReturn
@ -1585,20 +1568,19 @@ gst_qt_mux_sink_event (GstPad * pad, GstEvent * event)
{ {
gboolean ret; gboolean ret;
GstQTMux *qtmux; GstQTMux *qtmux;
GstTagList *list;
qtmux = GST_QT_MUX_CAST (gst_pad_get_parent (pad)); qtmux = GST_QT_MUX_CAST (gst_pad_get_parent (pad));
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_TAG: case GST_EVENT_TAG:{
GstTagList *list;
GstTagSetter *setter = GST_TAG_SETTER (qtmux);
const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
GST_DEBUG_OBJECT (qtmux, "received tag event"); GST_DEBUG_OBJECT (qtmux, "received tag event");
gst_event_parse_tag (event, &list); gst_event_parse_tag (event, &list);
gst_tag_setter_merge_tags (setter, list, mode);
if (qtmux->tags) {
gst_tag_list_insert (qtmux->tags, list, GST_TAG_MERGE_PREPEND);
} else {
qtmux->tags = gst_tag_list_copy (list);
}
break; break;
}
default: default:
break; break;
} }
@ -1774,6 +1756,7 @@ gst_qt_mux_change_state (GstElement * element, GstStateChange transition)
break; break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING: case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break; break;
/* FIXME: shouldn't the downwards state-change be done below? */
case GST_STATE_CHANGE_PAUSED_TO_READY: case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_collect_pads_stop (qtmux->collect); gst_collect_pads_stop (qtmux->collect);
break; break;

View file

@ -97,8 +97,6 @@ struct _GstQTMux
/* fast start */ /* fast start */
FILE *fast_start_file; FILE *fast_start_file;
GstTagList *tags;
/* properties */ /* properties */
guint32 timescale; guint32 timescale;
AtomsTreeFlavor flavor; AtomsTreeFlavor flavor;