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

Luca Barbato lu_zero
Fri Jan 28 16:06:51 CET 2011


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.

-- 

Luca Barbato
Gentoo/linux
http://dev.gentoo.org/~lu_zero




More information about the ffmpeg-devel mailing list