diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gst/matroska/matroska-mux.c | 31 |
2 files changed, 28 insertions, 10 deletions
@@ -1,5 +1,12 @@ 2008-08-02 Sebastian Dröge <sebastian.droege@collabora.co.uk> + * gst/matroska/matroska-mux.c: + (gst_matroska_mux_audio_pad_setcaps): + Fix muxing of MP3/MP2 with different MPEG versions by calculating the + duration of a frame with the new mpegaudioversion caps field. + +2008-08-02 Sebastian Dröge <sebastian.droege@collabora.co.uk> + * gst/matroska/matroska-demux.c: (gst_matroska_demux_finalize), (gst_matroska_demux_class_init), (gst_matroska_demux_init), (gst_matroska_demux_combine_flows), (gst_matroska_demux_reset), diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c index c4899d39..c2a73453 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -978,27 +978,38 @@ gst_matroska_mux_audio_pad_setcaps (GstPad * pad, GstCaps * caps) switch (mpegversion) { case 1:{ gint layer; - - /* FIXME: number of samples per frame also depends on the mpegversion - * which we don't pass as a caps field - */ + gint version = 1; + gint spf; gst_structure_get_int (structure, "layer", &layer); + + if (!gst_structure_get_int (structure, "mpegaudioversion", &version)) { + GST_WARNING_OBJECT (mux, + "Unable to determine MPEG audio version, assuming 1"); + version = 1; + } + + if (layer == 1) + spf = 384; + else if (layer == 2) + spf = 1152; + else if (version == 2) + spf = 576; + else + spf = 1152; + + context->default_duration = + gst_util_uint64_scale (GST_SECOND, spf, audiocontext->samplerate); + switch (layer) { case 1: context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L1); - context->default_duration = - 384 * GST_SECOND / audiocontext->samplerate; break; case 2: context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L2); - context->default_duration = - 1152 * GST_SECOND / audiocontext->samplerate; break; case 3: context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L3); - context->default_duration = - 1152 * GST_SECOND / audiocontext->samplerate; break; default: return FALSE; |