[FFmpeg-devel] [PATCH 4/7] Use alias-safe types in AV_[RW] macros

Måns Rullgård mans
Thu Feb 18 17:16:17 CET 2010

Michael Niedermayer <michaelni at gmx.at> writes:

> On Fri, Jan 29, 2010 at 03:43:08AM +0000, M?ns Rullg?rd wrote:
>> Michael Niedermayer <michaelni at gmx.at> writes:
>> > On Fri, Jan 29, 2010 at 02:12:11AM +0000, Mans Rullgard wrote:
>> >> ---
>> >>  libavutil/intreadwrite.h |   14 +++++++-------
>> >>  1 files changed, 7 insertions(+), 7 deletions(-)
>> >
>> > id like to see some benchmark done with the latest gcc release
>> > and h264/h263/aac decoding as well as mpeg4 encoding on x86_64 (codecs
>> > randomly picked based more on what is used alot than what uses alot of funny
>> > accesses)
> ping

Decoding time (i7, gcc-4.4.3) with new macros divided by time w/o
(lower is better), best of five runs:

cathedral.mp4                         0.97    h264
indiana_jones_4-tlr3_h640w.mov        0.97
NeroAVC.mp4                           0.95
IronMan.mkv                           0.94
NeroRecodeSample.mp4                  0.99    mpeg4
broken-ntsc.mpg                       0.99    mpeg2
yeah.mpg                              1.00
Lumme-Badloop.ogg                     0.94    vorbis
When_I_Grow_Up.flac                   1.02
Silent_Light.mp3                      1.00
Canyon-5.1-48khz-448kbit.ac3          1.00
lotr_5.1_768.dts                      1.00
red_red_wine.aac                      0.99
walk_like_an_egyptian.wma             1.01

The audio files are decode so quickly that it's hard to get good
numbers.  Run-to-run variations are greater than any difference
between the two builds.

I don't have ready scripts for mpeg4 encoding.

>> > if nothing gets slower then iam not against this otherwise i think
>> > more investigation is needed
>> >
>> > Also how does this stuff interact with restrict ?
>> > Which overrides the other? can we still use restrict to make sure the
>> > gcc is aware that aliasing does not happen?
>> This is the opposite of restrict.  Qualifying a pointer with restrict
>> informs the compiler that aliasing will *never* happen even with the
>> normal type rules would allow it.  This is to be used in cases where
> i know that, my question was if restrict overrides av_alias or av_alias
> restrict?

Using both on the same pointer seems rather weird, and I don't know
what happens in that case.  If used on different pointers, I guess the
av_alias one is assumed to aliasing something while the restrict one
is not.  Nothing really ambiguous there.  Writing to memory addressed
by a restrict-pointer through another pointer is probably a bad idea.

>> we *intentionally* violate the basic aliasing rules.  This is causing
>> actual errors with some compilers on some targets.
> we do violate them and i dont doubt that some compilers generate non
> functional code. It does not mean though these 2 are related.

Sorry, I don't follow.

> also the C standard defines a solution via unions, i do not understand
> why may_alias is needed. You can just have an union of a packed struct
> and a second type to indicate posible aliasing between them i think.
> (this requires fewer non standard attributes)

According to Jason, gcc seemed to require those attributes in some
cases even with the unions.  Ask him for details.

M?ns Rullg?rd
mans at mansr.com

More information about the ffmpeg-devel mailing list