Index: source/libvpx/vp9/common/vp9_blockd.c |
diff --git a/source/libvpx/vp9/common/vp9_blockd.c b/source/libvpx/vp9/common/vp9_blockd.c |
index 7094a0118c02fb7435add29b600bfa5688674846..3cd9f44e914b4338afc54cb1bb63d41d145c1878 100644 |
--- a/source/libvpx/vp9/common/vp9_blockd.c |
+++ b/source/libvpx/vp9/common/vp9_blockd.c |
@@ -50,39 +50,25 @@ void vp9_foreach_transformed_block_in_plane( |
const int num_4x4_w = num_4x4_blocks_wide_lookup[plane_bsize]; |
const int num_4x4_h = num_4x4_blocks_high_lookup[plane_bsize]; |
const int step = 1 << (tx_size << 1); |
- int i; |
+ int i = 0, r, c; |
// If mb_to_right_edge is < 0 we are in a situation in which |
// the current block size extends into the UMV and we won't |
// visit the sub blocks that are wholly within the UMV. |
- if (xd->mb_to_right_edge < 0 || xd->mb_to_bottom_edge < 0) { |
- int r, c; |
- |
- int max_blocks_wide = num_4x4_w; |
- int max_blocks_high = num_4x4_h; |
- |
- // xd->mb_to_right_edge is in units of pixels * 8. This converts |
- // it to 4x4 block sizes. |
- if (xd->mb_to_right_edge < 0) |
- max_blocks_wide += (xd->mb_to_right_edge >> (5 + pd->subsampling_x)); |
- |
- if (xd->mb_to_bottom_edge < 0) |
- max_blocks_high += (xd->mb_to_bottom_edge >> (5 + pd->subsampling_y)); |
- |
- i = 0; |
- // Unlike the normal case - in here we have to keep track of the |
- // row and column of the blocks we use so that we know if we are in |
- // the unrestricted motion border. |
- for (r = 0; r < num_4x4_h; r += (1 << tx_size)) { |
- for (c = 0; c < num_4x4_w; c += (1 << tx_size)) { |
- if (r < max_blocks_high && c < max_blocks_wide) |
- visit(plane, i, plane_bsize, tx_size, arg); |
- i += step; |
- } |
+ const int max_blocks_wide = num_4x4_w + (xd->mb_to_right_edge >= 0 ? 0 : |
+ xd->mb_to_right_edge >> (5 + pd->subsampling_x)); |
+ const int max_blocks_high = num_4x4_h + (xd->mb_to_bottom_edge >= 0 ? 0 : |
+ xd->mb_to_bottom_edge >> (5 + pd->subsampling_y)); |
+ |
+ // Keep track of the row and column of the blocks we use so that we know |
+ // if we are in the unrestricted motion border. |
+ for (r = 0; r < max_blocks_high; r += (1 << tx_size)) { |
+ for (c = 0; c < num_4x4_w; c += (1 << tx_size)) { |
+ // Skip visiting the sub blocks that are wholly within the UMV. |
+ if (c < max_blocks_wide) |
+ visit(plane, i, plane_bsize, tx_size, arg); |
+ i += step; |
} |
- } else { |
- for (i = 0; i < num_4x4_w * num_4x4_h; i += step) |
- visit(plane, i, plane_bsize, tx_size, arg); |
} |
} |