]> granicus.if.org Git - libvpx/commitdiff
ARNR filter pointer update bug fix
authorAdrian Grange <agrange@google.com>
Fri, 14 Jan 2011 15:04:39 +0000 (15:04 +0000)
committerAdrian Grange <agrange@google.com>
Fri, 14 Jan 2011 15:04:39 +0000 (15:04 +0000)
In cases where the frame width is not a multiple of 16 the
ARNR filter would go wrong.

In vp8_temporal_filter_iterate_c when updating pointers
at the end of a row of MBs,  the image size was
incorrectly used rather than using Num_MBs_In_Row
times 16 (Y) or 8 (U,V).

This worked when width is multiple of 16 but failed
otherwise.

Change-Id: I008919062715bd3d17c7aa2562ab58d1cb37053a

vp8/encoder/temporal_filter.c

index 396e3390df3c3f5fe23335b8d5ad7951f4a7b916..f28daaff98837afab3888442d9c7148c6b7c9243 100644 (file)
@@ -290,8 +290,8 @@ static void vp8_temporal_filter_iterate_c
     int mb_col, mb_row;
     unsigned int filter_weight[MAX_LAG_BUFFERS];
     unsigned char *mm_ptr = cpi->fp_motion_map;
-    int cols = cpi->common.mb_cols;
-    int rows = cpi->common.mb_rows;
+    int mb_cols = cpi->common.mb_cols;
+    int mb_rows = cpi->common.mb_rows;
     int MBs  = cpi->common.MBs;
     int mb_y_offset = 0;
     int mb_uv_offset = 0;
@@ -314,7 +314,7 @@ static void vp8_temporal_filter_iterate_c
             filter_weight[frame] = 1;
     }
 
-    for (mb_row = 0; mb_row < rows; mb_row++)
+    for (mb_row = 0; mb_row < mb_rows; mb_row++)
     {
 #if ALT_REF_MC_ENABLED
         // Reduced search extent by 3 for 6-tap filter & smaller UMV border
@@ -323,7 +323,7 @@ static void vp8_temporal_filter_iterate_c
                                 + (VP8BORDERINPIXELS - 19);
 #endif
 
-        for (mb_col = 0; mb_col < cols; mb_col++)
+        for (mb_col = 0; mb_col < mb_cols; mb_col++)
         {
             int i, j, k, w;
             int weight_cap;
@@ -497,8 +497,8 @@ static void vp8_temporal_filter_iterate_c
             mb_uv_offset += 8;
         }
 
-        mb_y_offset += 16*f->y_stride-f->y_width;
-        mb_uv_offset += 8*f->uv_stride-f->uv_width;
+        mb_y_offset += 16*(f->y_stride-mb_cols);
+        mb_uv_offset += 8*(f->uv_stride-mb_cols);
     }
 
     // Restore input state