[Ffmpeg-devel] [PATCH] Machine endian bytestream functions
Ramiro Ribeiro Polla
ramiro
Mon Apr 23 21:22:25 CEST 2007
Ramiro Ribeiro Polla wrote:
> M?ns Rullg?rd wrote:
>>>> I'm thinking the unaligned16/32/64 macros from bitstream.h should be
>>>> renamed and moved here instead.
>>>>
>>>>
>>> I'll take a look.
>>>
>>
>> This lets the compiler choose whatever access method is appropriate,
>> and saves us the trouble of maintaining a fragile list.
[...]
> This seems like the best alternative.
>
> There are 2 macros/functions that do the same thing. LD, defined in
> intreadwrite.h, and unaligned, defined in bitstream.h
>
> LD(16|32|64) are used in libavcodec/dsputil.[hc], libavcodec/sh4/qpel.c
> unaligned(16|32|64) are used in libavcodec/mpegvideo.c,
> libavcodec/cavs.c, libavformat/oggparsevorbis.c and
> libavformat/oggparseogm.c
> all uses of unaligned are the same as AV_R[LB], except in cavs.c. I'll
> probably send a patch for this.
> ST(16|32|64) are used in libavcodec/dsputil.h
>
> bitstream.h:
> UNALIGNED_STORES_ARE_BAD is defined for some arches, but I think it
> isn't necessary.
> unaligned reads are made with packed structs in compilers that allow
> it, or else it just reads normally.
> the ARCH_X86 #ifdef isn't necessary, since gcc seems to know that x86
> accepts unaligned reads.
>
> intreadwrite.h makes unaligned reads with packed structs with GNUC
> only, and also reads normally on other compilers.
> intreadwrite.h implements the packed structs aesthetically better.
>
> I think it would be best to fallback to reading bytes one at a time
> (like intreadwrite.h does) instead of using a normal read.
>
> Before I start fiddling with this again, where is the preferred
> location and name for these functions?
> I'd prefer unaligned in intreadwrite.h, and change all LD to unaligned.
It seems like either 1. this is not important or 2. someone else is
working on it.
Either way I won't bother working on it again.
Ramiro Polla
More information about the ffmpeg-devel
mailing list