[FFmpeg-devel] [PATCH/RFC] fix mp3 in wmv/wav for itunes and wmp
Baptiste Coudurier
baptiste.coudurier
Fri Oct 10 04:36:50 CEST 2008
Hi,
2 patches:
itunes_mp3_wav.patch, sets nBlockSize correctly according to specs:
http://msdn.microsoft.com/en-us/library/cc307970(VS.85).aspx
"nBlockSize
Block size in bytes. This value equals the frame length in bytes x
nFramesPerBlock. For MP3 audio, the frame length is calculated as
follows: 144 x (bitrate / sample rate) + padding."
This fixes mp3 in wav iTunes playback.
This seems to not take mpeg2 audio into account though which would have
a 576 samples frame (144 == 1152 / 8)
Set nCodecDelay to 0 instead of a weird value ? Quoting specs:
"nCodecDelay
Encoder delay in samples. If you do not know this value, set this
structure member to zero."
Hunk can be splitted if wanted.
wmv_mp3.patch, set blkalign to 1 for wmv, which fixes wmp playback, if
set to something else wmp chokes and says file is corrupted.
Quoting MPEG1WAVEFORMAT specs:
http://msdn.microsoft.com/en-us/library/ms787304(VS.85).aspx
"nBlockAlign
For audio streams with a fixed audio frame length, this field specifies
the length of the audio frame. If the frame length is variable, set this
field to 1.
If the sampling frequency is 32 kHz or 48 kHz and the bit rate is
constant, the audio frame size is constant. In that case, calculate
nBlockAlign as follows:
Layer 1: 4 * (int)(12 * bitrate / sampling frequency)
Layers 2 and 3: (int)(144 * bitrate / sampling frequency)
If the bit rate is variable or the sampling frequency is 44.1 kHz, the
audio frame size is not constant and nBlockAlign should be 1.
"
It seems term frame length is weirdly used in their specifications,
however I think it refers to frame byte size.
Based on this, it seems for .avi it really needs to be computed this way
otherwise wmp does not play video in sync.
I tested mp2,mp3 in wav,wmv,avi against wmp, vlc and ffplay.
mp2 in wmv does not play, saying codec is needed (???) while it plays
fine in .avi
Michael, you did change value to frame size in which situation ?
Because setting to frame size or calculate it this way (like in wma2
encoder btw) seems to make no difference.
It seems .mkv uses put_wav_header too and I don't know if behaviour is
.avi or .wmv one, I can't get mp3 in wav work in vlc, however it works
in itunes, ffplay, wmp.
I understand these modifications are delicate and I'd like comments and
suggestions.
--
Baptiste COUDURIER GnuPG Key Id: 0x5C1ABAAA
Smartjog USA Inc. http://www.smartjog.com
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: itunes_mp3_wav.patch
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081009/3ad9ef40/attachment.txt>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: wmv_mp3.patch
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081009/3ad9ef40/attachment.asc>
More information about the ffmpeg-devel
mailing list