[FFmpeg-devel] [PATCH] set correct bytespersec value in wav/ima_adpcm header
ucsavl at gmail.com
ucsavl
Sun May 2 16:07:38 CEST 2010
I'm using ffmpeg to convert mp3s to wav + ima_idpcm so I could listen to
them on a mobile phone that doesn't support mp3.
The problem is the files always appear shorter than they are because of
the bogus bytespersec value in the header. When using sox instead of
ffmpeg they're OK, but sox is orders of magnitude slower than ffmpeg,
so it's of no use to me.
This patch sets the bytespersec value to
(packets per second) * (bytes per packet), where (packets per second)
is calculated from (samples per second) / (samples per packet).
For reference, according to libavcodec/avcodec.h:
enc->sample_rate samples per second
enc->frame_size samples per packet
enc->block_align, blkalign bytes per packet
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 340fd76..94b1ae2 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -370,6 +370,9 @@ int ff_put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
enc->codec_id == CODEC_ID_PCM_F64LE ||
enc->codec_id == CODEC_ID_PCM_S16LE) {
bytespersec = enc->sample_rate * blkalign;
+ } else if(enc->codec_id == CODEC_ID_ADPCM_IMA_WAV) {
+ bytespersec = (enc->sample_rate * blkalign + enc->frame_size / 2) /
+ enc->frame_size;
} else {
bytespersec = enc->bit_rate / 8;
}
More information about the ffmpeg-devel
mailing list