[FFmpeg-devel] [PATCH] ac3 parser incorrectly sets frame_size to samples*channel
Justin Ruggles
justin.ruggles
Fri Feb 20 22:59:03 CET 2009
elupus wrote:
> Hi,
>
> I noticed while playing a EAC3 file from an mpegts with only sporadic
> timestamps that the dts/pts output from libavformat would revert backwords
> every few samples.
>
> It seems get_audio_frame_size in utils.c uses AVCodecContext->frame_size to
> get the number of samples timewise in a packet (read no total per packet).
>
> However the ac3 parser sets frame_size to be AC3_FRAME_SIZE which includes
> all the 6 channels of samples.
>
> Setting the frame_size to 256 (ie 256 for each channel in the stream) fixes
> this stream's odd dts/pts output.
>
> The sample that would have shown this is HDDVD.DTSHD.DDPlus.ts which was
> uploaded to incoming a while back, but it seems justin didn't find that
> sample anymore. Maybe it was pruned or something.
>
> I seem to have ditched this sample aswell. But could probably cut up a new
> one from my rip.
Your assessment is incorrect, but it does need to be fixed. A normal AC3
frame is 6 blocks with 256 samples per block no matter how many channels
it has. An E-AC3 frame has 1, 2, 3, or 6 blocks. I suspect your
problematic E-AC3 sample has 1 block per frame. I will apply a
different fix shortly.
Thanks,
Justin
More information about the ffmpeg-devel
mailing list