diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-08-02 18:11:32 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2008-08-02 18:11:32 +0000 |
commit | aedf04f957912a0747a2801d9ea597f6efe02e0d (patch) | |
tree | 18f3cf074b2df83130edb587299719042449da5b /gst | |
parent | d43e67fa70d9eed64fd82a83589633e9afee4e90 (diff) |
gst/matroska/matroska-mux.c: Fix muxing of MP3/MP2 with different MPEG versions by calculating the duration of a fram...
Original commit message from CVS:
* 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.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/matroska/matroska-mux.c | 31 |
1 files changed, 21 insertions, 10 deletions
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; |