Browse code

Fix strict-aliasing violations in MPV_motion_internal.

Patch by Eli Friedman, eli D friedman A gmail

Originally committed as revision 23894 to svn://svn.ffmpeg.org/ffmpeg/trunk

Eli Friedman authored on 2010/06/30 10:47:42
Showing 1 changed files
... ...
@@ -670,19 +670,19 @@ static av_always_inline void MPV_motion_internal(MpegEncContext *s,
670 670
         }
671 671
 
672 672
         if(mb_x==0 || IS_INTRA(s->current_picture.mb_type[xy-1])){
673
-            *(int32_t*)mv_cache[1][0]= *(int32_t*)mv_cache[1][1];
674
-            *(int32_t*)mv_cache[2][0]= *(int32_t*)mv_cache[2][1];
673
+            AV_COPY32(mv_cache[1][0], mv_cache[1][1]);
674
+            AV_COPY32(mv_cache[2][0], mv_cache[2][1]);
675 675
         }else{
676
-            *(int32_t*)mv_cache[1][0]= *(int32_t*)s->current_picture.motion_val[0][mot_xy-1];
677
-            *(int32_t*)mv_cache[2][0]= *(int32_t*)s->current_picture.motion_val[0][mot_xy-1+mot_stride];
676
+            AV_COPY32(mv_cache[1][0], s->current_picture.motion_val[0][mot_xy-1]);
677
+            AV_COPY32(mv_cache[2][0], s->current_picture.motion_val[0][mot_xy-1+mot_stride]);
678 678
         }
679 679
 
680 680
         if(mb_x+1>=s->mb_width || IS_INTRA(s->current_picture.mb_type[xy+1])){
681
-            *(int32_t*)mv_cache[1][3]= *(int32_t*)mv_cache[1][2];
682
-            *(int32_t*)mv_cache[2][3]= *(int32_t*)mv_cache[2][2];
681
+            AV_COPY32(mv_cache[1][3], mv_cache[1][2]);
682
+            AV_COPY32(mv_cache[2][3], mv_cache[2][2]);
683 683
         }else{
684
-            *(int32_t*)mv_cache[1][3]= *(int32_t*)s->current_picture.motion_val[0][mot_xy+2];
685
-            *(int32_t*)mv_cache[2][3]= *(int32_t*)s->current_picture.motion_val[0][mot_xy+2+mot_stride];
684
+            AV_COPY32(mv_cache[1][3], s->current_picture.motion_val[0][mot_xy+2]);
685
+            AV_COPY32(mv_cache[2][3], s->current_picture.motion_val[0][mot_xy+2+mot_stride]);
686 686
         }
687 687
 
688 688
         mx = 0;