[FFmpeg-devel] [PATCH] Fix VP8 aliasing problems.

Ronald S. Bultje rsbultje
Fri Jan 28 16:20:25 CET 2011


Hi,

On Fri, Jan 28, 2011 at 10:06 AM, Luca Barbato <lu_zero at gentoo.org> wrote:
> On 01/28/2011 03:51 PM, Ronald S. Bultje wrote:
>> Replace * (uint32_t *) buf accesses with AV_WN32A/AV_COPY32.
>> ---
>> ?libavcodec/vp8.c | ? 12 ++++++------
>> ?1 files changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
>> index 3691f15..66a7c4d 100644
>> --- a/libavcodec/vp8.c
>> +++ b/libavcodec/vp8.c
>> @@ -1132,9 +1132,9 @@ void intra_predict(VP8Context *s, uint8_t *dst[3], VP8Macroblock *mb,
>> ? ? ? ? ? ? ? ? ? ? ? ? ?linesize = 8;
>> ? ? ? ? ? ? ? ? ? ? ? ? ?if (!(mb_y + y)) {
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?copy_dst[3] = 127U;
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ?* (uint32_t *) (copy_dst + 4) = 127U * 0x01010101U;
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?AV_WN32A(copy_dst+4, 127U * 0x01010101U);
>> ? ? ? ? ? ? ? ? ? ? ? ? ?} else {
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ?* (uint32_t *) (copy_dst + 4) = * (uint32_t *) (ptr+4*x-s->linesize);
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?AV_COPY32(copy_dst+4, ptr+4*x-s->linesize);
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (!(mb_x + x)) {
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?copy_dst[3] = 129U;
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?} else {
>> @@ -1158,10 +1158,10 @@ void intra_predict(VP8Context *s, uint8_t *dst[3], VP8Macroblock *mb,
>> ? ? ? ? ? ? ? ? ?}
>> ? ? ? ? ? ? ? ? ?s->hpc.pred4x4[mode](dst, topright, linesize);
>> ? ? ? ? ? ? ? ? ?if (copy) {
>> - ? ? ? ? ? ? ? ? ? ?* (uint32_t *) (ptr+4*x) ? ? ? ? ? ? ? = * (uint32_t *) (copy_dst + 12);
>> - ? ? ? ? ? ? ? ? ? ?* (uint32_t *) (ptr+4*x+s->linesize) ? = * (uint32_t *) (copy_dst + 20);
>> - ? ? ? ? ? ? ? ? ? ?* (uint32_t *) (ptr+4*x+s->linesize*2) = * (uint32_t *) (copy_dst + 28);
>> - ? ? ? ? ? ? ? ? ? ?* (uint32_t *) (ptr+4*x+s->linesize*3) = * (uint32_t *) (copy_dst + 36);
>> + ? ? ? ? ? ? ? ? ? ?AV_COPY32(ptr+4*x ? ? ? ? ? ? ?, copy_dst+12);
>> + ? ? ? ? ? ? ? ? ? ?AV_COPY32(ptr+4*x+s->linesize ?, copy_dst+20);
>> + ? ? ? ? ? ? ? ? ? ?AV_COPY32(ptr+4*x+s->linesize*2, copy_dst+28);
>> + ? ? ? ? ? ? ? ? ? ?AV_COPY32(ptr+4*x+s->linesize*3, copy_dst+36);
>> ? ? ? ? ? ? ? ? ?}
>>
>> ? ? ? ? ? ? ? ? ?nnz = s->non_zero_count_cache[y][x];
>
> Looks fine.

Applied.

Ronald



More information about the ffmpeg-devel mailing list