[FFmpeg-devel] [PATCH] ac3_parser type punning fix
Måns Rullgård
mans
Mon Oct 20 00:07:00 CEST 2008
Michael Niedermayer <michaelni at gmx.at> writes:
> On Sun, Oct 19, 2008 at 12:26:31PM -0700, Baptiste Coudurier wrote:
>> Hi guys,
>>
>> Michael Niedermayer wrote:
>> > On Sun, Oct 19, 2008 at 05:23:52PM +0100, M?ns Rullg?rd wrote:
>> >> Michael Niedermayer <michaelni at gmx.at> writes:
> [...]
>> >> Looking at the code, I see one significant difference between
>> >> aac_sync() and ac3_sync(). Whereas aac_sync() only calls inlined
>> >> get_bits() functions (meaning gcc can know exactly what accesses are
>> >> happening), ac3_sync() calls another function to do the parsing. In
>> >> light of this, I agree it's unlikely that gcc is able to exploit any
>> >> aliasing tricks. The disassembly above also suggests that something
>> >> more sinister is afoot here.
>> >>
>> >> The change to aac_sync() fixed a real aliasing violation, and I
>> >> verified the assembler before and after the change. This seems to be
>> >> a bit different.
>> >
>>
>> FYI, Mans and I talked about this issue some time ago, and then I filled
>> a roundup issue regarding this (raw aac playback is broken)
>
> i cant find that issue, do you maybe know its number or a search term that
> works?
>
>>
>> Even at r15647 raw aac is still borken because the parser is still broken.
>
> i dont know about the parser but raw aac is broken because
> the aac decoder does
> if (avccontext->extradata_size <= 0 ||
> decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
> return -1;
>
> and nothing in raw.c nor in the parser sets extradata, nor is there a
> AVCodecParser.split() that would cause extradata to be set.
> Thats also why aac in mpeg-ts does not work ...
The decoder should get whatever it needs from the ADTS frame headers.
It looks like Rob only bothered to implemented the format used in
mp4-like containers.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list