summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-08-02 18:11:32 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-08-02 18:11:32 +0000
commitaedf04f957912a0747a2801d9ea597f6efe02e0d (patch)
tree18f3cf074b2df83130edb587299719042449da5b /gst
parentd43e67fa70d9eed64fd82a83589633e9afee4e90 (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.c31
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;