[FFmpeg-devel] Indeo3 replacement, part 2

Maxim max_pole
Fri Oct 2 00:56:38 CEST 2009


M?ns Rullg?rd schrieb:
> 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.
>
>   

Thanks! All my pointers are always aligned at least on the int32_t
boundary. Should I rework my code to use casts all the way (remove all
AV_RNxx macros respectively)?

Regards
Maxim



More information about the ffmpeg-devel mailing list