summaryrefslogtreecommitdiff
path: root/libavformat/cafenc.c
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2014-05-26 19:06:23 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-05-26 20:28:07 +0200
commit2d56f0d05475d3f8abb1dd11b8a61873a444e286 (patch)
treeb2811860a64dc44b7182201b8dd698679388883c /libavformat/cafenc.c
parent2db89765f3fc5e1fdf12fc0158feef23db8ce2c1 (diff)
downloadffmpeg-2d56f0d05475d3f8abb1dd11b8a61873a444e286.tar.gz
Write the actual mp3 frame size when muxing into caf if available.
Fixes ticket #3648.
Diffstat (limited to 'libavformat/cafenc.c')
-rw-r--r--libavformat/cafenc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c
index 8926f0f2f7..3a732a3ba3 100644
--- a/libavformat/cafenc.c
+++ b/libavformat/cafenc.c
@@ -107,6 +107,7 @@ static int caf_write_header(AVFormatContext *s)
AVDictionaryEntry *t = NULL;
unsigned int codec_tag = ff_codec_get_tag(ff_codec_caf_tags, enc->codec_id);
int64_t chunk_size = 0;
+ int frame_size = enc->frame_size;
if (s->nb_streams != 1) {
av_log(s, AV_LOG_ERROR, "CAF files have exactly one stream\n");
@@ -144,6 +145,9 @@ static int caf_write_header(AVFormatContext *s)
return AVERROR_INVALIDDATA;
}
+ if (enc->codec_id != AV_CODEC_ID_MP3 || frame_size != 576)
+ frame_size = samples_per_packet(enc->codec_id, enc->channels);
+
ffio_wfourcc(pb, "caff"); //< mFileType
avio_wb16(pb, 1); //< mFileVersion
avio_wb16(pb, 0); //< mFileFlags
@@ -154,7 +158,7 @@ static int caf_write_header(AVFormatContext *s)
avio_wl32(pb, codec_tag); //< mFormatID
avio_wb32(pb, codec_flags(enc->codec_id)); //< mFormatFlags
avio_wb32(pb, enc->block_align); //< mBytesPerPacket
- avio_wb32(pb, samples_per_packet(enc->codec_id, enc->channels)); //< mFramesPerPacket
+ avio_wb32(pb, frame_size); //< mFramesPerPacket
avio_wb32(pb, enc->channels); //< mChannelsPerFrame
avio_wb32(pb, av_get_bits_per_sample(enc->codec_id)); //< mBitsPerChannel