mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 15:51:11 +00:00
Fix tag merging. Use tagsetter and not internal copies. Depend on
Original commit message from CVS: * configure.ac: * ext/ffmpeg/gstffmpegmux.c: Fix tag merging. Use tagsetter and not internal copies. Depend on CVS core and use new API to flush.
This commit is contained in:
parent
923580b14f
commit
c5102d2045
4 changed files with 17 additions and 22 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2008-12-16 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
|
* configure.ac:
|
||||||
|
* ext/ffmpeg/gstffmpegmux.c:
|
||||||
|
Fix tag merging. Use tagsetter and not internal copies. Depend on
|
||||||
|
CVS core and use new API to flush.
|
||||||
|
|
||||||
2008-12-13 Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
2008-12-13 Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
||||||
|
|
||||||
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ff_channel_layout_to_gst):
|
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ff_channel_layout_to_gst):
|
||||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
||||||
Subproject commit 1c24dce4e32f0a725ebd1b8ba2cd48d373818f75
|
Subproject commit 2c4d28a75c26e572b94a967901254caff83d85c4
|
|
@ -40,7 +40,7 @@ AC_LIBTOOL_WIN32_DLL
|
||||||
AM_PROG_LIBTOOL
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
dnl *** required versions of GStreamer stuff ***
|
dnl *** required versions of GStreamer stuff ***
|
||||||
GST_REQ=0.10.13
|
GST_REQ=0.10.21
|
||||||
LIBOIL_MAJORMINOR=0.3
|
LIBOIL_MAJORMINOR=0.3
|
||||||
LIBOIL_REQ=0.3.6
|
LIBOIL_REQ=0.3.6
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,6 @@ struct _GstFFMpegMux
|
||||||
AVFormatContext *context;
|
AVFormatContext *context;
|
||||||
gboolean opened;
|
gboolean opened;
|
||||||
|
|
||||||
GstTagList *tags;
|
|
||||||
|
|
||||||
gint videopads, audiopads;
|
gint videopads, audiopads;
|
||||||
|
|
||||||
/*< private > */
|
/*< private > */
|
||||||
|
@ -213,8 +211,6 @@ gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux, GstFFMpegMuxClass * g_class)
|
||||||
|
|
||||||
ffmpegmux->videopads = 0;
|
ffmpegmux->videopads = 0;
|
||||||
ffmpegmux->audiopads = 0;
|
ffmpegmux->audiopads = 0;
|
||||||
|
|
||||||
ffmpegmux->tags = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -343,12 +339,12 @@ gst_ffmpegmux_sink_event (GstPad * pad, GstEvent * event)
|
||||||
|
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_TAG:{
|
case GST_EVENT_TAG:{
|
||||||
GstTagList *taglist = NULL;
|
GstTagList *taglist;
|
||||||
|
GstTagSetter *setter = GST_TAG_SETTER (ffmpegmux);
|
||||||
|
const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
|
||||||
|
|
||||||
gst_event_parse_tag (event, &taglist);
|
gst_event_parse_tag (event, &taglist);
|
||||||
ffmpegmux->tags = gst_tag_list_merge (ffmpegmux->tags, taglist,
|
gst_tag_setter_merge_tags (setter, taglist, mode);
|
||||||
GST_TAG_MERGE_PREPEND);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -369,7 +365,7 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
GSList *collected;
|
GSList *collected;
|
||||||
GstFFMpegMuxPad *best_pad;
|
GstFFMpegMuxPad *best_pad;
|
||||||
GstClockTime best_time;
|
GstClockTime best_time;
|
||||||
const GstTagList *iface_tags;
|
const GstTagList *tags;
|
||||||
|
|
||||||
/* open "file" (gstreamer protocol to next element) */
|
/* open "file" (gstreamer protocol to next element) */
|
||||||
if (!ffmpegmux->opened) {
|
if (!ffmpegmux->opened) {
|
||||||
|
@ -421,15 +417,11 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tags */
|
/* tags */
|
||||||
iface_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (ffmpegmux));
|
tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (ffmpegmux));
|
||||||
if (ffmpegmux->tags || iface_tags) {
|
if (tags) {
|
||||||
GstTagList *tags;
|
|
||||||
gint i;
|
gint i;
|
||||||
gchar *s;
|
gchar *s;
|
||||||
|
|
||||||
tags = gst_tag_list_merge (iface_tags, ffmpegmux->tags,
|
|
||||||
GST_TAG_MERGE_APPEND);
|
|
||||||
|
|
||||||
/* get the interesting ones */
|
/* get the interesting ones */
|
||||||
if (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)) {
|
if (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)) {
|
||||||
strncpy (ffmpegmux->context->title, s,
|
strncpy (ffmpegmux->context->title, s,
|
||||||
|
@ -458,7 +450,6 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
if (gst_tag_list_get_int (tags, GST_TAG_TRACK_NUMBER, &i)) {
|
if (gst_tag_list_get_int (tags, GST_TAG_TRACK_NUMBER, &i)) {
|
||||||
ffmpegmux->context->track = i;
|
ffmpegmux->context->track = i;
|
||||||
}
|
}
|
||||||
gst_tag_list_free (tags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the streamheader flag for gstffmpegprotocol if codec supports it */
|
/* set the streamheader flag for gstffmpegprotocol if codec supports it */
|
||||||
|
@ -626,10 +617,7 @@ gst_ffmpegmux_change_state (GstElement * element, GstStateChange transition)
|
||||||
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
if (ffmpegmux->tags) {
|
gst_tag_setter_flush (GST_TAG_SETTER (ffmpegmux));
|
||||||
gst_tag_list_free (ffmpegmux->tags);
|
|
||||||
ffmpegmux->tags = NULL;
|
|
||||||
}
|
|
||||||
if (ffmpegmux->opened) {
|
if (ffmpegmux->opened) {
|
||||||
ffmpegmux->opened = FALSE;
|
ffmpegmux->opened = FALSE;
|
||||||
url_fclose (ffmpegmux->context->pb);
|
url_fclose (ffmpegmux->context->pb);
|
||||||
|
|
Loading…
Reference in a new issue