[FFmpeg-devel] Indeo3 replacement, part 2
Måns Rullgård
mans
Fri Oct 2 00:42:56 CEST 2009
Maxim <max_pole at gmx.de> writes:
> Reimar D?ffinger schrieb:
>> On Tue, Sep 22, 2009 at 12:09:23AM +0200, Maxim wrote:
>>
>> [...]
>>> /**
>>> * Average 4/8 pixels at once without rounding using softSIMD
>>> */
>>> #define AVG_32(dst, src, ref) AV_WN32((dst), ((AV_RN32(src) + AV_RN32(ref)) >> 1) & 0x7F7F7F7F)
>>> #define AVG_64(dst, src, ref) AV_WN64((dst), ((AV_RN64(src) + AV_RN64(ref)) >> 1) & 0x7F7F7F7F7F7F7F7F)
>>>
>>
>> Are all of src, dst, ref unaligned in general? If not, you should be
>> using casts instead of AV_RN*
>>
>
> Could someone skilled in the art explain me the difference between a
> cast and an AV_RNxx?
> I don't see any because the AV_RNxx macros use casts as well...
AV_RN* support unaligned reads, simple casts do not.
> The code above looks more readable for me when using those macros than
> smth like this:
>
> #define AVG_64(dst, src, ref) \
> *((uint64_t *)(dst)) = ((*((uint64_t *)(src)) + *((uint64_t
> *)(ref))) >> 1) & 0x7F7F7F7F7F7F7F7F
That will not work if any of the pointers are unaligned.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list