| Index: source/libvpx/vp9/common/vp9_loopfilter.c
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_loopfilter.c (revision 282873)
|
| +++ source/libvpx/vp9/common/vp9_loopfilter.c (working copy)
|
| @@ -16,7 +16,7 @@
|
|
|
| #include "vp9/common/vp9_seg_common.h"
|
|
|
| -// 64 bit masks for left transform size. Each 1 represents a position where
|
| +// 64 bit masks for left transform size. Each 1 represents a position where
|
| // we should apply a loop filter across the left border of an 8x8 block
|
| // boundary.
|
| //
|
| @@ -34,13 +34,13 @@
|
| //
|
| // A loopfilter should be applied to every other 8x8 horizontally.
|
| static const uint64_t left_64x64_txform_mask[TX_SIZES]= {
|
| - 0xffffffffffffffff, // TX_4X4
|
| - 0xffffffffffffffff, // TX_8x8
|
| - 0x5555555555555555, // TX_16x16
|
| - 0x1111111111111111, // TX_32x32
|
| + 0xffffffffffffffff, // TX_4X4
|
| + 0xffffffffffffffff, // TX_8x8
|
| + 0x5555555555555555, // TX_16x16
|
| + 0x1111111111111111, // TX_32x32
|
| };
|
|
|
| -// 64 bit masks for above transform size. Each 1 represents a position where
|
| +// 64 bit masks for above transform size. Each 1 represents a position where
|
| // we should apply a loop filter across the top border of an 8x8 block
|
| // boundary.
|
| //
|
| @@ -58,15 +58,15 @@
|
| //
|
| // A loopfilter should be applied to every other 4 the row vertically.
|
| static const uint64_t above_64x64_txform_mask[TX_SIZES]= {
|
| - 0xffffffffffffffff, // TX_4X4
|
| - 0xffffffffffffffff, // TX_8x8
|
| - 0x00ff00ff00ff00ff, // TX_16x16
|
| - 0x000000ff000000ff, // TX_32x32
|
| + 0xffffffffffffffff, // TX_4X4
|
| + 0xffffffffffffffff, // TX_8x8
|
| + 0x00ff00ff00ff00ff, // TX_16x16
|
| + 0x000000ff000000ff, // TX_32x32
|
| };
|
|
|
| -// 64 bit masks for prediction sizes (left). Each 1 represents a position
|
| -// where left border of an 8x8 block. These are aligned to the right most
|
| -// appropriate bit, and then shifted into place.
|
| +// 64 bit masks for prediction sizes (left). Each 1 represents a position
|
| +// where left border of an 8x8 block. These are aligned to the right most
|
| +// appropriate bit, and then shifted into place.
|
| //
|
| // In the case of TX_16x32 -> ( low order byte first ) we end up with
|
| // a mask that looks like this :
|
| @@ -80,54 +80,54 @@
|
| // 00000000
|
| // 00000000
|
| static const uint64_t left_prediction_mask[BLOCK_SIZES] = {
|
| - 0x0000000000000001, // BLOCK_4X4,
|
| - 0x0000000000000001, // BLOCK_4X8,
|
| - 0x0000000000000001, // BLOCK_8X4,
|
| - 0x0000000000000001, // BLOCK_8X8,
|
| - 0x0000000000000101, // BLOCK_8X16,
|
| - 0x0000000000000001, // BLOCK_16X8,
|
| - 0x0000000000000101, // BLOCK_16X16,
|
| - 0x0000000001010101, // BLOCK_16X32,
|
| - 0x0000000000000101, // BLOCK_32X16,
|
| - 0x0000000001010101, // BLOCK_32X32,
|
| - 0x0101010101010101, // BLOCK_32X64,
|
| - 0x0000000001010101, // BLOCK_64X32,
|
| - 0x0101010101010101, // BLOCK_64X64
|
| + 0x0000000000000001, // BLOCK_4X4,
|
| + 0x0000000000000001, // BLOCK_4X8,
|
| + 0x0000000000000001, // BLOCK_8X4,
|
| + 0x0000000000000001, // BLOCK_8X8,
|
| + 0x0000000000000101, // BLOCK_8X16,
|
| + 0x0000000000000001, // BLOCK_16X8,
|
| + 0x0000000000000101, // BLOCK_16X16,
|
| + 0x0000000001010101, // BLOCK_16X32,
|
| + 0x0000000000000101, // BLOCK_32X16,
|
| + 0x0000000001010101, // BLOCK_32X32,
|
| + 0x0101010101010101, // BLOCK_32X64,
|
| + 0x0000000001010101, // BLOCK_64X32,
|
| + 0x0101010101010101, // BLOCK_64X64
|
| };
|
|
|
| // 64 bit mask to shift and set for each prediction size.
|
| static const uint64_t above_prediction_mask[BLOCK_SIZES] = {
|
| - 0x0000000000000001, // BLOCK_4X4
|
| - 0x0000000000000001, // BLOCK_4X8
|
| - 0x0000000000000001, // BLOCK_8X4
|
| - 0x0000000000000001, // BLOCK_8X8
|
| - 0x0000000000000001, // BLOCK_8X16,
|
| - 0x0000000000000003, // BLOCK_16X8
|
| - 0x0000000000000003, // BLOCK_16X16
|
| - 0x0000000000000003, // BLOCK_16X32,
|
| - 0x000000000000000f, // BLOCK_32X16,
|
| - 0x000000000000000f, // BLOCK_32X32,
|
| - 0x000000000000000f, // BLOCK_32X64,
|
| - 0x00000000000000ff, // BLOCK_64X32,
|
| - 0x00000000000000ff, // BLOCK_64X64
|
| + 0x0000000000000001, // BLOCK_4X4
|
| + 0x0000000000000001, // BLOCK_4X8
|
| + 0x0000000000000001, // BLOCK_8X4
|
| + 0x0000000000000001, // BLOCK_8X8
|
| + 0x0000000000000001, // BLOCK_8X16,
|
| + 0x0000000000000003, // BLOCK_16X8
|
| + 0x0000000000000003, // BLOCK_16X16
|
| + 0x0000000000000003, // BLOCK_16X32,
|
| + 0x000000000000000f, // BLOCK_32X16,
|
| + 0x000000000000000f, // BLOCK_32X32,
|
| + 0x000000000000000f, // BLOCK_32X64,
|
| + 0x00000000000000ff, // BLOCK_64X32,
|
| + 0x00000000000000ff, // BLOCK_64X64
|
| };
|
| -// 64 bit mask to shift and set for each prediction size. A bit is set for
|
| +// 64 bit mask to shift and set for each prediction size. A bit is set for
|
| // each 8x8 block that would be in the left most block of the given block
|
| // size in the 64x64 block.
|
| static const uint64_t size_mask[BLOCK_SIZES] = {
|
| - 0x0000000000000001, // BLOCK_4X4
|
| - 0x0000000000000001, // BLOCK_4X8
|
| - 0x0000000000000001, // BLOCK_8X4
|
| - 0x0000000000000001, // BLOCK_8X8
|
| - 0x0000000000000101, // BLOCK_8X16,
|
| - 0x0000000000000003, // BLOCK_16X8
|
| - 0x0000000000000303, // BLOCK_16X16
|
| - 0x0000000003030303, // BLOCK_16X32,
|
| - 0x0000000000000f0f, // BLOCK_32X16,
|
| - 0x000000000f0f0f0f, // BLOCK_32X32,
|
| - 0x0f0f0f0f0f0f0f0f, // BLOCK_32X64,
|
| - 0x00000000ffffffff, // BLOCK_64X32,
|
| - 0xffffffffffffffff, // BLOCK_64X64
|
| + 0x0000000000000001, // BLOCK_4X4
|
| + 0x0000000000000001, // BLOCK_4X8
|
| + 0x0000000000000001, // BLOCK_8X4
|
| + 0x0000000000000001, // BLOCK_8X8
|
| + 0x0000000000000101, // BLOCK_8X16,
|
| + 0x0000000000000003, // BLOCK_16X8
|
| + 0x0000000000000303, // BLOCK_16X16
|
| + 0x0000000003030303, // BLOCK_16X32,
|
| + 0x0000000000000f0f, // BLOCK_32X16,
|
| + 0x000000000f0f0f0f, // BLOCK_32X32,
|
| + 0x0f0f0f0f0f0f0f0f, // BLOCK_32X64,
|
| + 0x00000000ffffffff, // BLOCK_64X32,
|
| + 0xffffffffffffffff, // BLOCK_64X64
|
| };
|
|
|
| // These are used for masking the left and above borders.
|
| @@ -136,67 +136,67 @@
|
|
|
| // 16 bit masks for uv transform sizes.
|
| static const uint16_t left_64x64_txform_mask_uv[TX_SIZES]= {
|
| - 0xffff, // TX_4X4
|
| - 0xffff, // TX_8x8
|
| - 0x5555, // TX_16x16
|
| - 0x1111, // TX_32x32
|
| + 0xffff, // TX_4X4
|
| + 0xffff, // TX_8x8
|
| + 0x5555, // TX_16x16
|
| + 0x1111, // TX_32x32
|
| };
|
|
|
| static const uint16_t above_64x64_txform_mask_uv[TX_SIZES]= {
|
| - 0xffff, // TX_4X4
|
| - 0xffff, // TX_8x8
|
| - 0x0f0f, // TX_16x16
|
| - 0x000f, // TX_32x32
|
| + 0xffff, // TX_4X4
|
| + 0xffff, // TX_8x8
|
| + 0x0f0f, // TX_16x16
|
| + 0x000f, // TX_32x32
|
| };
|
|
|
| // 16 bit left mask to shift and set for each uv prediction size.
|
| static const uint16_t left_prediction_mask_uv[BLOCK_SIZES] = {
|
| - 0x0001, // BLOCK_4X4,
|
| - 0x0001, // BLOCK_4X8,
|
| - 0x0001, // BLOCK_8X4,
|
| - 0x0001, // BLOCK_8X8,
|
| - 0x0001, // BLOCK_8X16,
|
| - 0x0001, // BLOCK_16X8,
|
| - 0x0001, // BLOCK_16X16,
|
| - 0x0011, // BLOCK_16X32,
|
| - 0x0001, // BLOCK_32X16,
|
| - 0x0011, // BLOCK_32X32,
|
| - 0x1111, // BLOCK_32X64
|
| - 0x0011, // BLOCK_64X32,
|
| - 0x1111, // BLOCK_64X64
|
| + 0x0001, // BLOCK_4X4,
|
| + 0x0001, // BLOCK_4X8,
|
| + 0x0001, // BLOCK_8X4,
|
| + 0x0001, // BLOCK_8X8,
|
| + 0x0001, // BLOCK_8X16,
|
| + 0x0001, // BLOCK_16X8,
|
| + 0x0001, // BLOCK_16X16,
|
| + 0x0011, // BLOCK_16X32,
|
| + 0x0001, // BLOCK_32X16,
|
| + 0x0011, // BLOCK_32X32,
|
| + 0x1111, // BLOCK_32X64
|
| + 0x0011, // BLOCK_64X32,
|
| + 0x1111, // BLOCK_64X64
|
| };
|
| // 16 bit above mask to shift and set for uv each prediction size.
|
| static const uint16_t above_prediction_mask_uv[BLOCK_SIZES] = {
|
| - 0x0001, // BLOCK_4X4
|
| - 0x0001, // BLOCK_4X8
|
| - 0x0001, // BLOCK_8X4
|
| - 0x0001, // BLOCK_8X8
|
| - 0x0001, // BLOCK_8X16,
|
| - 0x0001, // BLOCK_16X8
|
| - 0x0001, // BLOCK_16X16
|
| - 0x0001, // BLOCK_16X32,
|
| - 0x0003, // BLOCK_32X16,
|
| - 0x0003, // BLOCK_32X32,
|
| - 0x0003, // BLOCK_32X64,
|
| - 0x000f, // BLOCK_64X32,
|
| - 0x000f, // BLOCK_64X64
|
| + 0x0001, // BLOCK_4X4
|
| + 0x0001, // BLOCK_4X8
|
| + 0x0001, // BLOCK_8X4
|
| + 0x0001, // BLOCK_8X8
|
| + 0x0001, // BLOCK_8X16,
|
| + 0x0001, // BLOCK_16X8
|
| + 0x0001, // BLOCK_16X16
|
| + 0x0001, // BLOCK_16X32,
|
| + 0x0003, // BLOCK_32X16,
|
| + 0x0003, // BLOCK_32X32,
|
| + 0x0003, // BLOCK_32X64,
|
| + 0x000f, // BLOCK_64X32,
|
| + 0x000f, // BLOCK_64X64
|
| };
|
|
|
| // 64 bit mask to shift and set for each uv prediction size
|
| static const uint16_t size_mask_uv[BLOCK_SIZES] = {
|
| - 0x0001, // BLOCK_4X4
|
| - 0x0001, // BLOCK_4X8
|
| - 0x0001, // BLOCK_8X4
|
| - 0x0001, // BLOCK_8X8
|
| - 0x0001, // BLOCK_8X16,
|
| - 0x0001, // BLOCK_16X8
|
| - 0x0001, // BLOCK_16X16
|
| - 0x0011, // BLOCK_16X32,
|
| - 0x0003, // BLOCK_32X16,
|
| - 0x0033, // BLOCK_32X32,
|
| - 0x3333, // BLOCK_32X64,
|
| - 0x00ff, // BLOCK_64X32,
|
| - 0xffff, // BLOCK_64X64
|
| + 0x0001, // BLOCK_4X4
|
| + 0x0001, // BLOCK_4X8
|
| + 0x0001, // BLOCK_8X4
|
| + 0x0001, // BLOCK_8X8
|
| + 0x0001, // BLOCK_8X16,
|
| + 0x0001, // BLOCK_16X8
|
| + 0x0001, // BLOCK_16X16
|
| + 0x0011, // BLOCK_16X32,
|
| + 0x0003, // BLOCK_32X16,
|
| + 0x0033, // BLOCK_32X32,
|
| + 0x3333, // BLOCK_32X64,
|
| + 0x00ff, // BLOCK_64X32,
|
| + 0xffff, // BLOCK_64X64
|
| };
|
| static const uint16_t left_border_uv = 0x1111;
|
| static const uint16_t above_border_uv = 0x000f;
|
| @@ -211,7 +211,7 @@
|
|
|
| // For each possible value for the loop filter fill out limits
|
| for (lvl = 0; lvl <= MAX_LOOP_FILTER; lvl++) {
|
| - // Set loop filter paramaeters that control sharpness.
|
| + // Set loop filter parameters that control sharpness.
|
| int block_inside_limit = lvl >> ((sharpness_lvl > 0) + (sharpness_lvl > 4));
|
|
|
| if (sharpness_lvl > 0) {
|
| @@ -250,7 +250,7 @@
|
|
|
| void vp9_loop_filter_frame_init(VP9_COMMON *cm, int default_filt_lvl) {
|
| int seg_id;
|
| - // n_shift is the a multiplier for lf_deltas
|
| + // n_shift is the multiplier for lf_deltas
|
| // the multiplier is 1 for when filter_lvl is between 0 and 31;
|
| // 2 when filter_lvl is between 32 and 63
|
| const int scale = 1 << (default_filt_lvl >> 5);
|
| @@ -316,8 +316,8 @@
|
| unsigned int mask;
|
|
|
| for (mask = mask_16x16_0 | mask_8x8_0 | mask_4x4_0 | mask_4x4_int_0 |
|
| - mask_16x16_1 | mask_8x8_1 | mask_4x4_1 | mask_4x4_int_1;
|
| - mask; mask >>= 1) {
|
| + mask_16x16_1 | mask_8x8_1 | mask_4x4_1 | mask_4x4_int_1;
|
| + mask; mask >>= 1) {
|
| const loop_filter_thresh *lfi0 = lfi_n->lfthr + *lfl;
|
| const loop_filter_thresh *lfi1 = lfi_n->lfthr + *(lfl + lfl_forward);
|
|
|
| @@ -489,8 +489,8 @@
|
| }
|
|
|
| // This function ors into the current lfm structure, where to do loop
|
| -// filters for the specific mi we are looking at. It uses information
|
| -// including the block_size_type (32x16, 32x32, etc), the transform size,
|
| +// filters for the specific mi we are looking at. It uses information
|
| +// including the block_size_type (32x16, 32x32, etc.), the transform size,
|
| // whether there were any coefficients encoded, and the loop filter strength
|
| // block we are currently looking at. Shift is used to position the
|
| // 1's we produce.
|
| @@ -526,7 +526,7 @@
|
| }
|
|
|
| // These set 1 in the current block size for the block size edges.
|
| - // For instance if the block size is 32x16, we'll set :
|
| + // For instance if the block size is 32x16, we'll set:
|
| // above = 1111
|
| // 0000
|
| // and
|
| @@ -535,7 +535,7 @@
|
| // NOTE : In this example the low bit is left most ( 1000 ) is stored as
|
| // 1, not 8...
|
| //
|
| - // U and v set things on a 16 bit scale.
|
| + // U and V set things on a 16 bit scale.
|
| //
|
| *above_y |= above_prediction_mask[block_size] << shift_y;
|
| *above_uv |= above_prediction_mask_uv[block_size] << shift_uv;
|
| @@ -547,7 +547,7 @@
|
| if (mbmi->skip && is_inter_block(mbmi))
|
| return;
|
|
|
| - // Here we are adding a mask for the transform size. The transform
|
| + // Here we are adding a mask for the transform size. The transform
|
| // size mask is set to be correct for a 64x64 prediction block size. We
|
| // mask to match the size of the block we are working on and then shift it
|
| // into place..
|
| @@ -573,7 +573,7 @@
|
| }
|
|
|
| // This function does the same thing as the one above with the exception that
|
| -// it only affects the y masks. It exists because for blocks < 16x16 in size,
|
| +// it only affects the y masks. It exists because for blocks < 16x16 in size,
|
| // we only update u and v masks on the first block.
|
| static void build_y_mask(const loop_filter_info_n *const lfi_n,
|
| const MODE_INFO *mi, const int shift_y,
|
| @@ -627,8 +627,8 @@
|
| MODE_INFO **mip2 = mi;
|
|
|
| // These are offsets to the next mi in the 64x64 block. It is what gets
|
| - // added to the mi ptr as we go through each loop. It helps us to avoids
|
| - // setting up special row and column counters for each index. The last step
|
| + // added to the mi ptr as we go through each loop. It helps us to avoid
|
| + // setting up special row and column counters for each index. The last step
|
| // brings us out back to the starting position.
|
| const int offset_32[] = {4, (mode_info_stride << 2) - 4, 4,
|
| -(mode_info_stride << 2) - 4};
|
| @@ -637,7 +637,7 @@
|
| const int offset[] = {1, mode_info_stride - 1, 1, -mode_info_stride - 1};
|
|
|
| // Following variables represent shifts to position the current block
|
| - // mask over the appropriate block. A shift of 36 to the left will move
|
| + // mask over the appropriate block. A shift of 36 to the left will move
|
| // the bits for the final 32 by 32 block in the 64x64 up 4 rows and left
|
| // 4 rows to the appropriate spot.
|
| const int shift_32_y[] = {0, 4, 32, 36};
|
| @@ -652,6 +652,7 @@
|
| cm->mi_cols - mi_col : MI_BLOCK_SIZE);
|
|
|
| vp9_zero(*lfm);
|
| + assert(mip[0] != NULL);
|
|
|
| // TODO(jimbankoski): Try moving most of the following code into decode
|
| // loop and storing lfm in the mbmi structure so that we don't have to go
|
| @@ -767,7 +768,7 @@
|
| lfm->above_uv[TX_16X16] |= lfm->above_uv[TX_32X32];
|
|
|
| // We do at least 8 tap filter on every 32x32 even if the transform size
|
| - // is 4x4. So if the 4x4 is set on a border pixel add it to the 8x8 and
|
| + // is 4x4. So if the 4x4 is set on a border pixel add it to the 8x8 and
|
| // remove it from the 4x4.
|
| lfm->left_y[TX_8X8] |= lfm->left_y[TX_4X4] & left_border;
|
| lfm->left_y[TX_4X4] &= ~left_border;
|
| @@ -796,7 +797,7 @@
|
| lfm->int_4x4_y &= mask_y;
|
| lfm->int_4x4_uv &= mask_uv;
|
|
|
| - // We don't apply a wide loop filter on the last uv block row. If set
|
| + // We don't apply a wide loop filter on the last uv block row. If set
|
| // apply the shorter one instead.
|
| if (rows == 1) {
|
| lfm->above_uv[TX_8X8] |= lfm->above_uv[TX_16X16];
|
| @@ -830,7 +831,7 @@
|
| lfm->int_4x4_y &= mask_y;
|
| lfm->int_4x4_uv &= mask_uv_int;
|
|
|
| - // We don't apply a wide loop filter on the last uv column. If set
|
| + // We don't apply a wide loop filter on the last uv column. If set
|
| // apply the shorter one instead.
|
| if (columns == 1) {
|
| lfm->left_uv[TX_8X8] |= lfm->left_uv[TX_16X16];
|
| @@ -841,7 +842,8 @@
|
| lfm->left_uv[TX_16X16] &= ~(lfm->left_uv[TX_16X16] & 0xcccc);
|
| }
|
| }
|
| - // We don't a loop filter on the first column in the image. Mask that out.
|
| + // We don't apply a loop filter on the first column in the image, mask that
|
| + // out.
|
| if (mi_col == 0) {
|
| for (i = 0; i < TX_32X32; i++) {
|
| lfm->left_y[i] &= 0xfefefefefefefefe;
|
|
|