apply clang-format

after:
253c001 Port dering experiment from aom
7208145 Adding 8x16/16x8/32x16/16x32 transforms

Change-Id: Id93e0d7b72a128701d8dec35fc2fac473944d0c1
This commit is contained in:
clang-format
2016-08-18 15:10:22 -07:00
committed by James Zern
parent 0996fc6be3
commit 21a0c2c9d7
20 changed files with 2308 additions and 2391 deletions

View File

@@ -34,8 +34,9 @@ using libvpx_test::ACMRandom;
TEST(Daala, TestDIVUuptoMAX) {
for (int d = 1; d <= OD_DIVU_DMAX; d++) {
for (uint32_t x = 1; x <= 1000000; x++) {
GTEST_ASSERT_EQ(x/d, OD_DIVU_SMALL(x, d)) << "x=" << x << " d=" << d <<
" x/d=" << (x/d) << " != " << OD_DIVU_SMALL(x, d);
GTEST_ASSERT_EQ(x / d, OD_DIVU_SMALL(x, d))
<< "x=" << x << " d=" << d << " x/d=" << (x / d)
<< " != " << OD_DIVU_SMALL(x, d);
}
}
}
@@ -45,8 +46,9 @@ TEST(Daala, TestDIVUrandI31) {
for (int d = 1; d < OD_DIVU_DMAX; d++) {
for (int i = 0; i < 1000000; i++) {
uint32_t x = rnd.Rand31();
GTEST_ASSERT_EQ(x/d, OD_DIVU_SMALL(x, d)) << "x=" << x << " d=" << d <<
" x/d=" << (x/d) << " != " << OD_DIVU_SMALL(x, d);
GTEST_ASSERT_EQ(x / d, OD_DIVU_SMALL(x, d))
<< "x=" << x << " d=" << d << " x/d=" << (x / d)
<< " != " << OD_DIVU_SMALL(x, d);
}
}
}

View File

@@ -61,9 +61,9 @@ static const uint8_t num_16x16_blocks_high_lookup[BLOCK_SIZES] = {
};
static const uint8_t num_4x4_blocks_txsize_lookup[TX_SIZES_ALL] = {
1, 4, 16, 64,
1, 4, 16, 64,
#if CONFIG_EXT_TX
2, 2, 8, 8, 32, 32
2, 2, 8, 8, 32, 32
#endif // CONFIG_EXT_TX
};
static const uint8_t num_4x4_blocks_wide_txsize_lookup[TX_SIZES_ALL] = {
@@ -380,7 +380,7 @@ static const BLOCK_SIZE txsize_to_bsize[TX_SIZES_ALL] = {
BLOCK_16X8, // TX_16X8
BLOCK_16X32, // TX_16X32
BLOCK_32X16, // TX_32X16
#endif // CONFIG_EXT_TX
#endif // CONFIG_EXT_TX
};
static const TX_SIZE txsize_sqr_map[TX_SIZES_ALL] = {
@@ -395,7 +395,7 @@ static const TX_SIZE txsize_sqr_map[TX_SIZES_ALL] = {
TX_8X8, // TX_16X8
TX_16X16, // TX_16X32
TX_16X16, // TX_32X16
#endif // CONFIG_EXT_TX
#endif // CONFIG_EXT_TX
};
static const TX_SIZE txsize_sqr_up_map[TX_SIZES_ALL] = {
@@ -410,7 +410,7 @@ static const TX_SIZE txsize_sqr_up_map[TX_SIZES_ALL] = {
TX_16X16, // TX_16X8
TX_32X32, // TX_16X32
TX_32X32, // TX_32X16
#endif // CONFIG_EXT_TX
#endif // CONFIG_EXT_TX
};
static const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {

View File

@@ -18,13 +18,12 @@
#include "vp10/common/reconinter.h"
#include "vp10/common/od_dering.h"
int compute_level_from_index(int global_level, int gi) {
static const int dering_gains[DERING_REFINEMENT_LEVELS] = {0, 11, 16, 22};
static const int dering_gains[DERING_REFINEMENT_LEVELS] = { 0, 11, 16, 22 };
int level;
if (global_level == 0) return 0;
level = (global_level*dering_gains[gi] + 8) >> 4;
return clamp(level, gi, MAX_DERING_LEVEL-1);
level = (global_level * dering_gains[gi] + 8) >> 4;
return clamp(level, gi, MAX_DERING_LEVEL - 1);
}
int sb_all_skip(const VP10_COMMON *const cm, int mi_row, int mi_col) {
@@ -38,8 +37,8 @@ int sb_all_skip(const VP10_COMMON *const cm, int mi_row, int mi_col) {
for (r = 0; r < maxr; r++) {
for (c = 0; c < maxc; c++) {
skip = skip &&
cm->mi_grid_visible[(mi_row + r)*cm->mi_stride + mi_col + c]->
mbmi.skip;
cm->mi_grid_visible[(mi_row + r) * cm->mi_stride + mi_col + c]
->mbmi.skip;
}
}
return skip;
@@ -52,30 +51,29 @@ void vp10_dering_frame(YV12_BUFFER_CONFIG *frame, VP10_COMMON *cm,
int nhsb, nvsb;
od_dering_in *src[3];
unsigned char *bskip;
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS] = {{0}};
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS] = { { 0 } };
int stride;
int bsize[3];
int dec[3];
int pli;
int coeff_shift = VPXMAX(cm->bit_depth - 8, 0);
nvsb = (cm->mi_rows + MI_BLOCK_SIZE - 1)/MI_BLOCK_SIZE;
nhsb = (cm->mi_cols + MI_BLOCK_SIZE - 1)/MI_BLOCK_SIZE;
bskip = vpx_malloc(sizeof(*bskip)*cm->mi_rows*cm->mi_cols);
nvsb = (cm->mi_rows + MI_BLOCK_SIZE - 1) / MI_BLOCK_SIZE;
nhsb = (cm->mi_cols + MI_BLOCK_SIZE - 1) / MI_BLOCK_SIZE;
bskip = vpx_malloc(sizeof(*bskip) * cm->mi_rows * cm->mi_cols);
vp10_setup_dst_planes(xd->plane, frame, 0, 0);
for (pli = 0; pli < 3; pli++) {
dec[pli] = xd->plane[pli].subsampling_x;
bsize[pli] = 8 >> dec[pli];
}
stride = bsize[0]*cm->mi_cols;
stride = bsize[0] * cm->mi_cols;
for (pli = 0; pli < 3; pli++) {
src[pli] = vpx_malloc(sizeof(*src)*cm->mi_rows*cm->mi_cols*64);
for (r = 0; r < bsize[pli]*cm->mi_rows; ++r) {
for (c = 0; c < bsize[pli]*cm->mi_cols; ++c) {
src[pli] = vpx_malloc(sizeof(*src) * cm->mi_rows * cm->mi_cols * 64);
for (r = 0; r < bsize[pli] * cm->mi_rows; ++r) {
for (c = 0; c < bsize[pli] * cm->mi_cols; ++c) {
#if CONFIG_VPX_HIGHBITDEPTH
if (cm->use_highbitdepth) {
src[pli][r * stride + c] =
CONVERT_TO_SHORTPTR(xd->plane[pli].dst.buf)
[r * xd->plane[pli].dst.stride + c];
src[pli][r * stride + c] = CONVERT_TO_SHORTPTR(
xd->plane[pli].dst.buf)[r * xd->plane[pli].dst.stride + c];
} else {
#endif
src[pli][r * stride + c] =
@@ -97,46 +95,48 @@ void vp10_dering_frame(YV12_BUFFER_CONFIG *frame, VP10_COMMON *cm,
for (sbc = 0; sbc < nhsb; sbc++) {
int level;
int nhb, nvb;
nhb = VPXMIN(MI_BLOCK_SIZE, cm->mi_cols - MI_BLOCK_SIZE*sbc);
nvb = VPXMIN(MI_BLOCK_SIZE, cm->mi_rows - MI_BLOCK_SIZE*sbr);
nhb = VPXMIN(MI_BLOCK_SIZE, cm->mi_cols - MI_BLOCK_SIZE * sbc);
nvb = VPXMIN(MI_BLOCK_SIZE, cm->mi_rows - MI_BLOCK_SIZE * sbr);
for (pli = 0; pli < 3; pli++) {
int16_t dst[MI_BLOCK_SIZE*MI_BLOCK_SIZE*8*8];
int16_t dst[MI_BLOCK_SIZE * MI_BLOCK_SIZE * 8 * 8];
int threshold;
#if DERING_REFINEMENT
level = compute_level_from_index(
global_level,
cm->mi_grid_visible[MI_BLOCK_SIZE*sbr*cm->mi_stride +
MI_BLOCK_SIZE*sbc]->mbmi.dering_gain);
cm->mi_grid_visible[MI_BLOCK_SIZE * sbr * cm->mi_stride +
MI_BLOCK_SIZE * sbc]
->mbmi.dering_gain);
#else
level = global_level;
level = global_level;
#endif
/* FIXME: This is a temporary hack that uses more conservative
deringing for chroma. */
if (pli) level = (level*5 + 4) >> 3;
if (sb_all_skip(cm, sbr*MI_BLOCK_SIZE, sbc*MI_BLOCK_SIZE)) level = 0;
if (pli) level = (level * 5 + 4) >> 3;
if (sb_all_skip(cm, sbr * MI_BLOCK_SIZE, sbc * MI_BLOCK_SIZE))
level = 0;
threshold = level << coeff_shift;
od_dering(
&OD_DERING_VTBL_C,
dst,
MI_BLOCK_SIZE*bsize[pli],
&src[pli][sbr*stride*bsize[pli]*MI_BLOCK_SIZE +
sbc*bsize[pli]*MI_BLOCK_SIZE],
&OD_DERING_VTBL_C, dst, MI_BLOCK_SIZE * bsize[pli],
&src[pli][sbr * stride * bsize[pli] * MI_BLOCK_SIZE +
sbc * bsize[pli] * MI_BLOCK_SIZE],
stride, nhb, nvb, sbc, sbr, nhsb, nvsb, dec[pli], dir, pli,
&bskip[MI_BLOCK_SIZE*sbr*cm->mi_cols + MI_BLOCK_SIZE*sbc],
&bskip[MI_BLOCK_SIZE * sbr * cm->mi_cols + MI_BLOCK_SIZE * sbc],
cm->mi_cols, threshold, OD_DERING_NO_CHECK_OVERLAP, coeff_shift);
for (r = 0; r < bsize[pli]*nvb; ++r) {
for (c = 0; c < bsize[pli]*nhb; ++c) {
for (r = 0; r < bsize[pli] * nvb; ++r) {
for (c = 0; c < bsize[pli] * nhb; ++c) {
#if CONFIG_VPX_HIGHBITDEPTH
if (cm->use_highbitdepth) {
CONVERT_TO_SHORTPTR(xd->plane[pli].dst.buf)
[xd->plane[pli].dst.stride*(bsize[pli]*MI_BLOCK_SIZE*sbr + r)
+ sbc*bsize[pli]*MI_BLOCK_SIZE + c] =
[xd->plane[pli].dst.stride *
(bsize[pli] * MI_BLOCK_SIZE * sbr + r) +
sbc * bsize[pli] * MI_BLOCK_SIZE + c] =
dst[r * MI_BLOCK_SIZE * bsize[pli] + c];
} else {
#endif
xd->plane[pli].dst.buf[xd->plane[pli].dst.stride*
(bsize[pli]*MI_BLOCK_SIZE*sbr + r) +
sbc*bsize[pli]*MI_BLOCK_SIZE + c] =
xd->plane[pli]
.dst.buf[xd->plane[pli].dst.stride *
(bsize[pli] * MI_BLOCK_SIZE * sbr + r) +
sbc * bsize[pli] * MI_BLOCK_SIZE + c] =
dst[r * MI_BLOCK_SIZE * bsize[pli] + c];
#if CONFIG_VPX_HIGHBITDEPTH
}

View File

@@ -24,8 +24,7 @@ void vp10_dering_frame(YV12_BUFFER_CONFIG *frame, VP10_COMMON *cm,
MACROBLOCKD *xd, int global_level);
int vp10_dering_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
VP10_COMMON *cm,
MACROBLOCKD *xd);
VP10_COMMON *cm, MACROBLOCKD *xd);
#ifdef __cplusplus
} // extern "C"

View File

@@ -59,12 +59,9 @@ const uint16_t band_count_table[TX_SIZES_ALL][8] = {
{ 1, 2, 3, 4, 3, 16 - 13, 0 }, { 1, 2, 3, 4, 11, 64 - 21, 0 },
{ 1, 2, 3, 4, 11, 256 - 21, 0 }, { 1, 2, 3, 4, 11, 1024 - 21, 0 },
#if CONFIG_EXT_TX
{ 1, 2, 3, 4, 8, 32 - 18, 0 },
{ 1, 2, 3, 4, 8, 32 - 18, 0 },
{ 1, 2, 3, 4, 11, 128 - 21, 0 },
{ 1, 2, 3, 4, 11, 128 - 21, 0 },
{ 1, 2, 3, 4, 11, 512 - 21, 0 },
{ 1, 2, 3, 4, 11, 512 - 21, 0 },
{ 1, 2, 3, 4, 8, 32 - 18, 0 }, { 1, 2, 3, 4, 8, 32 - 18, 0 },
{ 1, 2, 3, 4, 11, 128 - 21, 0 }, { 1, 2, 3, 4, 11, 128 - 21, 0 },
{ 1, 2, 3, 4, 11, 512 - 21, 0 }, { 1, 2, 3, 4, 11, 512 - 21, 0 },
#endif // CONFIG_EXT_TX
};
@@ -72,12 +69,9 @@ const uint16_t band_cum_count_table[TX_SIZES_ALL][8] = {
{ 0, 1, 3, 6, 10, 13, 16, 0 }, { 0, 1, 3, 6, 10, 21, 64, 0 },
{ 0, 1, 3, 6, 10, 21, 256, 0 }, { 0, 1, 3, 6, 10, 21, 1024, 0 },
#if CONFIG_EXT_TX
{ 0, 1, 3, 6, 10, 18, 32, 0 },
{ 0, 1, 3, 6, 10, 18, 32, 0 },
{ 0, 1, 3, 6, 10, 21, 128, 0 },
{ 0, 1, 3, 6, 10, 21, 128, 0 },
{ 0, 1, 3, 6, 10, 21, 512, 0 },
{ 0, 1, 3, 6, 10, 21, 512, 0 },
{ 0, 1, 3, 6, 10, 18, 32, 0 }, { 0, 1, 3, 6, 10, 18, 32, 0 },
{ 0, 1, 3, 6, 10, 21, 128, 0 }, { 0, 1, 3, 6, 10, 21, 128, 0 },
{ 0, 1, 3, 6, 10, 21, 512, 0 }, { 0, 1, 3, 6, 10, 21, 512, 0 },
#endif // CONFIG_EXT_TX
};

View File

@@ -168,8 +168,7 @@ static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) {
switch (tx_size) {
case TX_4X4: return vp10_coefband_trans_4x4;
#if CONFIG_EXT_TX
case TX_4X8:
return vp10_coefband_trans_4x8_8x4;
case TX_4X8: return vp10_coefband_trans_4x8_8x4;
#endif // CONFIG_EXT_TX
default: return vp10_coefband_trans_8x8plus;
}
@@ -230,19 +229,19 @@ static INLINE int get_entropy_context(TX_SIZE tx_size, const ENTROPY_CONTEXT *a,
break;
case TX_8X16:
above_ec = !!*(const uint16_t *)a;
left_ec = !!*(const uint32_t *)l;
left_ec = !!*(const uint32_t *)l;
break;
case TX_16X8:
above_ec = !!*(const uint32_t *)a;
left_ec = !!*(const uint16_t *)l;
left_ec = !!*(const uint16_t *)l;
break;
case TX_16X32:
above_ec = !!*(const uint32_t *)a;
left_ec = !!*(const uint64_t *)l;
left_ec = !!*(const uint64_t *)l;
break;
case TX_32X16:
above_ec = !!*(const uint64_t *)a;
left_ec = !!*(const uint32_t *)l;
left_ec = !!*(const uint32_t *)l;
break;
#endif // CONFIG_EXT_TX
case TX_8X8:

View File

@@ -138,12 +138,12 @@ typedef uint8_t TX_SIZE;
#define TX_SIZES ((TX_SIZE)4)
#if CONFIG_EXT_TX
#define TX_4X8 ((TX_SIZE)4) // 4x8 transform
#define TX_8X4 ((TX_SIZE)5) // 8x4 transform
#define TX_8X16 ((TX_SIZE)6) // 8x16 transform
#define TX_16X8 ((TX_SIZE)7) // 16x8 transform
#define TX_16X32 ((TX_SIZE)8) // 16x32 transform
#define TX_32X16 ((TX_SIZE)9) // 32x16 transform
#define TX_4X8 ((TX_SIZE)4) // 4x8 transform
#define TX_8X4 ((TX_SIZE)5) // 8x4 transform
#define TX_8X16 ((TX_SIZE)6) // 8x16 transform
#define TX_16X8 ((TX_SIZE)7) // 16x8 transform
#define TX_16X32 ((TX_SIZE)8) // 16x32 transform
#define TX_32X16 ((TX_SIZE)9) // 32x16 transform
#define TX_SIZES_ALL ((TX_SIZE)10) // Includes rectangular transforms
#else
#define TX_SIZES_ALL ((TX_SIZE)4)

View File

@@ -548,8 +548,8 @@ void vp10_iht4x8_32_add_c(const tran_low_t *input, uint8_t *dest, int stride,
{ iadst8_c, idct4_c }, // ADST_DCT
{ idct8_c, iadst4_c }, // DCT_ADST
{ iadst8_c, iadst4_c }, // ADST_ADST
{ iadst8_c, idct4_c }, // FLIPADST_DCT
{ idct8_c, iadst4_c }, // DCT_FLIPADST
{ iadst8_c, idct4_c }, // FLIPADST_DCT
{ idct8_c, iadst4_c }, // DCT_FLIPADST
{ iadst8_c, iadst4_c }, // FLIPADST_FLIPADST
{ iadst8_c, iadst4_c }, // ADST_FLIPADST
{ iadst8_c, iadst4_c }, // FLIPADST_ADST
@@ -601,8 +601,8 @@ void vp10_iht8x4_32_add_c(const tran_low_t *input, uint8_t *dest, int stride,
{ iadst4_c, idct8_c }, // ADST_DCT
{ idct4_c, iadst8_c }, // DCT_ADST
{ iadst4_c, iadst8_c }, // ADST_ADST
{ iadst4_c, idct8_c }, // FLIPADST_DCT
{ idct4_c, iadst8_c }, // DCT_FLIPADST
{ iadst4_c, idct8_c }, // FLIPADST_DCT
{ idct4_c, iadst8_c }, // DCT_FLIPADST
{ iadst4_c, iadst8_c }, // FLIPADST_FLIPADST
{ iadst4_c, iadst8_c }, // ADST_FLIPADST
{ iadst4_c, iadst8_c }, // FLIPADST_ADST
@@ -647,21 +647,21 @@ void vp10_iht8x4_32_add_c(const tran_low_t *input, uint8_t *dest, int stride,
}
}
void vp10_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest,
int stride, int tx_type) {
void vp10_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest, int stride,
int tx_type) {
static const transform_2d IHT_8x16[] = {
{ idct16_c, idct8_c }, // DCT_DCT
{ iadst16_c, idct8_c }, // ADST_DCT
{ idct16_c, iadst8_c }, // DCT_ADST
{ idct16_c, idct8_c }, // DCT_DCT
{ iadst16_c, idct8_c }, // ADST_DCT
{ idct16_c, iadst8_c }, // DCT_ADST
{ iadst16_c, iadst8_c }, // ADST_ADST
{ iadst16_c, idct8_c }, // FLIPADST_DCT
{ idct16_c, iadst8_c }, // DCT_FLIPADST
{ iadst16_c, idct8_c }, // FLIPADST_DCT
{ idct16_c, iadst8_c }, // DCT_FLIPADST
{ iadst16_c, iadst8_c }, // FLIPADST_FLIPADST
{ iadst16_c, iadst8_c }, // ADST_FLIPADST
{ iadst16_c, iadst8_c }, // FLIPADST_ADST
{ iidtx16_c, iidtx8_c }, // IDTX
{ idct16_c, iidtx8_c }, // V_DCT
{ iidtx16_c, idct8_c }, // H_DCT
{ idct16_c, iidtx8_c }, // V_DCT
{ iidtx16_c, idct8_c }, // H_DCT
{ iadst16_c, iidtx8_c }, // V_ADST
{ iidtx16_c, iadst8_c }, // H_ADST
{ iadst16_c, iidtx8_c }, // V_FLIPADST
@@ -680,7 +680,7 @@ void vp10_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest,
IHT_8x16[tx_type].rows(input, outtmp);
for (j = 0; j < n; ++j)
out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
input += n;
input += n;
}
// inverse transform column vectors
@@ -700,21 +700,21 @@ void vp10_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest,
}
}
void vp10_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest,
int stride, int tx_type) {
void vp10_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest, int stride,
int tx_type) {
static const transform_2d IHT_16x8[] = {
{ idct8_c, idct16_c }, // DCT_DCT
{ iadst8_c, idct16_c }, // ADST_DCT
{ idct8_c, iadst16_c }, // DCT_ADST
{ idct8_c, idct16_c }, // DCT_DCT
{ iadst8_c, idct16_c }, // ADST_DCT
{ idct8_c, iadst16_c }, // DCT_ADST
{ iadst8_c, iadst16_c }, // ADST_ADST
{ iadst8_c, idct16_c }, // FLIPADST_DCT
{ idct8_c, iadst16_c }, // DCT_FLIPADST
{ iadst8_c, idct16_c }, // FLIPADST_DCT
{ idct8_c, iadst16_c }, // DCT_FLIPADST
{ iadst8_c, iadst16_c }, // FLIPADST_FLIPADST
{ iadst8_c, iadst16_c }, // ADST_FLIPADST
{ iadst8_c, iadst16_c }, // FLIPADST_ADST
{ iidtx8_c, iidtx16_c }, // IDTX
{ idct8_c, iidtx16_c }, // V_DCT
{ iidtx8_c, idct16_c }, // H_DCT
{ idct8_c, iidtx16_c }, // V_DCT
{ iidtx8_c, idct16_c }, // H_DCT
{ iadst8_c, iidtx16_c }, // V_ADST
{ iidtx8_c, iadst16_c }, // H_ADST
{ iadst8_c, iidtx16_c }, // V_FLIPADST
@@ -733,7 +733,7 @@ void vp10_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest,
IHT_16x8[tx_type].rows(input, outtmp);
for (j = 0; j < n2; ++j)
out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
input += n2;
input += n2;
}
// inverse transform column vectors
@@ -753,25 +753,25 @@ void vp10_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest,
}
}
void vp10_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest,
int stride, int tx_type) {
void vp10_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest, int stride,
int tx_type) {
static const transform_2d IHT_16x32[] = {
{ idct32_c, idct16_c }, // DCT_DCT
{ ihalfright32_c, idct16_c }, // ADST_DCT
{ idct32_c, iadst16_c }, // DCT_ADST
{ idct32_c, idct16_c }, // DCT_DCT
{ ihalfright32_c, idct16_c }, // ADST_DCT
{ idct32_c, iadst16_c }, // DCT_ADST
{ ihalfright32_c, iadst16_c }, // ADST_ADST
{ ihalfright32_c, idct16_c }, // FLIPADST_DCT
{ idct32_c, iadst16_c }, // DCT_FLIPADST
{ ihalfright32_c, idct16_c }, // FLIPADST_DCT
{ idct32_c, iadst16_c }, // DCT_FLIPADST
{ ihalfright32_c, iadst16_c }, // FLIPADST_FLIPADST
{ ihalfright32_c, iadst16_c }, // ADST_FLIPADST
{ ihalfright32_c, iadst16_c }, // FLIPADST_ADST
{ iidtx32_c, iidtx16_c }, // IDTX
{ idct32_c, iidtx16_c }, // V_DCT
{ iidtx32_c, idct16_c }, // H_DCT
{ iidtx32_c, iidtx16_c }, // IDTX
{ idct32_c, iidtx16_c }, // V_DCT
{ iidtx32_c, idct16_c }, // H_DCT
{ ihalfright32_c, iidtx16_c }, // V_ADST
{ iidtx32_c, iadst16_c }, // H_ADST
{ iidtx32_c, iadst16_c }, // H_ADST
{ ihalfright32_c, iidtx16_c }, // V_FLIPADST
{ iidtx32_c, iadst16_c }, // H_FLIPADST
{ iidtx32_c, iadst16_c }, // H_FLIPADST
};
const int n = 16;
@@ -786,7 +786,7 @@ void vp10_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest,
IHT_16x32[tx_type].rows(input, outtmp);
for (j = 0; j < n; ++j)
out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
input += n;
input += n;
}
// inverse transform column vectors
@@ -806,24 +806,24 @@ void vp10_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest,
}
}
void vp10_iht32x16_512_add_c(const tran_low_t *input, uint8_t *dest,
int stride, int tx_type) {
void vp10_iht32x16_512_add_c(const tran_low_t *input, uint8_t *dest, int stride,
int tx_type) {
static const transform_2d IHT_32x16[] = {
{ idct16_c, idct32_c }, // DCT_DCT
{ iadst16_c, idct32_c }, // ADST_DCT
{ idct16_c, ihalfright32_c }, // DCT_ADST
{ idct16_c, idct32_c }, // DCT_DCT
{ iadst16_c, idct32_c }, // ADST_DCT
{ idct16_c, ihalfright32_c }, // DCT_ADST
{ iadst16_c, ihalfright32_c }, // ADST_ADST
{ iadst16_c, idct32_c }, // FLIPADST_DCT
{ idct16_c, ihalfright32_c }, // DCT_FLIPADST
{ iadst16_c, idct32_c }, // FLIPADST_DCT
{ idct16_c, ihalfright32_c }, // DCT_FLIPADST
{ iadst16_c, ihalfright32_c }, // FLIPADST_FLIPADST
{ iadst16_c, ihalfright32_c }, // ADST_FLIPADST
{ iadst16_c, ihalfright32_c }, // FLIPADST_ADST
{ iidtx16_c, iidtx32_c }, // IDTX
{ idct16_c, iidtx32_c }, // V_DCT
{ iidtx16_c, idct32_c }, // H_DCT
{ iadst16_c, iidtx32_c }, // V_ADST
{ iidtx16_c, iidtx32_c }, // IDTX
{ idct16_c, iidtx32_c }, // V_DCT
{ iidtx16_c, idct32_c }, // H_DCT
{ iadst16_c, iidtx32_c }, // V_ADST
{ iidtx16_c, ihalfright32_c }, // H_ADST
{ iadst16_c, iidtx32_c }, // V_FLIPADST
{ iadst16_c, iidtx32_c }, // V_FLIPADST
{ iidtx16_c, ihalfright32_c }, // H_FLIPADST
};
const int n = 16;
@@ -839,7 +839,7 @@ void vp10_iht32x16_512_add_c(const tran_low_t *input, uint8_t *dest,
IHT_32x16[tx_type].rows(input, outtmp);
for (j = 0; j < n2; ++j)
out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
input += n2;
input += n2;
}
// inverse transform column vectors
@@ -1140,39 +1140,39 @@ void vp10_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest, int stride,
}
#if CONFIG_EXT_TX
void vp10_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest,
int stride, int eob, TX_TYPE tx_type) {
(void) eob;
void vp10_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest, int stride,
int eob, TX_TYPE tx_type) {
(void)eob;
vp10_iht4x8_32_add(input, dest, stride, tx_type);
}
void vp10_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest,
int stride, int eob, TX_TYPE tx_type) {
(void) eob;
void vp10_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest, int stride,
int eob, TX_TYPE tx_type) {
(void)eob;
vp10_iht8x4_32_add(input, dest, stride, tx_type);
}
void vp10_inv_txfm_add_8x16(const tran_low_t *input, uint8_t *dest,
int stride, int eob, TX_TYPE tx_type) {
(void) eob;
void vp10_inv_txfm_add_8x16(const tran_low_t *input, uint8_t *dest, int stride,
int eob, TX_TYPE tx_type) {
(void)eob;
vp10_iht8x16_128_add(input, dest, stride, tx_type);
}
void vp10_inv_txfm_add_16x8(const tran_low_t *input, uint8_t *dest,
int stride, int eob, TX_TYPE tx_type) {
(void) eob;
void vp10_inv_txfm_add_16x8(const tran_low_t *input, uint8_t *dest, int stride,
int eob, TX_TYPE tx_type) {
(void)eob;
vp10_iht16x8_128_add(input, dest, stride, tx_type);
}
void vp10_inv_txfm_add_16x32(const tran_low_t *input, uint8_t *dest,
int stride, int eob, TX_TYPE tx_type) {
(void) eob;
void vp10_inv_txfm_add_16x32(const tran_low_t *input, uint8_t *dest, int stride,
int eob, TX_TYPE tx_type) {
(void)eob;
vp10_iht16x32_512_add(input, dest, stride, tx_type);
}
void vp10_inv_txfm_add_32x16(const tran_low_t *input, uint8_t *dest,
int stride, int eob, TX_TYPE tx_type) {
(void) eob;
void vp10_inv_txfm_add_32x16(const tran_low_t *input, uint8_t *dest, int stride,
int eob, TX_TYPE tx_type) {
(void)eob;
vp10_iht32x16_512_add(input, dest, stride, tx_type);
}
#endif // CONFIG_EXT_TX
@@ -1364,8 +1364,8 @@ void vp10_highbd_iht4x8_32_add_c(const tran_low_t *input, uint8_t *dest8,
for (i = 0; i < n2; ++i) {
HIGH_IHT_4x8[tx_type].rows(input, outtmp, bd);
for (j = 0; j < n; ++j) {
out[j][i] = HIGHBD_WRAPLOW(
highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
out[j][i] =
HIGHBD_WRAPLOW(highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
}
input += n;
}
@@ -1422,10 +1422,10 @@ void vp10_highbd_iht8x4_32_add_c(const tran_low_t *input, uint8_t *dest8,
for (i = 0; i < n; ++i) {
HIGH_IHT_8x4[tx_type].rows(input, outtmp, bd);
for (j = 0; j < n2; ++j) {
out[j][i] = HIGHBD_WRAPLOW(
highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
out[j][i] =
HIGHBD_WRAPLOW(highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
}
input += n2;
input += n2;
}
// inverse transform column vectors
@@ -1449,22 +1449,22 @@ void vp10_highbd_iht8x4_32_add_c(const tran_low_t *input, uint8_t *dest8,
void vp10_highbd_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest8,
int stride, int tx_type, int bd) {
static const highbd_transform_2d HIGH_IHT_8x16[] = {
{ vpx_highbd_idct16_c, vpx_highbd_idct8_c }, // DCT_DCT
{ vpx_highbd_iadst16_c, vpx_highbd_idct8_c }, // ADST_DCT
{ vpx_highbd_idct16_c, vpx_highbd_iadst8_c }, // DCT_ADST
{ vpx_highbd_idct16_c, vpx_highbd_idct8_c }, // DCT_DCT
{ vpx_highbd_iadst16_c, vpx_highbd_idct8_c }, // ADST_DCT
{ vpx_highbd_idct16_c, vpx_highbd_iadst8_c }, // DCT_ADST
{ vpx_highbd_iadst16_c, vpx_highbd_iadst8_c }, // ADST_ADST
{ vpx_highbd_iadst16_c, vpx_highbd_idct8_c }, // FLIPADST_DCT
{ vpx_highbd_idct16_c, vpx_highbd_iadst8_c }, // DCT_FLIPADST
{ vpx_highbd_iadst16_c, vpx_highbd_idct8_c }, // FLIPADST_DCT
{ vpx_highbd_idct16_c, vpx_highbd_iadst8_c }, // DCT_FLIPADST
{ vpx_highbd_iadst16_c, vpx_highbd_iadst8_c }, // FLIPADST_FLIPADST
{ vpx_highbd_iadst16_c, vpx_highbd_iadst8_c }, // ADST_FLIPADST
{ vpx_highbd_iadst16_c, vpx_highbd_iadst8_c }, // FLIPADST_ADST
{ highbd_iidtx16_c, highbd_iidtx8_c }, // IDTX
{ vpx_highbd_idct16_c, highbd_iidtx8_c }, // V_DCT
{ highbd_iidtx16_c, vpx_highbd_idct8_c }, // H_DCT
{ vpx_highbd_iadst16_c, highbd_iidtx8_c }, // V_ADST
{ highbd_iidtx16_c, vpx_highbd_iadst8_c }, // H_ADST
{ vpx_highbd_iadst16_c, highbd_iidtx8_c }, // V_FLIPADST
{ highbd_iidtx16_c, vpx_highbd_iadst8_c }, // H_FLIPADST
{ highbd_iidtx16_c, highbd_iidtx8_c }, // IDTX
{ vpx_highbd_idct16_c, highbd_iidtx8_c }, // V_DCT
{ highbd_iidtx16_c, vpx_highbd_idct8_c }, // H_DCT
{ vpx_highbd_iadst16_c, highbd_iidtx8_c }, // V_ADST
{ highbd_iidtx16_c, vpx_highbd_iadst8_c }, // H_ADST
{ vpx_highbd_iadst16_c, highbd_iidtx8_c }, // V_FLIPADST
{ highbd_iidtx16_c, vpx_highbd_iadst8_c }, // H_FLIPADST
};
const int n = 8;
const int n2 = 16;
@@ -1480,9 +1480,9 @@ void vp10_highbd_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest8,
for (i = 0; i < n2; ++i) {
HIGH_IHT_8x16[tx_type].rows(input, outtmp, bd);
for (j = 0; j < n; ++j)
out[j][i] = HIGHBD_WRAPLOW(
highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n;
out[j][i] =
HIGHBD_WRAPLOW(highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n;
}
// inverse transform column vectors
@@ -1497,8 +1497,8 @@ void vp10_highbd_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest8,
for (j = 0; j < n; ++j) {
int d = i * stride + j;
int s = j * outstride + i;
dest[d] = highbd_clip_pixel_add(dest[d],
ROUND_POWER_OF_TWO(outp[s], 6), bd);
dest[d] =
highbd_clip_pixel_add(dest[d], ROUND_POWER_OF_TWO(outp[s], 6), bd);
}
}
}
@@ -1506,22 +1506,22 @@ void vp10_highbd_iht8x16_128_add_c(const tran_low_t *input, uint8_t *dest8,
void vp10_highbd_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest8,
int stride, int tx_type, int bd) {
static const highbd_transform_2d HIGH_IHT_16x8[] = {
{ vpx_highbd_idct8_c, vpx_highbd_idct16_c }, // DCT_DCT
{ vpx_highbd_iadst8_c, vpx_highbd_idct16_c }, // ADST_DCT
{ vpx_highbd_idct8_c, vpx_highbd_iadst16_c }, // DCT_ADST
{ vpx_highbd_idct8_c, vpx_highbd_idct16_c }, // DCT_DCT
{ vpx_highbd_iadst8_c, vpx_highbd_idct16_c }, // ADST_DCT
{ vpx_highbd_idct8_c, vpx_highbd_iadst16_c }, // DCT_ADST
{ vpx_highbd_iadst8_c, vpx_highbd_iadst16_c }, // ADST_ADST
{ vpx_highbd_iadst8_c, vpx_highbd_idct16_c }, // FLIPADST_DCT
{ vpx_highbd_idct8_c, vpx_highbd_iadst16_c }, // DCT_FLIPADST
{ vpx_highbd_iadst8_c, vpx_highbd_idct16_c }, // FLIPADST_DCT
{ vpx_highbd_idct8_c, vpx_highbd_iadst16_c }, // DCT_FLIPADST
{ vpx_highbd_iadst8_c, vpx_highbd_iadst16_c }, // FLIPADST_FLIPADST
{ vpx_highbd_iadst8_c, vpx_highbd_iadst16_c }, // ADST_FLIPADST
{ vpx_highbd_iadst8_c, vpx_highbd_iadst16_c }, // FLIPADST_ADST
{ highbd_iidtx8_c, highbd_iidtx16_c }, // IDTX
{ vpx_highbd_idct8_c, highbd_iidtx16_c }, // V_DCT
{ highbd_iidtx8_c, vpx_highbd_idct16_c }, // H_DCT
{ vpx_highbd_iadst8_c, highbd_iidtx16_c }, // V_ADST
{ highbd_iidtx8_c, vpx_highbd_iadst16_c }, // H_ADST
{ vpx_highbd_iadst8_c, highbd_iidtx16_c }, // V_FLIPADST
{ highbd_iidtx8_c, vpx_highbd_iadst16_c }, // H_FLIPADST
{ highbd_iidtx8_c, highbd_iidtx16_c }, // IDTX
{ vpx_highbd_idct8_c, highbd_iidtx16_c }, // V_DCT
{ highbd_iidtx8_c, vpx_highbd_idct16_c }, // H_DCT
{ vpx_highbd_iadst8_c, highbd_iidtx16_c }, // V_ADST
{ highbd_iidtx8_c, vpx_highbd_iadst16_c }, // H_ADST
{ vpx_highbd_iadst8_c, highbd_iidtx16_c }, // V_FLIPADST
{ highbd_iidtx8_c, vpx_highbd_iadst16_c }, // H_FLIPADST
};
const int n = 8;
const int n2 = 16;
@@ -1537,9 +1537,9 @@ void vp10_highbd_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest8,
for (i = 0; i < n; ++i) {
HIGH_IHT_16x8[tx_type].rows(input, outtmp, bd);
for (j = 0; j < n2; ++j)
out[j][i] = HIGHBD_WRAPLOW(
highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n2;
out[j][i] =
HIGHBD_WRAPLOW(highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n2;
}
// inverse transform column vectors
@@ -1554,31 +1554,31 @@ void vp10_highbd_iht16x8_128_add_c(const tran_low_t *input, uint8_t *dest8,
for (j = 0; j < n2; ++j) {
int d = i * stride + j;
int s = j * outstride + i;
dest[d] = highbd_clip_pixel_add(dest[d],
ROUND_POWER_OF_TWO(outp[s], 6), bd);
dest[d] =
highbd_clip_pixel_add(dest[d], ROUND_POWER_OF_TWO(outp[s], 6), bd);
}
}
}
void vp10_highbd_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest8,
int stride, int tx_type, int bd) {
int stride, int tx_type, int bd) {
static const highbd_transform_2d HIGH_IHT_16x32[] = {
{ vpx_highbd_idct32_c, vpx_highbd_idct16_c }, // DCT_DCT
{ highbd_ihalfright32_c, vpx_highbd_idct16_c }, // ADST_DCT
{ vpx_highbd_idct32_c, vpx_highbd_iadst16_c }, // DCT_ADST
{ vpx_highbd_idct32_c, vpx_highbd_idct16_c }, // DCT_DCT
{ highbd_ihalfright32_c, vpx_highbd_idct16_c }, // ADST_DCT
{ vpx_highbd_idct32_c, vpx_highbd_iadst16_c }, // DCT_ADST
{ highbd_ihalfright32_c, vpx_highbd_iadst16_c }, // ADST_ADST
{ highbd_ihalfright32_c, vpx_highbd_idct16_c }, // FLIPADST_DCT
{ vpx_highbd_idct32_c, vpx_highbd_iadst16_c }, // DCT_FLIPADST
{ highbd_ihalfright32_c, vpx_highbd_idct16_c }, // FLIPADST_DCT
{ vpx_highbd_idct32_c, vpx_highbd_iadst16_c }, // DCT_FLIPADST
{ highbd_ihalfright32_c, vpx_highbd_iadst16_c }, // FLIPADST_FLIPADST
{ highbd_ihalfright32_c, vpx_highbd_iadst16_c }, // ADST_FLIPADST
{ highbd_ihalfright32_c, vpx_highbd_iadst16_c }, // FLIPADST_ADST
{ highbd_iidtx32_c, highbd_iidtx16_c }, // IDTX
{ vpx_highbd_idct32_c, highbd_iidtx16_c }, // V_DCT
{ highbd_iidtx32_c, vpx_highbd_idct16_c }, // H_DCT
{ highbd_ihalfright32_c, highbd_iidtx16_c }, // V_ADST
{ highbd_iidtx32_c, vpx_highbd_iadst16_c }, // H_ADST
{ highbd_ihalfright32_c, highbd_iidtx16_c }, // V_FLIPADST
{ highbd_iidtx32_c, vpx_highbd_iadst16_c }, // H_FLIPADST
{ highbd_iidtx32_c, highbd_iidtx16_c }, // IDTX
{ vpx_highbd_idct32_c, highbd_iidtx16_c }, // V_DCT
{ highbd_iidtx32_c, vpx_highbd_idct16_c }, // H_DCT
{ highbd_ihalfright32_c, highbd_iidtx16_c }, // V_ADST
{ highbd_iidtx32_c, vpx_highbd_iadst16_c }, // H_ADST
{ highbd_ihalfright32_c, highbd_iidtx16_c }, // V_FLIPADST
{ highbd_iidtx32_c, vpx_highbd_iadst16_c }, // H_FLIPADST
};
const int n = 16;
const int n2 = 32;
@@ -1594,9 +1594,9 @@ void vp10_highbd_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest8,
for (i = 0; i < n2; ++i) {
HIGH_IHT_16x32[tx_type].rows(input, outtmp, bd);
for (j = 0; j < n; ++j)
out[j][i] = HIGHBD_WRAPLOW(
highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n;
out[j][i] =
HIGHBD_WRAPLOW(highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n;
}
// inverse transform column vectors
@@ -1611,8 +1611,8 @@ void vp10_highbd_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest8,
for (j = 0; j < n; ++j) {
int d = i * stride + j;
int s = j * outstride + i;
dest[d] = highbd_clip_pixel_add(dest[d],
ROUND_POWER_OF_TWO(outp[s], 6), bd);
dest[d] =
highbd_clip_pixel_add(dest[d], ROUND_POWER_OF_TWO(outp[s], 6), bd);
}
}
}
@@ -1620,22 +1620,22 @@ void vp10_highbd_iht16x32_512_add_c(const tran_low_t *input, uint8_t *dest8,
void vp10_highbd_iht32x16_512_add_c(const tran_low_t *input, uint8_t *dest8,
int stride, int tx_type, int bd) {
static const highbd_transform_2d HIGH_IHT_32x16[] = {
{ vpx_highbd_idct16_c, vpx_highbd_idct32_c }, // DCT_DCT
{ vpx_highbd_iadst16_c, vpx_highbd_idct32_c }, // ADST_DCT
{ vpx_highbd_idct16_c, highbd_ihalfright32_c }, // DCT_ADST
{ vpx_highbd_idct16_c, vpx_highbd_idct32_c }, // DCT_DCT
{ vpx_highbd_iadst16_c, vpx_highbd_idct32_c }, // ADST_DCT
{ vpx_highbd_idct16_c, highbd_ihalfright32_c }, // DCT_ADST
{ vpx_highbd_iadst16_c, highbd_ihalfright32_c }, // ADST_ADST
{ vpx_highbd_iadst16_c, vpx_highbd_idct32_c }, // FLIPADST_DCT
{ vpx_highbd_idct16_c, highbd_ihalfright32_c }, // DCT_FLIPADST
{ vpx_highbd_iadst16_c, vpx_highbd_idct32_c }, // FLIPADST_DCT
{ vpx_highbd_idct16_c, highbd_ihalfright32_c }, // DCT_FLIPADST
{ vpx_highbd_iadst16_c, highbd_ihalfright32_c }, // FLIPADST_FLIPADST
{ vpx_highbd_iadst16_c, highbd_ihalfright32_c }, // ADST_FLIPADST
{ vpx_highbd_iadst16_c, highbd_ihalfright32_c }, // FLIPADST_ADST
{ highbd_iidtx16_c, highbd_iidtx32_c }, // IDTX
{ vpx_highbd_idct16_c, highbd_iidtx32_c }, // V_DCT
{ highbd_iidtx16_c, vpx_highbd_idct32_c }, // H_DCT
{ vpx_highbd_iadst16_c, highbd_iidtx32_c }, // V_ADST
{ highbd_iidtx16_c, highbd_ihalfright32_c }, // H_ADST
{ vpx_highbd_iadst16_c, highbd_iidtx32_c }, // V_FLIPADST
{ highbd_iidtx16_c, highbd_ihalfright32_c }, // H_FLIPADST
{ highbd_iidtx16_c, highbd_iidtx32_c }, // IDTX
{ vpx_highbd_idct16_c, highbd_iidtx32_c }, // V_DCT
{ highbd_iidtx16_c, vpx_highbd_idct32_c }, // H_DCT
{ vpx_highbd_iadst16_c, highbd_iidtx32_c }, // V_ADST
{ highbd_iidtx16_c, highbd_ihalfright32_c }, // H_ADST
{ vpx_highbd_iadst16_c, highbd_iidtx32_c }, // V_FLIPADST
{ highbd_iidtx16_c, highbd_ihalfright32_c }, // H_FLIPADST
};
const int n = 16;
const int n2 = 32;
@@ -1651,9 +1651,9 @@ void vp10_highbd_iht32x16_512_add_c(const tran_low_t *input, uint8_t *dest8,
for (i = 0; i < n; ++i) {
HIGH_IHT_32x16[tx_type].rows(input, outtmp, bd);
for (j = 0; j < n2; ++j)
out[j][i] = HIGHBD_WRAPLOW(
highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n2;
out[j][i] =
HIGHBD_WRAPLOW(highbd_dct_const_round_shift(outtmp[j] * Sqrt2), bd);
input += n2;
}
// inverse transform column vectors
@@ -1668,8 +1668,8 @@ void vp10_highbd_iht32x16_512_add_c(const tran_low_t *input, uint8_t *dest8,
for (j = 0; j < n2; ++j) {
int d = i * stride + j;
int s = j * outstride + i;
dest[d] = highbd_clip_pixel_add(dest[d],
ROUND_POWER_OF_TWO(outp[s], 6), bd);
dest[d] =
highbd_clip_pixel_add(dest[d], ROUND_POWER_OF_TWO(outp[s], 6), bd);
}
}
}
@@ -1980,42 +1980,42 @@ void vp10_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest,
void vp10_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd,
TX_TYPE tx_type) {
(void) eob;
(void)eob;
vp10_highbd_iht4x8_32_add_c(input, dest, stride, tx_type, bd);
}
void vp10_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd,
TX_TYPE tx_type) {
(void) eob;
(void)eob;
vp10_highbd_iht8x4_32_add_c(input, dest, stride, tx_type, bd);
}
void vp10_highbd_inv_txfm_add_8x16(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd,
TX_TYPE tx_type) {
(void) eob;
(void)eob;
vp10_highbd_iht8x16_128_add_c(input, dest, stride, tx_type, bd);
}
void vp10_highbd_inv_txfm_add_16x8(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd,
TX_TYPE tx_type) {
(void) eob;
(void)eob;
vp10_highbd_iht16x8_128_add_c(input, dest, stride, tx_type, bd);
}
void vp10_highbd_inv_txfm_add_16x32(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd,
TX_TYPE tx_type) {
(void) eob;
(void)eob;
vp10_highbd_iht16x32_512_add_c(input, dest, stride, tx_type, bd);
}
void vp10_highbd_inv_txfm_add_32x16(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd,
TX_TYPE tx_type) {
(void) eob;
(void)eob;
vp10_highbd_iht32x16_512_add_c(input, dest, stride, tx_type, bd);
}
#endif // CONFIG_EXT_TX

View File

@@ -23,7 +23,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#include "config.h"
#endif
#include <stdlib.h>
@@ -31,25 +31,26 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
#include "dering.h"
const od_dering_opt_vtbl OD_DERING_VTBL_C = {
{od_filter_dering_direction_4x4_c, od_filter_dering_direction_8x8_c},
{od_filter_dering_orthogonal_4x4_c, od_filter_dering_orthogonal_8x8_c}
{ od_filter_dering_direction_4x4_c, od_filter_dering_direction_8x8_c },
{ od_filter_dering_orthogonal_4x4_c, od_filter_dering_orthogonal_8x8_c }
};
/* Generated from gen_filter_tables.c. */
const int OD_DIRECTION_OFFSETS_TABLE[8][3] = {
{-1*OD_FILT_BSTRIDE + 1, -2*OD_FILT_BSTRIDE + 2, -3*OD_FILT_BSTRIDE + 3 },
{ 0*OD_FILT_BSTRIDE + 1, -1*OD_FILT_BSTRIDE + 2, -1*OD_FILT_BSTRIDE + 3 },
{ 0*OD_FILT_BSTRIDE + 1, 0*OD_FILT_BSTRIDE + 2, 0*OD_FILT_BSTRIDE + 3 },
{ 0*OD_FILT_BSTRIDE + 1, 1*OD_FILT_BSTRIDE + 2, 1*OD_FILT_BSTRIDE + 3 },
{ 1*OD_FILT_BSTRIDE + 1, 2*OD_FILT_BSTRIDE + 2, 3*OD_FILT_BSTRIDE + 3 },
{ 1*OD_FILT_BSTRIDE + 0, 2*OD_FILT_BSTRIDE + 1, 3*OD_FILT_BSTRIDE + 1 },
{ 1*OD_FILT_BSTRIDE + 0, 2*OD_FILT_BSTRIDE + 0, 3*OD_FILT_BSTRIDE + 0 },
{ 1*OD_FILT_BSTRIDE + 0, 2*OD_FILT_BSTRIDE - 1, 3*OD_FILT_BSTRIDE - 1 },
{ -1 * OD_FILT_BSTRIDE + 1, -2 * OD_FILT_BSTRIDE + 2,
-3 * OD_FILT_BSTRIDE + 3 },
{ 0 * OD_FILT_BSTRIDE + 1, -1 * OD_FILT_BSTRIDE + 2,
-1 * OD_FILT_BSTRIDE + 3 },
{ 0 * OD_FILT_BSTRIDE + 1, 0 * OD_FILT_BSTRIDE + 2, 0 * OD_FILT_BSTRIDE + 3 },
{ 0 * OD_FILT_BSTRIDE + 1, 1 * OD_FILT_BSTRIDE + 2, 1 * OD_FILT_BSTRIDE + 3 },
{ 1 * OD_FILT_BSTRIDE + 1, 2 * OD_FILT_BSTRIDE + 2, 3 * OD_FILT_BSTRIDE + 3 },
{ 1 * OD_FILT_BSTRIDE + 0, 2 * OD_FILT_BSTRIDE + 1, 3 * OD_FILT_BSTRIDE + 1 },
{ 1 * OD_FILT_BSTRIDE + 0, 2 * OD_FILT_BSTRIDE + 0, 3 * OD_FILT_BSTRIDE + 0 },
{ 1 * OD_FILT_BSTRIDE + 0, 2 * OD_FILT_BSTRIDE - 1, 3 * OD_FILT_BSTRIDE - 1 },
};
const double OD_DERING_GAIN_TABLE[OD_DERING_LEVELS] = {
0, 0.5, 0.707, 1, 1.41, 2
};
const double OD_DERING_GAIN_TABLE[OD_DERING_LEVELS] = { 0, 0.5, 0.707,
1, 1.41, 2 };
/* Detect direction. 0 means 45-degree up-right, 2 is horizontal, and so on.
The search minimizes the weighted variance along all the lines in a
@@ -59,56 +60,59 @@ const double OD_DERING_GAIN_TABLE[OD_DERING_LEVELS] = {
that term is never computed. See Section 2, step 2, of:
http://jmvalin.ca/notes/intra_paint.pdf */
static int od_dir_find8(const od_dering_in *img, int stride, int32_t *var,
int coeff_shift) {
int coeff_shift) {
int i;
int32_t cost[8] = {0};
int partial[8][15] = {{0}};
int32_t cost[8] = { 0 };
int partial[8][15] = { { 0 } };
int32_t best_cost = 0;
int best_dir = 0;
/* Instead of dividing by n between 2 and 8, we multiply by 3*5*7*8/n.
The output is then 840 times larger, but we don't care for finding
the max. */
static const int div_table[] = {0, 840, 420, 280, 210, 168, 140, 120, 105};
static const int div_table[] = { 0, 840, 420, 280, 210, 168, 140, 120, 105 };
for (i = 0; i < 8; i++) {
int j;
for (j = 0; j < 8; j++) {
int x;
/* We subtract 128 here to reduce the maximum range of the squared
partial sums. */
x = (img[i*stride + j] >> coeff_shift) - 128;
x = (img[i * stride + j] >> coeff_shift) - 128;
partial[0][i + j] += x;
partial[1][i + j/2] += x;
partial[1][i + j / 2] += x;
partial[2][i] += x;
partial[3][3 + i - j/2] += x;
partial[3][3 + i - j / 2] += x;
partial[4][7 + i - j] += x;
partial[5][3 - i/2 + j] += x;
partial[5][3 - i / 2 + j] += x;
partial[6][j] += x;
partial[7][i/2 + j] += x;
partial[7][i / 2 + j] += x;
}
}
for (i = 0; i < 8; i++) {
cost[2] += partial[2][i]*partial[2][i];
cost[6] += partial[6][i]*partial[6][i];
cost[2] += partial[2][i] * partial[2][i];
cost[6] += partial[6][i] * partial[6][i];
}
cost[2] *= div_table[8];
cost[6] *= div_table[8];
for (i = 0; i < 7; i++) {
cost[0] += (partial[0][i]*partial[0][i]
+ partial[0][14 - i]*partial[0][14 - i])*div_table[i + 1];
cost[4] += (partial[4][i]*partial[4][i]
+ partial[4][14 - i]*partial[4][14 - i])*div_table[i + 1];
cost[0] += (partial[0][i] * partial[0][i] +
partial[0][14 - i] * partial[0][14 - i]) *
div_table[i + 1];
cost[4] += (partial[4][i] * partial[4][i] +
partial[4][14 - i] * partial[4][14 - i]) *
div_table[i + 1];
}
cost[0] += partial[0][7]*partial[0][7]*div_table[8];
cost[4] += partial[4][7]*partial[4][7]*div_table[8];
cost[0] += partial[0][7] * partial[0][7] * div_table[8];
cost[4] += partial[4][7] * partial[4][7] * div_table[8];
for (i = 1; i < 8; i += 2) {
int j;
for (j = 0; j < 4 + 1; j++) {
cost[i] += partial[i][3 + j]*partial[i][3 + j];
cost[i] += partial[i][3 + j] * partial[i][3 + j];
}
cost[i] *= div_table[8];
for (j = 0; j < 4 - 1; j++) {
cost[i] += (partial[i][j]*partial[i][j]
+ partial[i][10 - j]*partial[i][10 - j])*div_table[2*j + 2];
cost[i] += (partial[i][j] * partial[i][j] +
partial[i][10 - j] * partial[i][10 - j]) *
div_table[2 * j + 2];
}
}
for (i = 0; i < 8; i++) {
@@ -127,57 +131,62 @@ static int od_dir_find8(const od_dering_in *img, int stride, int32_t *var,
}
#define OD_DERING_VERY_LARGE (30000)
#define OD_DERING_INBUF_SIZE ((OD_BSIZE_MAX + 2*OD_FILT_BORDER)*\
(OD_BSIZE_MAX + 2*OD_FILT_BORDER))
#define OD_DERING_INBUF_SIZE \
((OD_BSIZE_MAX + 2 * OD_FILT_BORDER) * (OD_BSIZE_MAX + 2 * OD_FILT_BORDER))
/* Smooth in the direction detected. */
void od_filter_dering_direction_c(int16_t *y, int ystride, const int16_t *in,
int ln, int threshold, int dir) {
int ln, int threshold, int dir) {
int i;
int j;
int k;
static const int taps[3] = {3, 2, 2};
static const int taps[3] = { 3, 2, 2 };
for (i = 0; i < 1 << ln; i++) {
for (j = 0; j < 1 << ln; j++) {
int16_t sum;
int16_t xx;
int16_t yy;
xx = in[i*OD_FILT_BSTRIDE + j];
sum= 0;
xx = in[i * OD_FILT_BSTRIDE + j];
sum = 0;
for (k = 0; k < 3; k++) {
int16_t p0;
int16_t p1;
p0 = in[i*OD_FILT_BSTRIDE + j + OD_DIRECTION_OFFSETS_TABLE[dir][k]]
- xx;
p1 = in[i*OD_FILT_BSTRIDE + j - OD_DIRECTION_OFFSETS_TABLE[dir][k]]
- xx;
if (abs(p0) < threshold) sum += taps[k]*p0;
if (abs(p1) < threshold) sum += taps[k]*p1;
p0 = in[i * OD_FILT_BSTRIDE + j + OD_DIRECTION_OFFSETS_TABLE[dir][k]] -
xx;
p1 = in[i * OD_FILT_BSTRIDE + j - OD_DIRECTION_OFFSETS_TABLE[dir][k]] -
xx;
if (abs(p0) < threshold) sum += taps[k] * p0;
if (abs(p1) < threshold) sum += taps[k] * p1;
}
yy = xx + ((sum + 8) >> 4);
y[i*ystride + j] = yy;
y[i * ystride + j] = yy;
}
}
}
void od_filter_dering_direction_4x4_c(int16_t *y, int ystride,
const int16_t *in, int threshold, int dir) {
const int16_t *in, int threshold,
int dir) {
od_filter_dering_direction_c(y, ystride, in, 2, threshold, dir);
}
void od_filter_dering_direction_8x8_c(int16_t *y, int ystride,
const int16_t *in, int threshold, int dir) {
const int16_t *in, int threshold,
int dir) {
od_filter_dering_direction_c(y, ystride, in, 3, threshold, dir);
}
/* Smooth in the direction orthogonal to what was detected. */
void od_filter_dering_orthogonal_c(int16_t *y, int ystride, const int16_t *in,
const od_dering_in *x, int xstride, int ln, int threshold, int dir) {
const od_dering_in *x, int xstride, int ln,
int threshold, int dir) {
int i;
int j;
int offset;
if (dir > 0 && dir < 4) offset = OD_FILT_BSTRIDE;
else offset = 1;
if (dir > 0 && dir < 4)
offset = OD_FILT_BSTRIDE;
else
offset = 1;
for (i = 0; i < 1 << ln; i++) {
for (j = 0; j < 1 << ln; j++) {
int16_t athresh;
@@ -192,32 +201,33 @@ void od_filter_dering_orthogonal_c(int16_t *y, int ystride, const int16_t *in,
to be a little bit more aggressive on pure horizontal/vertical
since the ringing there tends to be directional, so it doesn't
get removed by the directional filtering. */
athresh = OD_MINI(threshold, threshold/3
+ abs(in[i*OD_FILT_BSTRIDE + j] - x[i*xstride + j]));
yy = in[i*OD_FILT_BSTRIDE + j];
athresh = OD_MINI(
threshold, threshold / 3 +
abs(in[i * OD_FILT_BSTRIDE + j] - x[i * xstride + j]));
yy = in[i * OD_FILT_BSTRIDE + j];
sum = 0;
p = in[i*OD_FILT_BSTRIDE + j + offset] - yy;
p = in[i * OD_FILT_BSTRIDE + j + offset] - yy;
if (abs(p) < athresh) sum += p;
p = in[i*OD_FILT_BSTRIDE + j - offset] - yy;
p = in[i * OD_FILT_BSTRIDE + j - offset] - yy;
if (abs(p) < athresh) sum += p;
p = in[i*OD_FILT_BSTRIDE + j + 2*offset] - yy;
p = in[i * OD_FILT_BSTRIDE + j + 2 * offset] - yy;
if (abs(p) < athresh) sum += p;
p = in[i*OD_FILT_BSTRIDE + j - 2*offset] - yy;
p = in[i * OD_FILT_BSTRIDE + j - 2 * offset] - yy;
if (abs(p) < athresh) sum += p;
y[i*ystride + j] = yy + ((3*sum + 8) >> 4);
y[i * ystride + j] = yy + ((3 * sum + 8) >> 4);
}
}
}
void od_filter_dering_orthogonal_4x4_c(int16_t *y, int ystride,
const int16_t *in, const od_dering_in *x, int xstride, int threshold,
int dir) {
const int16_t *in, const od_dering_in *x,
int xstride, int threshold, int dir) {
od_filter_dering_orthogonal_c(y, ystride, in, x, xstride, 2, threshold, dir);
}
void od_filter_dering_orthogonal_8x8_c(int16_t *y, int ystride,
const int16_t *in, const od_dering_in *x, int xstride, int threshold,
int dir) {
const int16_t *in, const od_dering_in *x,
int xstride, int threshold, int dir) {
od_filter_dering_orthogonal_c(y, ystride, in, x, xstride, 3, threshold, dir);
}
@@ -225,9 +235,8 @@ void od_filter_dering_orthogonal_8x8_c(int16_t *y, int ystride,
to [-.5, 3]. The table is computed as:
round(256*min(3, max(.5, 1.08*(sqrt(2)*2.^([0:17]+8)/256/256).^.16))) */
static const int16_t OD_THRESH_TABLE_Q8[18] = {
128, 134, 150, 168, 188, 210, 234, 262,
292, 327, 365, 408, 455, 509, 569, 635,
710, 768,
128, 134, 150, 168, 188, 210, 234, 262, 292,
327, 365, 408, 455, 509, 569, 635, 710, 768,
};
/* Compute deringing filter threshold for each 8x8 block based on the
@@ -237,8 +246,9 @@ static const int16_t OD_THRESH_TABLE_Q8[18] = {
contrast edge, or a non-directional texture, so we want to be careful not
to blur. */
static void od_compute_thresh(int thresh[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS],
int threshold, int32_t var[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS],
int nhb, int nvb) {
int threshold,
int32_t var[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS],
int nhb, int nvb) {
int bx;
int by;
for (by = 0; by < nvb; by++) {
@@ -246,16 +256,17 @@ static void od_compute_thresh(int thresh[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS],
int v1;
/* We use the variance of 8x8 blocks to adjust the threshold. */
v1 = OD_MINI(32767, var[by][bx] >> 6);
thresh[by][bx] = (threshold*OD_THRESH_TABLE_Q8[OD_ILOG(v1)] + 128) >> 8;
thresh[by][bx] = (threshold * OD_THRESH_TABLE_Q8[OD_ILOG(v1)] + 128) >> 8;
}
}
}
void od_dering(const od_dering_opt_vtbl *vtbl, int16_t *y, int ystride,
const od_dering_in *x, int xstride, int nhb, int nvb, int sbx, int sby,
int nhsb, int nvsb, int xdec, int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS],
int pli, unsigned char *bskip, int skip_stride, int threshold, int overlap,
int coeff_shift) {
const od_dering_in *x, int xstride, int nhb, int nvb, int sbx,
int sby, int nhsb, int nvsb, int xdec,
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS], int pli,
unsigned char *bskip, int skip_stride, int threshold,
int overlap, int coeff_shift) {
int i;
int j;
int bx;
@@ -266,28 +277,27 @@ void od_dering(const od_dering_opt_vtbl *vtbl, int16_t *y, int ystride,
int32_t var[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS];
int thresh[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS];
bsize = 3 - xdec;
in = inbuf + OD_FILT_BORDER*OD_FILT_BSTRIDE + OD_FILT_BORDER;
in = inbuf + OD_FILT_BORDER * OD_FILT_BSTRIDE + OD_FILT_BORDER;
/* We avoid filtering the pixels for which some of the pixels to average
are outside the frame. We could change the filter instead, but it would
add special cases for any future vectorization. */
for (i = 0; i < OD_DERING_INBUF_SIZE; i++) inbuf[i] = OD_DERING_VERY_LARGE;
for (i = -OD_FILT_BORDER*(sby != 0); i < (nvb << bsize)
+ OD_FILT_BORDER*(sby != nvsb - 1); i++) {
for (j = -OD_FILT_BORDER*(sbx != 0); j < (nhb << bsize)
+ OD_FILT_BORDER*(sbx != nhsb - 1); j++) {
in[i*OD_FILT_BSTRIDE + j] = x[i*xstride + j];
for (i = -OD_FILT_BORDER * (sby != 0);
i < (nvb << bsize) + OD_FILT_BORDER * (sby != nvsb - 1); i++) {
for (j = -OD_FILT_BORDER * (sbx != 0);
j < (nhb << bsize) + OD_FILT_BORDER * (sbx != nhsb - 1); j++) {
in[i * OD_FILT_BSTRIDE + j] = x[i * xstride + j];
}
}
if (pli == 0) {
for (by = 0; by < nvb; by++) {
for (bx = 0; bx < nhb; bx++) {
dir[by][bx] = od_dir_find8(&x[8*by*xstride + 8*bx], xstride,
&var[by][bx], coeff_shift);
dir[by][bx] = od_dir_find8(&x[8 * by * xstride + 8 * bx], xstride,
&var[by][bx], coeff_shift);
}
}
od_compute_thresh(thresh, threshold, var, nhb, nvb);
}
else {
} else {
for (by = 0; by < nvb; by++) {
for (bx = 0; bx < nhb; bx++) {
thresh[by][bx] = threshold;
@@ -297,7 +307,7 @@ void od_dering(const od_dering_opt_vtbl *vtbl, int16_t *y, int ystride,
for (by = 0; by < nvb; by++) {
for (bx = 0; bx < nhb; bx++) {
int skip;
# if defined(DAALA_ODINTRIN)
#if defined(DAALA_ODINTRIN)
int xstart;
int ystart;
int xend;
@@ -316,13 +326,13 @@ void od_dering(const od_dering_opt_vtbl *vtbl, int16_t *y, int ystride,
times. */
for (i = ystart; i < yend; i++) {
for (j = xstart; j < xend; j++) {
skip = skip && bskip[((by << 1 >> xdec) + i)*skip_stride
+ (bx << 1 >> xdec) + j];
skip = skip && bskip[((by << 1 >> xdec) + i) * skip_stride +
(bx << 1 >> xdec) + j];
}
}
#else
(void)overlap;
skip = bskip[by*skip_stride + bx];
skip = bskip[by * skip_stride + bx];
#endif
if (skip) thresh[by][bx] = 0;
}
@@ -330,23 +340,23 @@ void od_dering(const od_dering_opt_vtbl *vtbl, int16_t *y, int ystride,
for (by = 0; by < nvb; by++) {
for (bx = 0; bx < nhb; bx++) {
(vtbl->filter_dering_direction[bsize - OD_LOG_BSIZE0])(
&y[(by*ystride << bsize) + (bx << bsize)], ystride,
&in[(by*OD_FILT_BSTRIDE << bsize) + (bx << bsize)],
thresh[by][bx], dir[by][bx]);
&y[(by * ystride << bsize) + (bx << bsize)], ystride,
&in[(by * OD_FILT_BSTRIDE << bsize) + (bx << bsize)], thresh[by][bx],
dir[by][bx]);
}
}
for (i = 0; i < nvb << bsize; i++) {
for (j = 0; j < nhb << bsize; j++) {
in[i*OD_FILT_BSTRIDE + j] = y[i*ystride + j];
in[i * OD_FILT_BSTRIDE + j] = y[i * ystride + j];
}
}
for (by = 0; by < nvb; by++) {
for (bx = 0; bx < nhb; bx++) {
(vtbl->filter_dering_orthogonal[bsize - OD_LOG_BSIZE0])(
&y[(by*ystride << bsize) + (bx << bsize)], ystride,
&in[(by*OD_FILT_BSTRIDE << bsize) + (bx << bsize)],
&x[(by*xstride << bsize) + (bx << bsize)], xstride,
thresh[by][bx], dir[by][bx]);
&y[(by * ystride << bsize) + (bx << bsize)], ystride,
&in[(by * OD_FILT_BSTRIDE << bsize) + (bx << bsize)],
&x[(by * xstride << bsize) + (bx << bsize)], xstride, thresh[by][bx],
dir[by][bx]);
}
}
}

View File

@@ -23,14 +23,14 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
#if !defined(_dering_H)
# define _dering_H (1)
#define _dering_H (1)
# include "odintrin.h"
#include "odintrin.h"
# if defined(DAALA_ODINTRIN)
# include "filter.h"
#if defined(DAALA_ODINTRIN)
#include "filter.h"
typedef int16_t od_dering_in;
# endif
#endif
#define OD_DERINGSIZES (2)
@@ -40,18 +40,21 @@ typedef int16_t od_dering_in;
#define OD_DERING_LEVELS (6)
extern const double OD_DERING_GAIN_TABLE[OD_DERING_LEVELS];
#define OD_DERING_NBLOCKS (OD_BSIZE_MAX/8)
#define OD_DERING_NBLOCKS (OD_BSIZE_MAX / 8)
#define OD_FILT_BORDER (3)
#define OD_FILT_BSTRIDE (OD_BSIZE_MAX + 2*OD_FILT_BORDER)
#define OD_FILT_BSTRIDE (OD_BSIZE_MAX + 2 * OD_FILT_BORDER)
extern const int OD_DIRECTION_OFFSETS_TABLE[8][3];
typedef void (*od_filter_dering_direction_func)(int16_t *y, int ystride,
const int16_t *in, int threshold, int dir);
const int16_t *in,
int threshold, int dir);
typedef void (*od_filter_dering_orthogonal_func)(int16_t *y, int ystride,
const int16_t *in, const od_dering_in *x, int xstride, int threshold,
int dir);
const int16_t *in,
const od_dering_in *x,
int xstride, int threshold,
int dir);
struct od_dering_opt_vtbl {
od_filter_dering_direction_func filter_dering_direction[OD_DERINGSIZES];
@@ -59,28 +62,31 @@ struct od_dering_opt_vtbl {
};
typedef struct od_dering_opt_vtbl od_dering_opt_vtbl;
void od_dering(const od_dering_opt_vtbl *vtbl, int16_t *y, int ystride,
const od_dering_in *x, int xstride, int nvb, int nhb, int sbx, int sby,
int nhsb, int nvsb, int xdec, int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS],
int pli, unsigned char *bskip, int skip_stride, int threshold, int overlap,
int coeff_shift);
const od_dering_in *x, int xstride, int nvb, int nhb, int sbx,
int sby, int nhsb, int nvsb, int xdec,
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS], int pli,
unsigned char *bskip, int skip_stride, int threshold,
int overlap, int coeff_shift);
void od_filter_dering_direction_c(int16_t *y, int ystride, const int16_t *in,
int ln, int threshold, int dir);
int ln, int threshold, int dir);
void od_filter_dering_orthogonal_c(int16_t *y, int ystride, const int16_t *in,
const od_dering_in *x, int xstride, int ln, int threshold, int dir);
const od_dering_in *x, int xstride, int ln,
int threshold, int dir);
extern const od_dering_opt_vtbl OD_DERING_VTBL_C;
void od_filter_dering_direction_4x4_c(int16_t *y, int ystride,
const int16_t *in, int threshold, int dir);
const int16_t *in, int threshold,
int dir);
void od_filter_dering_direction_8x8_c(int16_t *y, int ystride,
const int16_t *in, int threshold, int dir);
const int16_t *in, int threshold,
int dir);
void od_filter_dering_orthogonal_4x4_c(int16_t *y, int ystride,
const int16_t *in, const od_dering_in *x, int xstride, int threshold,
int dir);
const int16_t *in, const od_dering_in *x,
int xstride, int threshold, int dir);
void od_filter_dering_orthogonal_8x8_c(int16_t *y, int ystride,
const int16_t *in, const od_dering_in *x, int xstride, int threshold,
int dir);
const int16_t *in, const od_dering_in *x,
int xstride, int threshold, int dir);
#endif

View File

@@ -37,346 +37,516 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
year=2005
}*/
uint32_t OD_DIVU_SMALL_CONSTS[OD_DIVU_DMAX][2] = {
{0xFFFFFFFF, 0xFFFFFFFF}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xAAAAAAAB, 0},
{0xFFFFFFFF, 0xFFFFFFFF}, {0xCCCCCCCD, 0}, {0xAAAAAAAB, 0},
{0x92492492, 0x92492492}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xE38E38E4, 0},
{0xCCCCCCCD, 0}, {0xBA2E8BA3, 0}, {0xAAAAAAAB, 0},
{0x9D89D89E, 0}, {0x92492492, 0x92492492}, {0x88888889, 0},
{0xFFFFFFFF, 0xFFFFFFFF}, {0xF0F0F0F1, 0}, {0xE38E38E4, 0},
{0xD79435E5, 0xD79435E5}, {0xCCCCCCCD, 0}, {0xC30C30C3, 0xC30C30C3},
{0xBA2E8BA3, 0}, {0xB21642C9, 0}, {0xAAAAAAAB, 0},
{0xA3D70A3E, 0}, {0x9D89D89E, 0}, {0x97B425ED, 0x97B425ED},
{0x92492492, 0x92492492}, {0x8D3DCB09, 0}, {0x88888889, 0},
{0x84210842, 0x84210842}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xF83E0F84, 0},
{0xF0F0F0F1, 0}, {0xEA0EA0EA, 0xEA0EA0EA}, {0xE38E38E4, 0},
{0xDD67C8A6, 0xDD67C8A6}, {0xD79435E5, 0xD79435E5}, {0xD20D20D2, 0xD20D20D2},
{0xCCCCCCCD, 0}, {0xC7CE0C7D, 0}, {0xC30C30C3, 0xC30C30C3},
{0xBE82FA0C, 0}, {0xBA2E8BA3, 0}, {0xB60B60B6, 0xB60B60B6},
{0xB21642C9, 0}, {0xAE4C415D, 0}, {0xAAAAAAAB, 0},
{0xA72F053A, 0}, {0xA3D70A3E, 0}, {0xA0A0A0A1, 0},
{0x9D89D89E, 0}, {0x9A90E7D9, 0x9A90E7D9}, {0x97B425ED, 0x97B425ED},
{0x94F2094F, 0x94F2094F}, {0x92492492, 0x92492492}, {0x8FB823EE, 0x8FB823EE},
{0x8D3DCB09, 0}, {0x8AD8F2FC, 0}, {0x88888889, 0},
{0x864B8A7E, 0}, {0x84210842, 0x84210842}, {0x82082082, 0x82082082},
{0xFFFFFFFF, 0xFFFFFFFF}, {0xFC0FC0FD, 0}, {0xF83E0F84, 0},
{0xF4898D60, 0}, {0xF0F0F0F1, 0}, {0xED7303B6, 0},
{0xEA0EA0EA, 0xEA0EA0EA}, {0xE6C2B449, 0}, {0xE38E38E4, 0},
{0xE070381C, 0xE070381C}, {0xDD67C8A6, 0xDD67C8A6}, {0xDA740DA8, 0},
{0xD79435E5, 0xD79435E5}, {0xD4C77B04, 0}, {0xD20D20D2, 0xD20D20D2},
{0xCF6474A9, 0}, {0xCCCCCCCD, 0}, {0xCA4587E7, 0},
{0xC7CE0C7D, 0}, {0xC565C87C, 0}, {0xC30C30C3, 0xC30C30C3},
{0xC0C0C0C1, 0}, {0xBE82FA0C, 0}, {0xBC52640C, 0},
{0xBA2E8BA3, 0}, {0xB81702E1, 0}, {0xB60B60B6, 0xB60B60B6},
{0xB40B40B4, 0xB40B40B4}, {0xB21642C9, 0}, {0xB02C0B03, 0},
{0xAE4C415D, 0}, {0xAC769184, 0xAC769184}, {0xAAAAAAAB, 0},
{0xA8E83F57, 0xA8E83F57}, {0xA72F053A, 0}, {0xA57EB503, 0},
{0xA3D70A3E, 0}, {0xA237C32B, 0xA237C32B}, {0xA0A0A0A1, 0},
{0x9F1165E7, 0x9F1165E7}, {0x9D89D89E, 0}, {0x9C09C09C, 0x9C09C09C},
{0x9A90E7D9, 0x9A90E7D9}, {0x991F1A51, 0x991F1A51}, {0x97B425ED, 0x97B425ED},
{0x964FDA6C, 0x964FDA6C}, {0x94F2094F, 0x94F2094F}, {0x939A85C4, 0x939A85C4},
{0x92492492, 0x92492492}, {0x90FDBC09, 0x90FDBC09}, {0x8FB823EE, 0x8FB823EE},
{0x8E78356D, 0x8E78356D}, {0x8D3DCB09, 0}, {0x8C08C08C, 0x8C08C08C},
{0x8AD8F2FC, 0}, {0x89AE408A, 0}, {0x88888889, 0},
{0x8767AB5F, 0x8767AB5F}, {0x864B8A7E, 0}, {0x85340853, 0x85340853},
{0x84210842, 0x84210842}, {0x83126E98, 0}, {0x82082082, 0x82082082},
{0x81020408, 0x81020408}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFE03F810, 0},
{0xFC0FC0FD, 0}, {0xFA232CF3, 0}, {0xF83E0F84, 0},
{0xF6603D99, 0}, {0xF4898D60, 0}, {0xF2B9D649, 0},
{0xF0F0F0F1, 0}, {0xEF2EB720, 0}, {0xED7303B6, 0},
{0xEBBDB2A6, 0}, {0xEA0EA0EA, 0xEA0EA0EA}, {0xE865AC7C, 0},
{0xE6C2B449, 0}, {0xE525982B, 0}, {0xE38E38E4, 0},
{0xE1FC780F, 0}, {0xE070381C, 0xE070381C}, {0xDEE95C4D, 0},
{0xDD67C8A6, 0xDD67C8A6}, {0xDBEB61EF, 0}, {0xDA740DA8, 0},
{0xD901B204, 0}, {0xD79435E5, 0xD79435E5}, {0xD62B80D7, 0},
{0xD4C77B04, 0}, {0xD3680D37, 0}, {0xD20D20D2, 0xD20D20D2},
{0xD0B69FCC, 0}, {0xCF6474A9, 0}, {0xCE168A77, 0xCE168A77},
{0xCCCCCCCD, 0}, {0xCB8727C1, 0}, {0xCA4587E7, 0},
{0xC907DA4F, 0}, {0xC7CE0C7D, 0}, {0xC6980C6A, 0},
{0xC565C87C, 0}, {0xC4372F86, 0}, {0xC30C30C3, 0xC30C30C3},
{0xC1E4BBD6, 0}, {0xC0C0C0C1, 0}, {0xBFA02FE8, 0xBFA02FE8},
{0xBE82FA0C, 0}, {0xBD691047, 0xBD691047}, {0xBC52640C, 0},
{0xBB3EE722, 0}, {0xBA2E8BA3, 0}, {0xB92143FA, 0xB92143FA},
{0xB81702E1, 0}, {0xB70FBB5A, 0xB70FBB5A}, {0xB60B60B6, 0xB60B60B6},
{0xB509E68B, 0}, {0xB40B40B4, 0xB40B40B4}, {0xB30F6353, 0},
{0xB21642C9, 0}, {0xB11FD3B8, 0xB11FD3B8}, {0xB02C0B03, 0},
{0xAF3ADDC7, 0}, {0xAE4C415D, 0}, {0xAD602B58, 0xAD602B58},
{0xAC769184, 0xAC769184}, {0xAB8F69E3, 0}, {0xAAAAAAAB, 0},
{0xA9C84A48, 0}, {0xA8E83F57, 0xA8E83F57}, {0xA80A80A8, 0xA80A80A8},
{0xA72F053A, 0}, {0xA655C439, 0xA655C439}, {0xA57EB503, 0},
{0xA4A9CF1E, 0}, {0xA3D70A3E, 0}, {0xA3065E40, 0},
{0xA237C32B, 0xA237C32B}, {0xA16B312F, 0}, {0xA0A0A0A1, 0},
{0x9FD809FE, 0}, {0x9F1165E7, 0x9F1165E7}, {0x9E4CAD24, 0},
{0x9D89D89E, 0}, {0x9CC8E161, 0}, {0x9C09C09C, 0x9C09C09C},
{0x9B4C6F9F, 0}, {0x9A90E7D9, 0x9A90E7D9}, {0x99D722DB, 0},
{0x991F1A51, 0x991F1A51}, {0x9868C80A, 0}, {0x97B425ED, 0x97B425ED},
{0x97012E02, 0x97012E02}, {0x964FDA6C, 0x964FDA6C}, {0x95A02568, 0x95A02568},
{0x94F2094F, 0x94F2094F}, {0x94458094, 0x94458094}, {0x939A85C4, 0x939A85C4},
{0x92F11384, 0x92F11384}, {0x92492492, 0x92492492}, {0x91A2B3C5, 0},
{0x90FDBC09, 0x90FDBC09}, {0x905A3863, 0x905A3863}, {0x8FB823EE, 0x8FB823EE},
{0x8F1779DA, 0}, {0x8E78356D, 0x8E78356D}, {0x8DDA5202, 0x8DDA5202},
{0x8D3DCB09, 0}, {0x8CA29C04, 0x8CA29C04}, {0x8C08C08C, 0x8C08C08C},
{0x8B70344A, 0x8B70344A}, {0x8AD8F2FC, 0}, {0x8A42F870, 0x8A42F870},
{0x89AE408A, 0}, {0x891AC73B, 0}, {0x88888889, 0},
{0x87F78088, 0}, {0x8767AB5F, 0x8767AB5F}, {0x86D90545, 0},
{0x864B8A7E, 0}, {0x85BF3761, 0x85BF3761}, {0x85340853, 0x85340853},
{0x84A9F9C8, 0x84A9F9C8}, {0x84210842, 0x84210842}, {0x83993052, 0x83993052},
{0x83126E98, 0}, {0x828CBFBF, 0}, {0x82082082, 0x82082082},
{0x81848DA9, 0}, {0x81020408, 0x81020408}, {0x80808081, 0},
{0xFFFFFFFF, 0xFFFFFFFF}, {0xFF00FF01, 0}, {0xFE03F810, 0},
{0xFD08E551, 0}, {0xFC0FC0FD, 0}, {0xFB188566, 0},
{0xFA232CF3, 0}, {0xF92FB222, 0}, {0xF83E0F84, 0},
{0xF74E3FC3, 0}, {0xF6603D99, 0}, {0xF57403D6, 0},
{0xF4898D60, 0}, {0xF3A0D52D, 0}, {0xF2B9D649, 0},
{0xF1D48BCF, 0}, {0xF0F0F0F1, 0}, {0xF00F00F0, 0xF00F00F0},
{0xEF2EB720, 0}, {0xEE500EE5, 0xEE500EE5}, {0xED7303B6, 0},
{0xEC979119, 0}, {0xEBBDB2A6, 0}, {0xEAE56404, 0},
{0xEA0EA0EA, 0xEA0EA0EA}, {0xE9396520, 0}, {0xE865AC7C, 0},
{0xE79372E3, 0}, {0xE6C2B449, 0}, {0xE5F36CB0, 0xE5F36CB0},
{0xE525982B, 0}, {0xE45932D8, 0}, {0xE38E38E4, 0},
{0xE2C4A689, 0}, {0xE1FC780F, 0}, {0xE135A9CA, 0},
{0xE070381C, 0xE070381C}, {0xDFAC1F75, 0}, {0xDEE95C4D, 0},
{0xDE27EB2D, 0}, {0xDD67C8A6, 0xDD67C8A6}, {0xDCA8F159, 0},
{0xDBEB61EF, 0}, {0xDB2F171E, 0}, {0xDA740DA8, 0},
{0xD9BA4257, 0}, {0xD901B204, 0}, {0xD84A598F, 0},
{0xD79435E5, 0xD79435E5}, {0xD6DF43FD, 0}, {0xD62B80D7, 0},
{0xD578E97D, 0}, {0xD4C77B04, 0}, {0xD417328A, 0},
{0xD3680D37, 0}, {0xD2BA083C, 0}, {0xD20D20D2, 0xD20D20D2},
{0xD161543E, 0xD161543E}, {0xD0B69FCC, 0}, {0xD00D00D0, 0xD00D00D0},
{0xCF6474A9, 0}, {0xCEBCF8BC, 0}, {0xCE168A77, 0xCE168A77},
{0xCD712753, 0}, {0xCCCCCCCD, 0}, {0xCC29786D, 0},
{0xCB8727C1, 0}, {0xCAE5D85F, 0xCAE5D85F}, {0xCA4587E7, 0},
{0xC9A633FD, 0}, {0xC907DA4F, 0}, {0xC86A7890, 0xC86A7890},
{0xC7CE0C7D, 0}, {0xC73293D8, 0}, {0xC6980C6A, 0},
{0xC5FE7403, 0xC5FE7403}, {0xC565C87C, 0}, {0xC4CE07B0, 0xC4CE07B0},
{0xC4372F86, 0}, {0xC3A13DE6, 0xC3A13DE6}, {0xC30C30C3, 0xC30C30C3},
{0xC2780614, 0}, {0xC1E4BBD6, 0}, {0xC152500C, 0xC152500C},
{0xC0C0C0C1, 0}, {0xC0300C03, 0xC0300C03}, {0xBFA02FE8, 0xBFA02FE8},
{0xBF112A8B, 0}, {0xBE82FA0C, 0}, {0xBDF59C92, 0},
{0xBD691047, 0xBD691047}, {0xBCDD535E, 0}, {0xBC52640C, 0},
{0xBBC8408D, 0}, {0xBB3EE722, 0}, {0xBAB65610, 0xBAB65610},
{0xBA2E8BA3, 0}, {0xB9A7862A, 0xB9A7862A}, {0xB92143FA, 0xB92143FA},
{0xB89BC36D, 0}, {0xB81702E1, 0}, {0xB79300B8, 0},
{0xB70FBB5A, 0xB70FBB5A}, {0xB68D3134, 0xB68D3134}, {0xB60B60B6, 0xB60B60B6},
{0xB58A4855, 0xB58A4855}, {0xB509E68B, 0}, {0xB48A39D4, 0xB48A39D4},
{0xB40B40B4, 0xB40B40B4}, {0xB38CF9B0, 0xB38CF9B0}, {0xB30F6353, 0},
{0xB2927C2A, 0}, {0xB21642C9, 0}, {0xB19AB5C5, 0},
{0xB11FD3B8, 0xB11FD3B8}, {0xB0A59B42, 0}, {0xB02C0B03, 0},
{0xAFB321A1, 0xAFB321A1}, {0xAF3ADDC7, 0}, {0xAEC33E20, 0},
{0xAE4C415D, 0}, {0xADD5E632, 0xADD5E632}, {0xAD602B58, 0xAD602B58},
{0xACEB0F89, 0xACEB0F89}, {0xAC769184, 0xAC769184}, {0xAC02B00B, 0},
{0xAB8F69E3, 0}, {0xAB1CBDD4, 0}, {0xAAAAAAAB, 0},
{0xAA392F36, 0}, {0xA9C84A48, 0}, {0xA957FAB5, 0xA957FAB5},
{0xA8E83F57, 0xA8E83F57}, {0xA8791709, 0}, {0xA80A80A8, 0xA80A80A8},
{0xA79C7B17, 0}, {0xA72F053A, 0}, {0xA6C21DF7, 0},
{0xA655C439, 0xA655C439}, {0xA5E9F6ED, 0xA5E9F6ED}, {0xA57EB503, 0},
{0xA513FD6C, 0}, {0xA4A9CF1E, 0}, {0xA4402910, 0xA4402910},
{0xA3D70A3E, 0}, {0xA36E71A3, 0}, {0xA3065E40, 0},
{0xA29ECF16, 0xA29ECF16}, {0xA237C32B, 0xA237C32B}, {0xA1D13986, 0},
{0xA16B312F, 0}, {0xA105A933, 0}, {0xA0A0A0A1, 0},
{0xA03C1689, 0}, {0x9FD809FE, 0}, {0x9F747A15, 0x9F747A15},
{0x9F1165E7, 0x9F1165E7}, {0x9EAECC8D, 0x9EAECC8D}, {0x9E4CAD24, 0},
{0x9DEB06C9, 0x9DEB06C9}, {0x9D89D89E, 0}, {0x9D2921C4, 0},
{0x9CC8E161, 0}, {0x9C69169B, 0x9C69169B}, {0x9C09C09C, 0x9C09C09C},
{0x9BAADE8E, 0x9BAADE8E}, {0x9B4C6F9F, 0}, {0x9AEE72FD, 0},
{0x9A90E7D9, 0x9A90E7D9}, {0x9A33CD67, 0x9A33CD67}, {0x99D722DB, 0},
{0x997AE76B, 0x997AE76B}, {0x991F1A51, 0x991F1A51}, {0x98C3BAC7, 0x98C3BAC7},
{0x9868C80A, 0}, {0x980E4156, 0x980E4156}, {0x97B425ED, 0x97B425ED},
{0x975A7510, 0}, {0x97012E02, 0x97012E02}, {0x96A8500A, 0},
{0x964FDA6C, 0x964FDA6C}, {0x95F7CC73, 0}, {0x95A02568, 0x95A02568},
{0x9548E498, 0}, {0x94F2094F, 0x94F2094F}, {0x949B92DE, 0},
{0x94458094, 0x94458094}, {0x93EFD1C5, 0x93EFD1C5}, {0x939A85C4, 0x939A85C4},
{0x93459BE7, 0}, {0x92F11384, 0x92F11384}, {0x929CEBF5, 0},
{0x92492492, 0x92492492}, {0x91F5BCB9, 0}, {0x91A2B3C5, 0},
{0x91500915, 0x91500915}, {0x90FDBC09, 0x90FDBC09}, {0x90ABCC02, 0x90ABCC02},
{0x905A3863, 0x905A3863}, {0x90090090, 0x90090090}, {0x8FB823EE, 0x8FB823EE},
{0x8F67A1E4, 0}, {0x8F1779DA, 0}, {0x8EC7AB3A, 0},
{0x8E78356D, 0x8E78356D}, {0x8E2917E1, 0}, {0x8DDA5202, 0x8DDA5202},
{0x8D8BE340, 0}, {0x8D3DCB09, 0}, {0x8CF008CF, 0x8CF008CF},
{0x8CA29C04, 0x8CA29C04}, {0x8C55841D, 0}, {0x8C08C08C, 0x8C08C08C},
{0x8BBC50C9, 0}, {0x8B70344A, 0x8B70344A}, {0x8B246A88, 0},
{0x8AD8F2FC, 0}, {0x8A8DCD20, 0}, {0x8A42F870, 0x8A42F870},
{0x89F8746A, 0}, {0x89AE408A, 0}, {0x89645C4F, 0x89645C4F},
{0x891AC73B, 0}, {0x88D180CD, 0x88D180CD}, {0x88888889, 0},
{0x883FDDF0, 0x883FDDF0}, {0x87F78088, 0}, {0x87AF6FD6, 0},
{0x8767AB5F, 0x8767AB5F}, {0x872032AC, 0x872032AC}, {0x86D90545, 0},
{0x869222B2, 0}, {0x864B8A7E, 0}, {0x86053C34, 0x86053C34},
{0x85BF3761, 0x85BF3761}, {0x85797B91, 0x85797B91}, {0x85340853, 0x85340853},
{0x84EEDD36, 0}, {0x84A9F9C8, 0x84A9F9C8}, {0x84655D9C, 0},
{0x84210842, 0x84210842}, {0x83DCF94E, 0}, {0x83993052, 0x83993052},
{0x8355ACE4, 0}, {0x83126E98, 0}, {0x82CF7504, 0},
{0x828CBFBF, 0}, {0x824A4E61, 0}, {0x82082082, 0x82082082},
{0x81C635BC, 0x81C635BC}, {0x81848DA9, 0}, {0x814327E4, 0},
{0x81020408, 0x81020408}, {0x80C121B3, 0}, {0x80808081, 0},
{0x80402010, 0x80402010}, {0xFFFFFFFF, 0xFFFFFFFF}, {0xFF803FE1, 0},
{0xFF00FF01, 0}, {0xFE823CA6, 0}, {0xFE03F810, 0},
{0xFD863087, 0}, {0xFD08E551, 0}, {0xFC8C15B5, 0},
{0xFC0FC0FD, 0}, {0xFB93E673, 0}, {0xFB188566, 0},
{0xFA9D9D20, 0}, {0xFA232CF3, 0}, {0xF9A9342D, 0},
{0xF92FB222, 0}, {0xF8B6A622, 0xF8B6A622}, {0xF83E0F84, 0},
{0xF7C5ED9D, 0}, {0xF74E3FC3, 0}, {0xF6D7054E, 0},
{0xF6603D99, 0}, {0xF5E9E7FD, 0}, {0xF57403D6, 0},
{0xF4FE9083, 0}, {0xF4898D60, 0}, {0xF414F9CE, 0},
{0xF3A0D52D, 0}, {0xF32D1EE0, 0}, {0xF2B9D649, 0},
{0xF246FACC, 0}, {0xF1D48BCF, 0}, {0xF16288B9, 0},
{0xF0F0F0F1, 0}, {0xF07FC3E0, 0xF07FC3E0}, {0xF00F00F0, 0xF00F00F0},
{0xEF9EA78C, 0}, {0xEF2EB720, 0}, {0xEEBF2F19, 0},
{0xEE500EE5, 0xEE500EE5}, {0xEDE155F4, 0}, {0xED7303B6, 0},
{0xED05179C, 0xED05179C}, {0xEC979119, 0}, {0xEC2A6FA0, 0xEC2A6FA0},
{0xEBBDB2A6, 0}, {0xEB5159A0, 0}, {0xEAE56404, 0},
{0xEA79D14A, 0}, {0xEA0EA0EA, 0xEA0EA0EA}, {0xE9A3D25E, 0xE9A3D25E},
{0xE9396520, 0}, {0xE8CF58AB, 0}, {0xE865AC7C, 0},
{0xE7FC600F, 0}, {0xE79372E3, 0}, {0xE72AE476, 0},
{0xE6C2B449, 0}, {0xE65AE1DC, 0}, {0xE5F36CB0, 0xE5F36CB0},
{0xE58C544A, 0}, {0xE525982B, 0}, {0xE4BF37D9, 0},
{0xE45932D8, 0}, {0xE3F388AF, 0}, {0xE38E38E4, 0},
{0xE32942FF, 0}, {0xE2C4A689, 0}, {0xE260630B, 0},
{0xE1FC780F, 0}, {0xE198E520, 0}, {0xE135A9CA, 0},
{0xE0D2C59A, 0}, {0xE070381C, 0xE070381C}, {0xE00E00E0, 0xE00E00E0},
{0xDFAC1F75, 0}, {0xDF4A9369, 0}, {0xDEE95C4D, 0},
{0xDE8879B3, 0}, {0xDE27EB2D, 0}, {0xDDC7B04D, 0},
{0xDD67C8A6, 0xDD67C8A6}, {0xDD0833CE, 0}, {0xDCA8F159, 0},
{0xDC4A00DD, 0}, {0xDBEB61EF, 0}, {0xDB8D1428, 0},
{0xDB2F171E, 0}, {0xDAD16A6B, 0}, {0xDA740DA8, 0},
{0xDA17006D, 0xDA17006D}, {0xD9BA4257, 0}, {0xD95DD300, 0},
{0xD901B204, 0}, {0xD8A5DEFF, 0}, {0xD84A598F, 0},
{0xD7EF2152, 0}, {0xD79435E5, 0xD79435E5}, {0xD73996E9, 0},
{0xD6DF43FD, 0}, {0xD6853CC1, 0}, {0xD62B80D7, 0},
{0xD5D20FDF, 0}, {0xD578E97D, 0}, {0xD5200D52, 0xD5200D52},
{0xD4C77B04, 0}, {0xD46F3235, 0}, {0xD417328A, 0},
{0xD3BF7BA9, 0}, {0xD3680D37, 0}, {0xD310E6DB, 0},
{0xD2BA083C, 0}, {0xD2637101, 0}, {0xD20D20D2, 0xD20D20D2},
{0xD1B71759, 0}, {0xD161543E, 0xD161543E}, {0xD10BD72C, 0},
{0xD0B69FCC, 0}, {0xD061ADCA, 0}, {0xD00D00D0, 0xD00D00D0},
{0xCFB8988C, 0}, {0xCF6474A9, 0}, {0xCF1094D4, 0},
{0xCEBCF8BC, 0}, {0xCE69A00D, 0}, {0xCE168A77, 0xCE168A77},
{0xCDC3B7A9, 0xCDC3B7A9}, {0xCD712753, 0}, {0xCD1ED924, 0},
{0xCCCCCCCD, 0}, {0xCC7B0200, 0}, {0xCC29786D, 0},
{0xCBD82FC7, 0}, {0xCB8727C1, 0}, {0xCB36600D, 0},
{0xCAE5D85F, 0xCAE5D85F}, {0xCA95906C, 0}, {0xCA4587E7, 0},
{0xC9F5BE86, 0}, {0xC9A633FD, 0}, {0xC956E803, 0xC956E803},
{0xC907DA4F, 0}, {0xC8B90A96, 0}, {0xC86A7890, 0xC86A7890},
{0xC81C23F5, 0xC81C23F5}, {0xC7CE0C7D, 0}, {0xC78031E0, 0xC78031E0},
{0xC73293D8, 0}, {0xC6E5321D, 0}, {0xC6980C6A, 0},
{0xC64B2278, 0xC64B2278}, {0xC5FE7403, 0xC5FE7403}, {0xC5B200C6, 0},
{0xC565C87C, 0}, {0xC519CAE0, 0xC519CAE0}, {0xC4CE07B0, 0xC4CE07B0},
{0xC4827EA8, 0xC4827EA8}, {0xC4372F86, 0}, {0xC3EC1A06, 0},
{0xC3A13DE6, 0xC3A13DE6}, {0xC3569AE6, 0}, {0xC30C30C3, 0xC30C30C3},
{0xC2C1FF3E, 0}, {0xC2780614, 0}, {0xC22E4507, 0},
{0xC1E4BBD6, 0}, {0xC19B6A42, 0}, {0xC152500C, 0xC152500C},
{0xC1096CF6, 0}, {0xC0C0C0C1, 0}, {0xC0784B2F, 0},
{0xC0300C03, 0xC0300C03}, {0xBFE80300, 0}, {0xBFA02FE8, 0xBFA02FE8},
{0xBF589280, 0}, {0xBF112A8B, 0}, {0xBEC9F7CE, 0},
{0xBE82FA0C, 0}, {0xBE3C310C, 0}, {0xBDF59C92, 0},
{0xBDAF3C64, 0}, {0xBD691047, 0xBD691047}, {0xBD231803, 0},
{0xBCDD535E, 0}, {0xBC97C21E, 0xBC97C21E}, {0xBC52640C, 0},
{0xBC0D38EE, 0xBC0D38EE}, {0xBBC8408D, 0}, {0xBB837AB1, 0},
{0xBB3EE722, 0}, {0xBAFA85A9, 0xBAFA85A9}, {0xBAB65610, 0xBAB65610},
{0xBA725820, 0xBA725820}, {0xBA2E8BA3, 0}, {0xB9EAF063, 0},
{0xB9A7862A, 0xB9A7862A}, {0xB9644CC4, 0}, {0xB92143FA, 0xB92143FA},
{0xB8DE6B9A, 0}, {0xB89BC36D, 0}, {0xB8594B41, 0},
{0xB81702E1, 0}, {0xB7D4EA19, 0xB7D4EA19}, {0xB79300B8, 0},
{0xB7514689, 0}, {0xB70FBB5A, 0xB70FBB5A}, {0xB6CE5EF9, 0xB6CE5EF9},
{0xB68D3134, 0xB68D3134}, {0xB64C31D9, 0}, {0xB60B60B6, 0xB60B60B6},
{0xB5CABD9B, 0}, {0xB58A4855, 0xB58A4855}, {0xB54A00B5, 0xB54A00B5},
{0xB509E68B, 0}, {0xB4C9F9A5, 0}, {0xB48A39D4, 0xB48A39D4},
{0xB44AA6E9, 0xB44AA6E9}, {0xB40B40B4, 0xB40B40B4}, {0xB3CC0706, 0},
{0xB38CF9B0, 0xB38CF9B0}, {0xB34E1884, 0}, {0xB30F6353, 0},
{0xB2D0D9EF, 0}, {0xB2927C2A, 0}, {0xB25449D7, 0},
{0xB21642C9, 0}, {0xB1D866D1, 0xB1D866D1}, {0xB19AB5C5, 0},
{0xB15D2F76, 0}, {0xB11FD3B8, 0xB11FD3B8}, {0xB0E2A260, 0xB0E2A260},
{0xB0A59B42, 0}, {0xB068BE31, 0}, {0xB02C0B03, 0},
{0xAFEF818C, 0}, {0xAFB321A1, 0xAFB321A1}, {0xAF76EB19, 0},
{0xAF3ADDC7, 0}, {0xAEFEF982, 0}, {0xAEC33E20, 0},
{0xAE87AB76, 0xAE87AB76}, {0xAE4C415D, 0}, {0xAE10FFA9, 0},
{0xADD5E632, 0xADD5E632}, {0xAD9AF4D0, 0}, {0xAD602B58, 0xAD602B58},
{0xAD2589A4, 0}, {0xACEB0F89, 0xACEB0F89}, {0xACB0BCE1, 0xACB0BCE1},
{0xAC769184, 0xAC769184}, {0xAC3C8D4A, 0}, {0xAC02B00B, 0},
{0xABC8F9A0, 0xABC8F9A0}, {0xAB8F69E3, 0}, {0xAB5600AC, 0},
{0xAB1CBDD4, 0}, {0xAAE3A136, 0}, {0xAAAAAAAB, 0},
{0xAA71DA0D, 0}, {0xAA392F36, 0}, {0xAA00AA01, 0},
{0xA9C84A48, 0}, {0xA9900FE6, 0}, {0xA957FAB5, 0xA957FAB5},
{0xA9200A92, 0xA9200A92}, {0xA8E83F57, 0xA8E83F57}, {0xA8B098E0, 0xA8B098E0},
{0xA8791709, 0}, {0xA841B9AD, 0}, {0xA80A80A8, 0xA80A80A8},
{0xA7D36BD8, 0}, {0xA79C7B17, 0}, {0xA765AE44, 0},
{0xA72F053A, 0}, {0xA6F87FD6, 0xA6F87FD6}, {0xA6C21DF7, 0},
{0xA68BDF79, 0}, {0xA655C439, 0xA655C439}, {0xA61FCC16, 0xA61FCC16},
{0xA5E9F6ED, 0xA5E9F6ED}, {0xA5B4449D, 0}, {0xA57EB503, 0},
{0xA54947FE, 0}, {0xA513FD6C, 0}, {0xA4DED52C, 0xA4DED52C},
{0xA4A9CF1E, 0}, {0xA474EB1F, 0xA474EB1F}, {0xA4402910, 0xA4402910},
{0xA40B88D0, 0}, {0xA3D70A3E, 0}, {0xA3A2AD39, 0xA3A2AD39},
{0xA36E71A3, 0}, {0xA33A575A, 0xA33A575A}, {0xA3065E40, 0},
{0xA2D28634, 0}, {0xA29ECF16, 0xA29ECF16}, {0xA26B38C9, 0},
{0xA237C32B, 0xA237C32B}, {0xA2046E1F, 0xA2046E1F}, {0xA1D13986, 0},
{0xA19E2540, 0}, {0xA16B312F, 0}, {0xA1385D35, 0},
{0xA105A933, 0}, {0xA0D3150C, 0}, {0xA0A0A0A1, 0},
{0xA06E4BD4, 0xA06E4BD4}, {0xA03C1689, 0}, {0xA00A00A0, 0xA00A00A0},
{0x9FD809FE, 0}, {0x9FA63284, 0}, {0x9F747A15, 0x9F747A15},
{0x9F42E095, 0x9F42E095}, {0x9F1165E7, 0x9F1165E7}, {0x9EE009EE, 0x9EE009EE},
{0x9EAECC8D, 0x9EAECC8D}, {0x9E7DADA9, 0}, {0x9E4CAD24, 0},
{0x9E1BCAE3, 0}, {0x9DEB06C9, 0x9DEB06C9}, {0x9DBA60BB, 0x9DBA60BB},
{0x9D89D89E, 0}, {0x9D596E54, 0x9D596E54}, {0x9D2921C4, 0},
{0x9CF8F2D1, 0x9CF8F2D1}, {0x9CC8E161, 0}, {0x9C98ED58, 0},
{0x9C69169B, 0x9C69169B}, {0x9C395D10, 0x9C395D10}, {0x9C09C09C, 0x9C09C09C},
{0x9BDA4124, 0x9BDA4124}, {0x9BAADE8E, 0x9BAADE8E}, {0x9B7B98C0, 0},
{0x9B4C6F9F, 0}, {0x9B1D6311, 0x9B1D6311}, {0x9AEE72FD, 0},
{0x9ABF9F48, 0x9ABF9F48}, {0x9A90E7D9, 0x9A90E7D9}, {0x9A624C97, 0},
{0x9A33CD67, 0x9A33CD67}, {0x9A056A31, 0}, {0x99D722DB, 0},
{0x99A8F74C, 0}, {0x997AE76B, 0x997AE76B}, {0x994CF320, 0x994CF320},
{0x991F1A51, 0x991F1A51}, {0x98F15CE7, 0}, {0x98C3BAC7, 0x98C3BAC7},
{0x989633DB, 0x989633DB}, {0x9868C80A, 0}, {0x983B773B, 0},
{0x980E4156, 0x980E4156}, {0x97E12644, 0x97E12644}, {0x97B425ED, 0x97B425ED},
{0x97874039, 0}, {0x975A7510, 0}, {0x972DC45B, 0},
{0x97012E02, 0x97012E02}, {0x96D4B1EF, 0}, {0x96A8500A, 0},
{0x967C083B, 0}, {0x964FDA6C, 0x964FDA6C}, {0x9623C686, 0x9623C686},
{0x95F7CC73, 0}, {0x95CBEC1B, 0}, {0x95A02568, 0x95A02568},
{0x95747844, 0}, {0x9548E498, 0}, {0x951D6A4E, 0},
{0x94F2094F, 0x94F2094F}, {0x94C6C187, 0}, {0x949B92DE, 0},
{0x94707D3F, 0}, {0x94458094, 0x94458094}, {0x941A9CC8, 0x941A9CC8},
{0x93EFD1C5, 0x93EFD1C5}, {0x93C51F76, 0}, {0x939A85C4, 0x939A85C4},
{0x9370049C, 0}, {0x93459BE7, 0}, {0x931B4B91, 0},
{0x92F11384, 0x92F11384}, {0x92C6F3AC, 0x92C6F3AC}, {0x929CEBF5, 0},
{0x9272FC48, 0x9272FC48}, {0x92492492, 0x92492492}, {0x921F64BF, 0},
{0x91F5BCB9, 0}, {0x91CC2C6C, 0x91CC2C6C}, {0x91A2B3C5, 0},
{0x917952AF, 0}, {0x91500915, 0x91500915}, {0x9126D6E5, 0},
{0x90FDBC09, 0x90FDBC09}, {0x90D4B86F, 0}, {0x90ABCC02, 0x90ABCC02},
{0x9082F6B0, 0}, {0x905A3863, 0x905A3863}, {0x9031910A, 0},
{0x90090090, 0x90090090}, {0x8FE086E3, 0}, {0x8FB823EE, 0x8FB823EE},
{0x8F8FD7A0, 0}, {0x8F67A1E4, 0}, {0x8F3F82A8, 0x8F3F82A8},
{0x8F1779DA, 0}, {0x8EEF8766, 0}, {0x8EC7AB3A, 0},
{0x8E9FE542, 0x8E9FE542}, {0x8E78356D, 0x8E78356D}, {0x8E509BA8, 0x8E509BA8},
{0x8E2917E1, 0}, {0x8E01AA05, 0}, {0x8DDA5202, 0x8DDA5202},
{0x8DB30FC6, 0x8DB30FC6}, {0x8D8BE340, 0}, {0x8D64CC5C, 0},
{0x8D3DCB09, 0}, {0x8D16DF35, 0x8D16DF35}, {0x8CF008CF, 0x8CF008CF},
{0x8CC947C5, 0}, {0x8CA29C04, 0x8CA29C04}, {0x8C7C057D, 0},
{0x8C55841D, 0}, {0x8C2F17D2, 0x8C2F17D2}, {0x8C08C08C, 0x8C08C08C},
{0x8BE27E39, 0x8BE27E39}, {0x8BBC50C9, 0}, {0x8B963829, 0x8B963829},
{0x8B70344A, 0x8B70344A}, {0x8B4A451A, 0}, {0x8B246A88, 0},
{0x8AFEA483, 0x8AFEA483}, {0x8AD8F2FC, 0}, {0x8AB355E0, 0x8AB355E0},
{0x8A8DCD20, 0}, {0x8A6858AB, 0}, {0x8A42F870, 0x8A42F870},
{0x8A1DAC60, 0x8A1DAC60}, {0x89F8746A, 0}, {0x89D3507D, 0},
{0x89AE408A, 0}, {0x89894480, 0}, {0x89645C4F, 0x89645C4F},
{0x893F87E8, 0x893F87E8}, {0x891AC73B, 0}, {0x88F61A37, 0x88F61A37},
{0x88D180CD, 0x88D180CD}, {0x88ACFAEE, 0}, {0x88888889, 0},
{0x8864298F, 0}, {0x883FDDF0, 0x883FDDF0}, {0x881BA59E, 0},
{0x87F78088, 0}, {0x87D36EA0, 0}, {0x87AF6FD6, 0},
{0x878B841B, 0}, {0x8767AB5F, 0x8767AB5F}, {0x8743E595, 0},
{0x872032AC, 0x872032AC}, {0x86FC9296, 0x86FC9296}, {0x86D90545, 0},
{0x86B58AA8, 0}, {0x869222B2, 0}, {0x866ECD53, 0x866ECD53},
{0x864B8A7E, 0}, {0x86285A23, 0x86285A23}, {0x86053C34, 0x86053C34},
{0x85E230A3, 0x85E230A3}, {0x85BF3761, 0x85BF3761}, {0x859C5060, 0x859C5060},
{0x85797B91, 0x85797B91}, {0x8556B8E7, 0x8556B8E7}, {0x85340853, 0x85340853},
{0x851169C7, 0x851169C7}, {0x84EEDD36, 0}, {0x84CC6290, 0},
{0x84A9F9C8, 0x84A9F9C8}, {0x8487A2D1, 0}, {0x84655D9C, 0},
{0x84432A1B, 0x84432A1B}, {0x84210842, 0x84210842}, {0x83FEF802, 0x83FEF802},
{0x83DCF94E, 0}, {0x83BB0C18, 0}, {0x83993052, 0x83993052},
{0x837765F0, 0x837765F0}, {0x8355ACE4, 0}, {0x83340520, 0x83340520},
{0x83126E98, 0}, {0x82F0E93D, 0x82F0E93D}, {0x82CF7504, 0},
{0x82AE11DE, 0}, {0x828CBFBF, 0}, {0x826B7E99, 0x826B7E99},
{0x824A4E61, 0}, {0x82292F08, 0}, {0x82082082, 0x82082082},
{0x81E722C2, 0x81E722C2}, {0x81C635BC, 0x81C635BC}, {0x81A55963, 0},
{0x81848DA9, 0}, {0x8163D283, 0}, {0x814327E4, 0},
{0x81228DBF, 0}, {0x81020408, 0x81020408}, {0x80E18AB3, 0},
{0x80C121B3, 0}, {0x80A0C8FB, 0x80A0C8FB}, {0x80808081, 0},
{0x80604836, 0x80604836}, {0x80402010, 0x80402010}, {0x80200802, 0x80200802},
{0xFFFFFFFF, 0xFFFFFFFF}
{ 0xFFFFFFFF, 0xFFFFFFFF }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xAAAAAAAB, 0 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xCCCCCCCD, 0 }, { 0xAAAAAAAB, 0 },
{ 0x92492492, 0x92492492 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xE38E38E4, 0 }, { 0xCCCCCCCD, 0 },
{ 0xBA2E8BA3, 0 }, { 0xAAAAAAAB, 0 },
{ 0x9D89D89E, 0 }, { 0x92492492, 0x92492492 },
{ 0x88888889, 0 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xF0F0F0F1, 0 }, { 0xE38E38E4, 0 },
{ 0xD79435E5, 0xD79435E5 }, { 0xCCCCCCCD, 0 },
{ 0xC30C30C3, 0xC30C30C3 }, { 0xBA2E8BA3, 0 },
{ 0xB21642C9, 0 }, { 0xAAAAAAAB, 0 },
{ 0xA3D70A3E, 0 }, { 0x9D89D89E, 0 },
{ 0x97B425ED, 0x97B425ED }, { 0x92492492, 0x92492492 },
{ 0x8D3DCB09, 0 }, { 0x88888889, 0 },
{ 0x84210842, 0x84210842 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xF83E0F84, 0 }, { 0xF0F0F0F1, 0 },
{ 0xEA0EA0EA, 0xEA0EA0EA }, { 0xE38E38E4, 0 },
{ 0xDD67C8A6, 0xDD67C8A6 }, { 0xD79435E5, 0xD79435E5 },
{ 0xD20D20D2, 0xD20D20D2 }, { 0xCCCCCCCD, 0 },
{ 0xC7CE0C7D, 0 }, { 0xC30C30C3, 0xC30C30C3 },
{ 0xBE82FA0C, 0 }, { 0xBA2E8BA3, 0 },
{ 0xB60B60B6, 0xB60B60B6 }, { 0xB21642C9, 0 },
{ 0xAE4C415D, 0 }, { 0xAAAAAAAB, 0 },
{ 0xA72F053A, 0 }, { 0xA3D70A3E, 0 },
{ 0xA0A0A0A1, 0 }, { 0x9D89D89E, 0 },
{ 0x9A90E7D9, 0x9A90E7D9 }, { 0x97B425ED, 0x97B425ED },
{ 0x94F2094F, 0x94F2094F }, { 0x92492492, 0x92492492 },
{ 0x8FB823EE, 0x8FB823EE }, { 0x8D3DCB09, 0 },
{ 0x8AD8F2FC, 0 }, { 0x88888889, 0 },
{ 0x864B8A7E, 0 }, { 0x84210842, 0x84210842 },
{ 0x82082082, 0x82082082 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xFC0FC0FD, 0 }, { 0xF83E0F84, 0 },
{ 0xF4898D60, 0 }, { 0xF0F0F0F1, 0 },
{ 0xED7303B6, 0 }, { 0xEA0EA0EA, 0xEA0EA0EA },
{ 0xE6C2B449, 0 }, { 0xE38E38E4, 0 },
{ 0xE070381C, 0xE070381C }, { 0xDD67C8A6, 0xDD67C8A6 },
{ 0xDA740DA8, 0 }, { 0xD79435E5, 0xD79435E5 },
{ 0xD4C77B04, 0 }, { 0xD20D20D2, 0xD20D20D2 },
{ 0xCF6474A9, 0 }, { 0xCCCCCCCD, 0 },
{ 0xCA4587E7, 0 }, { 0xC7CE0C7D, 0 },
{ 0xC565C87C, 0 }, { 0xC30C30C3, 0xC30C30C3 },
{ 0xC0C0C0C1, 0 }, { 0xBE82FA0C, 0 },
{ 0xBC52640C, 0 }, { 0xBA2E8BA3, 0 },
{ 0xB81702E1, 0 }, { 0xB60B60B6, 0xB60B60B6 },
{ 0xB40B40B4, 0xB40B40B4 }, { 0xB21642C9, 0 },
{ 0xB02C0B03, 0 }, { 0xAE4C415D, 0 },
{ 0xAC769184, 0xAC769184 }, { 0xAAAAAAAB, 0 },
{ 0xA8E83F57, 0xA8E83F57 }, { 0xA72F053A, 0 },
{ 0xA57EB503, 0 }, { 0xA3D70A3E, 0 },
{ 0xA237C32B, 0xA237C32B }, { 0xA0A0A0A1, 0 },
{ 0x9F1165E7, 0x9F1165E7 }, { 0x9D89D89E, 0 },
{ 0x9C09C09C, 0x9C09C09C }, { 0x9A90E7D9, 0x9A90E7D9 },
{ 0x991F1A51, 0x991F1A51 }, { 0x97B425ED, 0x97B425ED },
{ 0x964FDA6C, 0x964FDA6C }, { 0x94F2094F, 0x94F2094F },
{ 0x939A85C4, 0x939A85C4 }, { 0x92492492, 0x92492492 },
{ 0x90FDBC09, 0x90FDBC09 }, { 0x8FB823EE, 0x8FB823EE },
{ 0x8E78356D, 0x8E78356D }, { 0x8D3DCB09, 0 },
{ 0x8C08C08C, 0x8C08C08C }, { 0x8AD8F2FC, 0 },
{ 0x89AE408A, 0 }, { 0x88888889, 0 },
{ 0x8767AB5F, 0x8767AB5F }, { 0x864B8A7E, 0 },
{ 0x85340853, 0x85340853 }, { 0x84210842, 0x84210842 },
{ 0x83126E98, 0 }, { 0x82082082, 0x82082082 },
{ 0x81020408, 0x81020408 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xFE03F810, 0 }, { 0xFC0FC0FD, 0 },
{ 0xFA232CF3, 0 }, { 0xF83E0F84, 0 },
{ 0xF6603D99, 0 }, { 0xF4898D60, 0 },
{ 0xF2B9D649, 0 }, { 0xF0F0F0F1, 0 },
{ 0xEF2EB720, 0 }, { 0xED7303B6, 0 },
{ 0xEBBDB2A6, 0 }, { 0xEA0EA0EA, 0xEA0EA0EA },
{ 0xE865AC7C, 0 }, { 0xE6C2B449, 0 },
{ 0xE525982B, 0 }, { 0xE38E38E4, 0 },
{ 0xE1FC780F, 0 }, { 0xE070381C, 0xE070381C },
{ 0xDEE95C4D, 0 }, { 0xDD67C8A6, 0xDD67C8A6 },
{ 0xDBEB61EF, 0 }, { 0xDA740DA8, 0 },
{ 0xD901B204, 0 }, { 0xD79435E5, 0xD79435E5 },
{ 0xD62B80D7, 0 }, { 0xD4C77B04, 0 },
{ 0xD3680D37, 0 }, { 0xD20D20D2, 0xD20D20D2 },
{ 0xD0B69FCC, 0 }, { 0xCF6474A9, 0 },
{ 0xCE168A77, 0xCE168A77 }, { 0xCCCCCCCD, 0 },
{ 0xCB8727C1, 0 }, { 0xCA4587E7, 0 },
{ 0xC907DA4F, 0 }, { 0xC7CE0C7D, 0 },
{ 0xC6980C6A, 0 }, { 0xC565C87C, 0 },
{ 0xC4372F86, 0 }, { 0xC30C30C3, 0xC30C30C3 },
{ 0xC1E4BBD6, 0 }, { 0xC0C0C0C1, 0 },
{ 0xBFA02FE8, 0xBFA02FE8 }, { 0xBE82FA0C, 0 },
{ 0xBD691047, 0xBD691047 }, { 0xBC52640C, 0 },
{ 0xBB3EE722, 0 }, { 0xBA2E8BA3, 0 },
{ 0xB92143FA, 0xB92143FA }, { 0xB81702E1, 0 },
{ 0xB70FBB5A, 0xB70FBB5A }, { 0xB60B60B6, 0xB60B60B6 },
{ 0xB509E68B, 0 }, { 0xB40B40B4, 0xB40B40B4 },
{ 0xB30F6353, 0 }, { 0xB21642C9, 0 },
{ 0xB11FD3B8, 0xB11FD3B8 }, { 0xB02C0B03, 0 },
{ 0xAF3ADDC7, 0 }, { 0xAE4C415D, 0 },
{ 0xAD602B58, 0xAD602B58 }, { 0xAC769184, 0xAC769184 },
{ 0xAB8F69E3, 0 }, { 0xAAAAAAAB, 0 },
{ 0xA9C84A48, 0 }, { 0xA8E83F57, 0xA8E83F57 },
{ 0xA80A80A8, 0xA80A80A8 }, { 0xA72F053A, 0 },
{ 0xA655C439, 0xA655C439 }, { 0xA57EB503, 0 },
{ 0xA4A9CF1E, 0 }, { 0xA3D70A3E, 0 },
{ 0xA3065E40, 0 }, { 0xA237C32B, 0xA237C32B },
{ 0xA16B312F, 0 }, { 0xA0A0A0A1, 0 },
{ 0x9FD809FE, 0 }, { 0x9F1165E7, 0x9F1165E7 },
{ 0x9E4CAD24, 0 }, { 0x9D89D89E, 0 },
{ 0x9CC8E161, 0 }, { 0x9C09C09C, 0x9C09C09C },
{ 0x9B4C6F9F, 0 }, { 0x9A90E7D9, 0x9A90E7D9 },
{ 0x99D722DB, 0 }, { 0x991F1A51, 0x991F1A51 },
{ 0x9868C80A, 0 }, { 0x97B425ED, 0x97B425ED },
{ 0x97012E02, 0x97012E02 }, { 0x964FDA6C, 0x964FDA6C },
{ 0x95A02568, 0x95A02568 }, { 0x94F2094F, 0x94F2094F },
{ 0x94458094, 0x94458094 }, { 0x939A85C4, 0x939A85C4 },
{ 0x92F11384, 0x92F11384 }, { 0x92492492, 0x92492492 },
{ 0x91A2B3C5, 0 }, { 0x90FDBC09, 0x90FDBC09 },
{ 0x905A3863, 0x905A3863 }, { 0x8FB823EE, 0x8FB823EE },
{ 0x8F1779DA, 0 }, { 0x8E78356D, 0x8E78356D },
{ 0x8DDA5202, 0x8DDA5202 }, { 0x8D3DCB09, 0 },
{ 0x8CA29C04, 0x8CA29C04 }, { 0x8C08C08C, 0x8C08C08C },
{ 0x8B70344A, 0x8B70344A }, { 0x8AD8F2FC, 0 },
{ 0x8A42F870, 0x8A42F870 }, { 0x89AE408A, 0 },
{ 0x891AC73B, 0 }, { 0x88888889, 0 },
{ 0x87F78088, 0 }, { 0x8767AB5F, 0x8767AB5F },
{ 0x86D90545, 0 }, { 0x864B8A7E, 0 },
{ 0x85BF3761, 0x85BF3761 }, { 0x85340853, 0x85340853 },
{ 0x84A9F9C8, 0x84A9F9C8 }, { 0x84210842, 0x84210842 },
{ 0x83993052, 0x83993052 }, { 0x83126E98, 0 },
{ 0x828CBFBF, 0 }, { 0x82082082, 0x82082082 },
{ 0x81848DA9, 0 }, { 0x81020408, 0x81020408 },
{ 0x80808081, 0 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xFF00FF01, 0 }, { 0xFE03F810, 0 },
{ 0xFD08E551, 0 }, { 0xFC0FC0FD, 0 },
{ 0xFB188566, 0 }, { 0xFA232CF3, 0 },
{ 0xF92FB222, 0 }, { 0xF83E0F84, 0 },
{ 0xF74E3FC3, 0 }, { 0xF6603D99, 0 },
{ 0xF57403D6, 0 }, { 0xF4898D60, 0 },
{ 0xF3A0D52D, 0 }, { 0xF2B9D649, 0 },
{ 0xF1D48BCF, 0 }, { 0xF0F0F0F1, 0 },
{ 0xF00F00F0, 0xF00F00F0 }, { 0xEF2EB720, 0 },
{ 0xEE500EE5, 0xEE500EE5 }, { 0xED7303B6, 0 },
{ 0xEC979119, 0 }, { 0xEBBDB2A6, 0 },
{ 0xEAE56404, 0 }, { 0xEA0EA0EA, 0xEA0EA0EA },
{ 0xE9396520, 0 }, { 0xE865AC7C, 0 },
{ 0xE79372E3, 0 }, { 0xE6C2B449, 0 },
{ 0xE5F36CB0, 0xE5F36CB0 }, { 0xE525982B, 0 },
{ 0xE45932D8, 0 }, { 0xE38E38E4, 0 },
{ 0xE2C4A689, 0 }, { 0xE1FC780F, 0 },
{ 0xE135A9CA, 0 }, { 0xE070381C, 0xE070381C },
{ 0xDFAC1F75, 0 }, { 0xDEE95C4D, 0 },
{ 0xDE27EB2D, 0 }, { 0xDD67C8A6, 0xDD67C8A6 },
{ 0xDCA8F159, 0 }, { 0xDBEB61EF, 0 },
{ 0xDB2F171E, 0 }, { 0xDA740DA8, 0 },
{ 0xD9BA4257, 0 }, { 0xD901B204, 0 },
{ 0xD84A598F, 0 }, { 0xD79435E5, 0xD79435E5 },
{ 0xD6DF43FD, 0 }, { 0xD62B80D7, 0 },
{ 0xD578E97D, 0 }, { 0xD4C77B04, 0 },
{ 0xD417328A, 0 }, { 0xD3680D37, 0 },
{ 0xD2BA083C, 0 }, { 0xD20D20D2, 0xD20D20D2 },
{ 0xD161543E, 0xD161543E }, { 0xD0B69FCC, 0 },
{ 0xD00D00D0, 0xD00D00D0 }, { 0xCF6474A9, 0 },
{ 0xCEBCF8BC, 0 }, { 0xCE168A77, 0xCE168A77 },
{ 0xCD712753, 0 }, { 0xCCCCCCCD, 0 },
{ 0xCC29786D, 0 }, { 0xCB8727C1, 0 },
{ 0xCAE5D85F, 0xCAE5D85F }, { 0xCA4587E7, 0 },
{ 0xC9A633FD, 0 }, { 0xC907DA4F, 0 },
{ 0xC86A7890, 0xC86A7890 }, { 0xC7CE0C7D, 0 },
{ 0xC73293D8, 0 }, { 0xC6980C6A, 0 },
{ 0xC5FE7403, 0xC5FE7403 }, { 0xC565C87C, 0 },
{ 0xC4CE07B0, 0xC4CE07B0 }, { 0xC4372F86, 0 },
{ 0xC3A13DE6, 0xC3A13DE6 }, { 0xC30C30C3, 0xC30C30C3 },
{ 0xC2780614, 0 }, { 0xC1E4BBD6, 0 },
{ 0xC152500C, 0xC152500C }, { 0xC0C0C0C1, 0 },
{ 0xC0300C03, 0xC0300C03 }, { 0xBFA02FE8, 0xBFA02FE8 },
{ 0xBF112A8B, 0 }, { 0xBE82FA0C, 0 },
{ 0xBDF59C92, 0 }, { 0xBD691047, 0xBD691047 },
{ 0xBCDD535E, 0 }, { 0xBC52640C, 0 },
{ 0xBBC8408D, 0 }, { 0xBB3EE722, 0 },
{ 0xBAB65610, 0xBAB65610 }, { 0xBA2E8BA3, 0 },
{ 0xB9A7862A, 0xB9A7862A }, { 0xB92143FA, 0xB92143FA },
{ 0xB89BC36D, 0 }, { 0xB81702E1, 0 },
{ 0xB79300B8, 0 }, { 0xB70FBB5A, 0xB70FBB5A },
{ 0xB68D3134, 0xB68D3134 }, { 0xB60B60B6, 0xB60B60B6 },
{ 0xB58A4855, 0xB58A4855 }, { 0xB509E68B, 0 },
{ 0xB48A39D4, 0xB48A39D4 }, { 0xB40B40B4, 0xB40B40B4 },
{ 0xB38CF9B0, 0xB38CF9B0 }, { 0xB30F6353, 0 },
{ 0xB2927C2A, 0 }, { 0xB21642C9, 0 },
{ 0xB19AB5C5, 0 }, { 0xB11FD3B8, 0xB11FD3B8 },
{ 0xB0A59B42, 0 }, { 0xB02C0B03, 0 },
{ 0xAFB321A1, 0xAFB321A1 }, { 0xAF3ADDC7, 0 },
{ 0xAEC33E20, 0 }, { 0xAE4C415D, 0 },
{ 0xADD5E632, 0xADD5E632 }, { 0xAD602B58, 0xAD602B58 },
{ 0xACEB0F89, 0xACEB0F89 }, { 0xAC769184, 0xAC769184 },
{ 0xAC02B00B, 0 }, { 0xAB8F69E3, 0 },
{ 0xAB1CBDD4, 0 }, { 0xAAAAAAAB, 0 },
{ 0xAA392F36, 0 }, { 0xA9C84A48, 0 },
{ 0xA957FAB5, 0xA957FAB5 }, { 0xA8E83F57, 0xA8E83F57 },
{ 0xA8791709, 0 }, { 0xA80A80A8, 0xA80A80A8 },
{ 0xA79C7B17, 0 }, { 0xA72F053A, 0 },
{ 0xA6C21DF7, 0 }, { 0xA655C439, 0xA655C439 },
{ 0xA5E9F6ED, 0xA5E9F6ED }, { 0xA57EB503, 0 },
{ 0xA513FD6C, 0 }, { 0xA4A9CF1E, 0 },
{ 0xA4402910, 0xA4402910 }, { 0xA3D70A3E, 0 },
{ 0xA36E71A3, 0 }, { 0xA3065E40, 0 },
{ 0xA29ECF16, 0xA29ECF16 }, { 0xA237C32B, 0xA237C32B },
{ 0xA1D13986, 0 }, { 0xA16B312F, 0 },
{ 0xA105A933, 0 }, { 0xA0A0A0A1, 0 },
{ 0xA03C1689, 0 }, { 0x9FD809FE, 0 },
{ 0x9F747A15, 0x9F747A15 }, { 0x9F1165E7, 0x9F1165E7 },
{ 0x9EAECC8D, 0x9EAECC8D }, { 0x9E4CAD24, 0 },
{ 0x9DEB06C9, 0x9DEB06C9 }, { 0x9D89D89E, 0 },
{ 0x9D2921C4, 0 }, { 0x9CC8E161, 0 },
{ 0x9C69169B, 0x9C69169B }, { 0x9C09C09C, 0x9C09C09C },
{ 0x9BAADE8E, 0x9BAADE8E }, { 0x9B4C6F9F, 0 },
{ 0x9AEE72FD, 0 }, { 0x9A90E7D9, 0x9A90E7D9 },
{ 0x9A33CD67, 0x9A33CD67 }, { 0x99D722DB, 0 },
{ 0x997AE76B, 0x997AE76B }, { 0x991F1A51, 0x991F1A51 },
{ 0x98C3BAC7, 0x98C3BAC7 }, { 0x9868C80A, 0 },
{ 0x980E4156, 0x980E4156 }, { 0x97B425ED, 0x97B425ED },
{ 0x975A7510, 0 }, { 0x97012E02, 0x97012E02 },
{ 0x96A8500A, 0 }, { 0x964FDA6C, 0x964FDA6C },
{ 0x95F7CC73, 0 }, { 0x95A02568, 0x95A02568 },
{ 0x9548E498, 0 }, { 0x94F2094F, 0x94F2094F },
{ 0x949B92DE, 0 }, { 0x94458094, 0x94458094 },
{ 0x93EFD1C5, 0x93EFD1C5 }, { 0x939A85C4, 0x939A85C4 },
{ 0x93459BE7, 0 }, { 0x92F11384, 0x92F11384 },
{ 0x929CEBF5, 0 }, { 0x92492492, 0x92492492 },
{ 0x91F5BCB9, 0 }, { 0x91A2B3C5, 0 },
{ 0x91500915, 0x91500915 }, { 0x90FDBC09, 0x90FDBC09 },
{ 0x90ABCC02, 0x90ABCC02 }, { 0x905A3863, 0x905A3863 },
{ 0x90090090, 0x90090090 }, { 0x8FB823EE, 0x8FB823EE },
{ 0x8F67A1E4, 0 }, { 0x8F1779DA, 0 },
{ 0x8EC7AB3A, 0 }, { 0x8E78356D, 0x8E78356D },
{ 0x8E2917E1, 0 }, { 0x8DDA5202, 0x8DDA5202 },
{ 0x8D8BE340, 0 }, { 0x8D3DCB09, 0 },
{ 0x8CF008CF, 0x8CF008CF }, { 0x8CA29C04, 0x8CA29C04 },
{ 0x8C55841D, 0 }, { 0x8C08C08C, 0x8C08C08C },
{ 0x8BBC50C9, 0 }, { 0x8B70344A, 0x8B70344A },
{ 0x8B246A88, 0 }, { 0x8AD8F2FC, 0 },
{ 0x8A8DCD20, 0 }, { 0x8A42F870, 0x8A42F870 },
{ 0x89F8746A, 0 }, { 0x89AE408A, 0 },
{ 0x89645C4F, 0x89645C4F }, { 0x891AC73B, 0 },
{ 0x88D180CD, 0x88D180CD }, { 0x88888889, 0 },
{ 0x883FDDF0, 0x883FDDF0 }, { 0x87F78088, 0 },
{ 0x87AF6FD6, 0 }, { 0x8767AB5F, 0x8767AB5F },
{ 0x872032AC, 0x872032AC }, { 0x86D90545, 0 },
{ 0x869222B2, 0 }, { 0x864B8A7E, 0 },
{ 0x86053C34, 0x86053C34 }, { 0x85BF3761, 0x85BF3761 },
{ 0x85797B91, 0x85797B91 }, { 0x85340853, 0x85340853 },
{ 0x84EEDD36, 0 }, { 0x84A9F9C8, 0x84A9F9C8 },
{ 0x84655D9C, 0 }, { 0x84210842, 0x84210842 },
{ 0x83DCF94E, 0 }, { 0x83993052, 0x83993052 },
{ 0x8355ACE4, 0 }, { 0x83126E98, 0 },
{ 0x82CF7504, 0 }, { 0x828CBFBF, 0 },
{ 0x824A4E61, 0 }, { 0x82082082, 0x82082082 },
{ 0x81C635BC, 0x81C635BC }, { 0x81848DA9, 0 },
{ 0x814327E4, 0 }, { 0x81020408, 0x81020408 },
{ 0x80C121B3, 0 }, { 0x80808081, 0 },
{ 0x80402010, 0x80402010 }, { 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xFF803FE1, 0 }, { 0xFF00FF01, 0 },
{ 0xFE823CA6, 0 }, { 0xFE03F810, 0 },
{ 0xFD863087, 0 }, { 0xFD08E551, 0 },
{ 0xFC8C15B5, 0 }, { 0xFC0FC0FD, 0 },
{ 0xFB93E673, 0 }, { 0xFB188566, 0 },
{ 0xFA9D9D20, 0 }, { 0xFA232CF3, 0 },
{ 0xF9A9342D, 0 }, { 0xF92FB222, 0 },
{ 0xF8B6A622, 0xF8B6A622 }, { 0xF83E0F84, 0 },
{ 0xF7C5ED9D, 0 }, { 0xF74E3FC3, 0 },
{ 0xF6D7054E, 0 }, { 0xF6603D99, 0 },
{ 0xF5E9E7FD, 0 }, { 0xF57403D6, 0 },
{ 0xF4FE9083, 0 }, { 0xF4898D60, 0 },
{ 0xF414F9CE, 0 }, { 0xF3A0D52D, 0 },
{ 0xF32D1EE0, 0 }, { 0xF2B9D649, 0 },
{ 0xF246FACC, 0 }, { 0xF1D48BCF, 0 },
{ 0xF16288B9, 0 }, { 0xF0F0F0F1, 0 },
{ 0xF07FC3E0, 0xF07FC3E0 }, { 0xF00F00F0, 0xF00F00F0 },
{ 0xEF9EA78C, 0 }, { 0xEF2EB720, 0 },
{ 0xEEBF2F19, 0 }, { 0xEE500EE5, 0xEE500EE5 },
{ 0xEDE155F4, 0 }, { 0xED7303B6, 0 },
{ 0xED05179C, 0xED05179C }, { 0xEC979119, 0 },
{ 0xEC2A6FA0, 0xEC2A6FA0 }, { 0xEBBDB2A6, 0 },
{ 0xEB5159A0, 0 }, { 0xEAE56404, 0 },
{ 0xEA79D14A, 0 }, { 0xEA0EA0EA, 0xEA0EA0EA },
{ 0xE9A3D25E, 0xE9A3D25E }, { 0xE9396520, 0 },
{ 0xE8CF58AB, 0 }, { 0xE865AC7C, 0 },
{ 0xE7FC600F, 0 }, { 0xE79372E3, 0 },
{ 0xE72AE476, 0 }, { 0xE6C2B449, 0 },
{ 0xE65AE1DC, 0 }, { 0xE5F36CB0, 0xE5F36CB0 },
{ 0xE58C544A, 0 }, { 0xE525982B, 0 },
{ 0xE4BF37D9, 0 }, { 0xE45932D8, 0 },
{ 0xE3F388AF, 0 }, { 0xE38E38E4, 0 },
{ 0xE32942FF, 0 }, { 0xE2C4A689, 0 },
{ 0xE260630B, 0 }, { 0xE1FC780F, 0 },
{ 0xE198E520, 0 }, { 0xE135A9CA, 0 },
{ 0xE0D2C59A, 0 }, { 0xE070381C, 0xE070381C },
{ 0xE00E00E0, 0xE00E00E0 }, { 0xDFAC1F75, 0 },
{ 0xDF4A9369, 0 }, { 0xDEE95C4D, 0 },
{ 0xDE8879B3, 0 }, { 0xDE27EB2D, 0 },
{ 0xDDC7B04D, 0 }, { 0xDD67C8A6, 0xDD67C8A6 },
{ 0xDD0833CE, 0 }, { 0xDCA8F159, 0 },
{ 0xDC4A00DD, 0 }, { 0xDBEB61EF, 0 },
{ 0xDB8D1428, 0 }, { 0xDB2F171E, 0 },
{ 0xDAD16A6B, 0 }, { 0xDA740DA8, 0 },
{ 0xDA17006D, 0xDA17006D }, { 0xD9BA4257, 0 },
{ 0xD95DD300, 0 }, { 0xD901B204, 0 },
{ 0xD8A5DEFF, 0 }, { 0xD84A598F, 0 },
{ 0xD7EF2152, 0 }, { 0xD79435E5, 0xD79435E5 },
{ 0xD73996E9, 0 }, { 0xD6DF43FD, 0 },
{ 0xD6853CC1, 0 }, { 0xD62B80D7, 0 },
{ 0xD5D20FDF, 0 }, { 0xD578E97D, 0 },
{ 0xD5200D52, 0xD5200D52 }, { 0xD4C77B04, 0 },
{ 0xD46F3235, 0 }, { 0xD417328A, 0 },
{ 0xD3BF7BA9, 0 }, { 0xD3680D37, 0 },
{ 0xD310E6DB, 0 }, { 0xD2BA083C, 0 },
{ 0xD2637101, 0 }, { 0xD20D20D2, 0xD20D20D2 },
{ 0xD1B71759, 0 }, { 0xD161543E, 0xD161543E },
{ 0xD10BD72C, 0 }, { 0xD0B69FCC, 0 },
{ 0xD061ADCA, 0 }, { 0xD00D00D0, 0xD00D00D0 },
{ 0xCFB8988C, 0 }, { 0xCF6474A9, 0 },
{ 0xCF1094D4, 0 }, { 0xCEBCF8BC, 0 },
{ 0xCE69A00D, 0 }, { 0xCE168A77, 0xCE168A77 },
{ 0xCDC3B7A9, 0xCDC3B7A9 }, { 0xCD712753, 0 },
{ 0xCD1ED924, 0 }, { 0xCCCCCCCD, 0 },
{ 0xCC7B0200, 0 }, { 0xCC29786D, 0 },
{ 0xCBD82FC7, 0 }, { 0xCB8727C1, 0 },
{ 0xCB36600D, 0 }, { 0xCAE5D85F, 0xCAE5D85F },
{ 0xCA95906C, 0 }, { 0xCA4587E7, 0 },
{ 0xC9F5BE86, 0 }, { 0xC9A633FD, 0 },
{ 0xC956E803, 0xC956E803 }, { 0xC907DA4F, 0 },
{ 0xC8B90A96, 0 }, { 0xC86A7890, 0xC86A7890 },
{ 0xC81C23F5, 0xC81C23F5 }, { 0xC7CE0C7D, 0 },
{ 0xC78031E0, 0xC78031E0 }, { 0xC73293D8, 0 },
{ 0xC6E5321D, 0 }, { 0xC6980C6A, 0 },
{ 0xC64B2278, 0xC64B2278 }, { 0xC5FE7403, 0xC5FE7403 },
{ 0xC5B200C6, 0 }, { 0xC565C87C, 0 },
{ 0xC519CAE0, 0xC519CAE0 }, { 0xC4CE07B0, 0xC4CE07B0 },
{ 0xC4827EA8, 0xC4827EA8 }, { 0xC4372F86, 0 },
{ 0xC3EC1A06, 0 }, { 0xC3A13DE6, 0xC3A13DE6 },
{ 0xC3569AE6, 0 }, { 0xC30C30C3, 0xC30C30C3 },
{ 0xC2C1FF3E, 0 }, { 0xC2780614, 0 },
{ 0xC22E4507, 0 }, { 0xC1E4BBD6, 0 },
{ 0xC19B6A42, 0 }, { 0xC152500C, 0xC152500C },
{ 0xC1096CF6, 0 }, { 0xC0C0C0C1, 0 },
{ 0xC0784B2F, 0 }, { 0xC0300C03, 0xC0300C03 },
{ 0xBFE80300, 0 }, { 0xBFA02FE8, 0xBFA02FE8 },
{ 0xBF589280, 0 }, { 0xBF112A8B, 0 },
{ 0xBEC9F7CE, 0 }, { 0xBE82FA0C, 0 },
{ 0xBE3C310C, 0 }, { 0xBDF59C92, 0 },
{ 0xBDAF3C64, 0 }, { 0xBD691047, 0xBD691047 },
{ 0xBD231803, 0 }, { 0xBCDD535E, 0 },
{ 0xBC97C21E, 0xBC97C21E }, { 0xBC52640C, 0 },
{ 0xBC0D38EE, 0xBC0D38EE }, { 0xBBC8408D, 0 },
{ 0xBB837AB1, 0 }, { 0xBB3EE722, 0 },
{ 0xBAFA85A9, 0xBAFA85A9 }, { 0xBAB65610, 0xBAB65610 },
{ 0xBA725820, 0xBA725820 }, { 0xBA2E8BA3, 0 },
{ 0xB9EAF063, 0 }, { 0xB9A7862A, 0xB9A7862A },
{ 0xB9644CC4, 0 }, { 0xB92143FA, 0xB92143FA },
{ 0xB8DE6B9A, 0 }, { 0xB89BC36D, 0 },
{ 0xB8594B41, 0 }, { 0xB81702E1, 0 },
{ 0xB7D4EA19, 0xB7D4EA19 }, { 0xB79300B8, 0 },
{ 0xB7514689, 0 }, { 0xB70FBB5A, 0xB70FBB5A },
{ 0xB6CE5EF9, 0xB6CE5EF9 }, { 0xB68D3134, 0xB68D3134 },
{ 0xB64C31D9, 0 }, { 0xB60B60B6, 0xB60B60B6 },
{ 0xB5CABD9B, 0 }, { 0xB58A4855, 0xB58A4855 },
{ 0xB54A00B5, 0xB54A00B5 }, { 0xB509E68B, 0 },
{ 0xB4C9F9A5, 0 }, { 0xB48A39D4, 0xB48A39D4 },
{ 0xB44AA6E9, 0xB44AA6E9 }, { 0xB40B40B4, 0xB40B40B4 },
{ 0xB3CC0706, 0 }, { 0xB38CF9B0, 0xB38CF9B0 },
{ 0xB34E1884, 0 }, { 0xB30F6353, 0 },
{ 0xB2D0D9EF, 0 }, { 0xB2927C2A, 0 },
{ 0xB25449D7, 0 }, { 0xB21642C9, 0 },
{ 0xB1D866D1, 0xB1D866D1 }, { 0xB19AB5C5, 0 },
{ 0xB15D2F76, 0 }, { 0xB11FD3B8, 0xB11FD3B8 },
{ 0xB0E2A260, 0xB0E2A260 }, { 0xB0A59B42, 0 },
{ 0xB068BE31, 0 }, { 0xB02C0B03, 0 },
{ 0xAFEF818C, 0 }, { 0xAFB321A1, 0xAFB321A1 },
{ 0xAF76EB19, 0 }, { 0xAF3ADDC7, 0 },
{ 0xAEFEF982, 0 }, { 0xAEC33E20, 0 },
{ 0xAE87AB76, 0xAE87AB76 }, { 0xAE4C415D, 0 },
{ 0xAE10FFA9, 0 }, { 0xADD5E632, 0xADD5E632 },
{ 0xAD9AF4D0, 0 }, { 0xAD602B58, 0xAD602B58 },
{ 0xAD2589A4, 0 }, { 0xACEB0F89, 0xACEB0F89 },
{ 0xACB0BCE1, 0xACB0BCE1 }, { 0xAC769184, 0xAC769184 },
{ 0xAC3C8D4A, 0 }, { 0xAC02B00B, 0 },
{ 0xABC8F9A0, 0xABC8F9A0 }, { 0xAB8F69E3, 0 },
{ 0xAB5600AC, 0 }, { 0xAB1CBDD4, 0 },
{ 0xAAE3A136, 0 }, { 0xAAAAAAAB, 0 },
{ 0xAA71DA0D, 0 }, { 0xAA392F36, 0 },
{ 0xAA00AA01, 0 }, { 0xA9C84A48, 0 },
{ 0xA9900FE6, 0 }, { 0xA957FAB5, 0xA957FAB5 },
{ 0xA9200A92, 0xA9200A92 }, { 0xA8E83F57, 0xA8E83F57 },
{ 0xA8B098E0, 0xA8B098E0 }, { 0xA8791709, 0 },
{ 0xA841B9AD, 0 }, { 0xA80A80A8, 0xA80A80A8 },
{ 0xA7D36BD8, 0 }, { 0xA79C7B17, 0 },
{ 0xA765AE44, 0 }, { 0xA72F053A, 0 },
{ 0xA6F87FD6, 0xA6F87FD6 }, { 0xA6C21DF7, 0 },
{ 0xA68BDF79, 0 }, { 0xA655C439, 0xA655C439 },
{ 0xA61FCC16, 0xA61FCC16 }, { 0xA5E9F6ED, 0xA5E9F6ED },
{ 0xA5B4449D, 0 }, { 0xA57EB503, 0 },
{ 0xA54947FE, 0 }, { 0xA513FD6C, 0 },
{ 0xA4DED52C, 0xA4DED52C }, { 0xA4A9CF1E, 0 },
{ 0xA474EB1F, 0xA474EB1F }, { 0xA4402910, 0xA4402910 },
{ 0xA40B88D0, 0 }, { 0xA3D70A3E, 0 },
{ 0xA3A2AD39, 0xA3A2AD39 }, { 0xA36E71A3, 0 },
{ 0xA33A575A, 0xA33A575A }, { 0xA3065E40, 0 },
{ 0xA2D28634, 0 }, { 0xA29ECF16, 0xA29ECF16 },
{ 0xA26B38C9, 0 }, { 0xA237C32B, 0xA237C32B },
{ 0xA2046E1F, 0xA2046E1F }, { 0xA1D13986, 0 },
{ 0xA19E2540, 0 }, { 0xA16B312F, 0 },
{ 0xA1385D35, 0 }, { 0xA105A933, 0 },
{ 0xA0D3150C, 0 }, { 0xA0A0A0A1, 0 },
{ 0xA06E4BD4, 0xA06E4BD4 }, { 0xA03C1689, 0 },
{ 0xA00A00A0, 0xA00A00A0 }, { 0x9FD809FE, 0 },
{ 0x9FA63284, 0 }, { 0x9F747A15, 0x9F747A15 },
{ 0x9F42E095, 0x9F42E095 }, { 0x9F1165E7, 0x9F1165E7 },
{ 0x9EE009EE, 0x9EE009EE }, { 0x9EAECC8D, 0x9EAECC8D },
{ 0x9E7DADA9, 0 }, { 0x9E4CAD24, 0 },
{ 0x9E1BCAE3, 0 }, { 0x9DEB06C9, 0x9DEB06C9 },
{ 0x9DBA60BB, 0x9DBA60BB }, { 0x9D89D89E, 0 },
{ 0x9D596E54, 0x9D596E54 }, { 0x9D2921C4, 0 },
{ 0x9CF8F2D1, 0x9CF8F2D1 }, { 0x9CC8E161, 0 },
{ 0x9C98ED58, 0 }, { 0x9C69169B, 0x9C69169B },
{ 0x9C395D10, 0x9C395D10 }, { 0x9C09C09C, 0x9C09C09C },
{ 0x9BDA4124, 0x9BDA4124 }, { 0x9BAADE8E, 0x9BAADE8E },
{ 0x9B7B98C0, 0 }, { 0x9B4C6F9F, 0 },
{ 0x9B1D6311, 0x9B1D6311 }, { 0x9AEE72FD, 0 },
{ 0x9ABF9F48, 0x9ABF9F48 }, { 0x9A90E7D9, 0x9A90E7D9 },
{ 0x9A624C97, 0 }, { 0x9A33CD67, 0x9A33CD67 },
{ 0x9A056A31, 0 }, { 0x99D722DB, 0 },
{ 0x99A8F74C, 0 }, { 0x997AE76B, 0x997AE76B },
{ 0x994CF320, 0x994CF320 }, { 0x991F1A51, 0x991F1A51 },
{ 0x98F15CE7, 0 }, { 0x98C3BAC7, 0x98C3BAC7 },
{ 0x989633DB, 0x989633DB }, { 0x9868C80A, 0 },
{ 0x983B773B, 0 }, { 0x980E4156, 0x980E4156 },
{ 0x97E12644, 0x97E12644 }, { 0x97B425ED, 0x97B425ED },
{ 0x97874039, 0 }, { 0x975A7510, 0 },
{ 0x972DC45B, 0 }, { 0x97012E02, 0x97012E02 },
{ 0x96D4B1EF, 0 }, { 0x96A8500A, 0 },
{ 0x967C083B, 0 }, { 0x964FDA6C, 0x964FDA6C },
{ 0x9623C686, 0x9623C686 }, { 0x95F7CC73, 0 },
{ 0x95CBEC1B, 0 }, { 0x95A02568, 0x95A02568 },
{ 0x95747844, 0 }, { 0x9548E498, 0 },
{ 0x951D6A4E, 0 }, { 0x94F2094F, 0x94F2094F },
{ 0x94C6C187, 0 }, { 0x949B92DE, 0 },
{ 0x94707D3F, 0 }, { 0x94458094, 0x94458094 },
{ 0x941A9CC8, 0x941A9CC8 }, { 0x93EFD1C5, 0x93EFD1C5 },
{ 0x93C51F76, 0 }, { 0x939A85C4, 0x939A85C4 },
{ 0x9370049C, 0 }, { 0x93459BE7, 0 },
{ 0x931B4B91, 0 }, { 0x92F11384, 0x92F11384 },
{ 0x92C6F3AC, 0x92C6F3AC }, { 0x929CEBF5, 0 },
{ 0x9272FC48, 0x9272FC48 }, { 0x92492492, 0x92492492 },
{ 0x921F64BF, 0 }, { 0x91F5BCB9, 0 },
{ 0x91CC2C6C, 0x91CC2C6C }, { 0x91A2B3C5, 0 },
{ 0x917952AF, 0 }, { 0x91500915, 0x91500915 },
{ 0x9126D6E5, 0 }, { 0x90FDBC09, 0x90FDBC09 },
{ 0x90D4B86F, 0 }, { 0x90ABCC02, 0x90ABCC02 },
{ 0x9082F6B0, 0 }, { 0x905A3863, 0x905A3863 },
{ 0x9031910A, 0 }, { 0x90090090, 0x90090090 },
{ 0x8FE086E3, 0 }, { 0x8FB823EE, 0x8FB823EE },
{ 0x8F8FD7A0, 0 }, { 0x8F67A1E4, 0 },
{ 0x8F3F82A8, 0x8F3F82A8 }, { 0x8F1779DA, 0 },
{ 0x8EEF8766, 0 }, { 0x8EC7AB3A, 0 },
{ 0x8E9FE542, 0x8E9FE542 }, { 0x8E78356D, 0x8E78356D },
{ 0x8E509BA8, 0x8E509BA8 }, { 0x8E2917E1, 0 },
{ 0x8E01AA05, 0 }, { 0x8DDA5202, 0x8DDA5202 },
{ 0x8DB30FC6, 0x8DB30FC6 }, { 0x8D8BE340, 0 },
{ 0x8D64CC5C, 0 }, { 0x8D3DCB09, 0 },
{ 0x8D16DF35, 0x8D16DF35 }, { 0x8CF008CF, 0x8CF008CF },
{ 0x8CC947C5, 0 }, { 0x8CA29C04, 0x8CA29C04 },
{ 0x8C7C057D, 0 }, { 0x8C55841D, 0 },
{ 0x8C2F17D2, 0x8C2F17D2 }, { 0x8C08C08C, 0x8C08C08C },
{ 0x8BE27E39, 0x8BE27E39 }, { 0x8BBC50C9, 0 },
{ 0x8B963829, 0x8B963829 }, { 0x8B70344A, 0x8B70344A },
{ 0x8B4A451A, 0 }, { 0x8B246A88, 0 },
{ 0x8AFEA483, 0x8AFEA483 }, { 0x8AD8F2FC, 0 },
{ 0x8AB355E0, 0x8AB355E0 }, { 0x8A8DCD20, 0 },
{ 0x8A6858AB, 0 }, { 0x8A42F870, 0x8A42F870 },
{ 0x8A1DAC60, 0x8A1DAC60 }, { 0x89F8746A, 0 },
{ 0x89D3507D, 0 }, { 0x89AE408A, 0 },
{ 0x89894480, 0 }, { 0x89645C4F, 0x89645C4F },
{ 0x893F87E8, 0x893F87E8 }, { 0x891AC73B, 0 },
{ 0x88F61A37, 0x88F61A37 }, { 0x88D180CD, 0x88D180CD },
{ 0x88ACFAEE, 0 }, { 0x88888889, 0 },
{ 0x8864298F, 0 }, { 0x883FDDF0, 0x883FDDF0 },
{ 0x881BA59E, 0 }, { 0x87F78088, 0 },
{ 0x87D36EA0, 0 }, { 0x87AF6FD6, 0 },
{ 0x878B841B, 0 }, { 0x8767AB5F, 0x8767AB5F },
{ 0x8743E595, 0 }, { 0x872032AC, 0x872032AC },
{ 0x86FC9296, 0x86FC9296 }, { 0x86D90545, 0 },
{ 0x86B58AA8, 0 }, { 0x869222B2, 0 },
{ 0x866ECD53, 0x866ECD53 }, { 0x864B8A7E, 0 },
{ 0x86285A23, 0x86285A23 }, { 0x86053C34, 0x86053C34 },
{ 0x85E230A3, 0x85E230A3 }, { 0x85BF3761, 0x85BF3761 },
{ 0x859C5060, 0x859C5060 }, { 0x85797B91, 0x85797B91 },
{ 0x8556B8E7, 0x8556B8E7 }, { 0x85340853, 0x85340853 },
{ 0x851169C7, 0x851169C7 }, { 0x84EEDD36, 0 },
{ 0x84CC6290, 0 }, { 0x84A9F9C8, 0x84A9F9C8 },
{ 0x8487A2D1, 0 }, { 0x84655D9C, 0 },
{ 0x84432A1B, 0x84432A1B }, { 0x84210842, 0x84210842 },
{ 0x83FEF802, 0x83FEF802 }, { 0x83DCF94E, 0 },
{ 0x83BB0C18, 0 }, { 0x83993052, 0x83993052 },
{ 0x837765F0, 0x837765F0 }, { 0x8355ACE4, 0 },
{ 0x83340520, 0x83340520 }, { 0x83126E98, 0 },
{ 0x82F0E93D, 0x82F0E93D }, { 0x82CF7504, 0 },
{ 0x82AE11DE, 0 }, { 0x828CBFBF, 0 },
{ 0x826B7E99, 0x826B7E99 }, { 0x824A4E61, 0 },
{ 0x82292F08, 0 }, { 0x82082082, 0x82082082 },
{ 0x81E722C2, 0x81E722C2 }, { 0x81C635BC, 0x81C635BC },
{ 0x81A55963, 0 }, { 0x81848DA9, 0 },
{ 0x8163D283, 0 }, { 0x814327E4, 0 },
{ 0x81228DBF, 0 }, { 0x81020408, 0x81020408 },
{ 0x80E18AB3, 0 }, { 0x80C121B3, 0 },
{ 0x80A0C8FB, 0x80A0C8FB }, { 0x80808081, 0 },
{ 0x80604836, 0x80604836 }, { 0x80402010, 0x80402010 },
{ 0x80200802, 0x80200802 }, { 0xFFFFFFFF, 0xFFFFFFFF }
};

View File

@@ -7,41 +7,42 @@
#include "vpx_ports/bitops.h"
/*Smallest blocks are 4x4*/
# define OD_LOG_BSIZE0 (2)
#define OD_LOG_BSIZE0 (2)
/*There are 5 block sizes total (4x4, 8x8, 16x16, 32x32 and 64x64).*/
# define OD_NBSIZES (5)
#define OD_NBSIZES (5)
/*The log of the maximum length of the side of a block.*/
# define OD_LOG_BSIZE_MAX (OD_LOG_BSIZE0 + OD_NBSIZES - 1)
#define OD_LOG_BSIZE_MAX (OD_LOG_BSIZE0 + OD_NBSIZES - 1)
/*The maximum length of the side of a block.*/
# define OD_BSIZE_MAX (1 << OD_LOG_BSIZE_MAX)
#define OD_BSIZE_MAX (1 << OD_LOG_BSIZE_MAX)
typedef int od_coeff;
typedef int16_t od_dering_in;
# define OD_DIVU_DMAX (1024)
#define OD_DIVU_DMAX (1024)
extern uint32_t OD_DIVU_SMALL_CONSTS[OD_DIVU_DMAX][2];
/*Translate unsigned division by small divisors into multiplications.*/
# define OD_DIVU_SMALL(_x, _d) \
((uint32_t)((OD_DIVU_SMALL_CONSTS[(_d)-1][0]* \
(uint64_t)(_x)+OD_DIVU_SMALL_CONSTS[(_d)-1][1])>>32)>> \
(OD_ILOG(_d)-1))
#define OD_DIVU_SMALL(_x, _d) \
((uint32_t)((OD_DIVU_SMALL_CONSTS[(_d)-1][0] * (uint64_t)(_x) + \
OD_DIVU_SMALL_CONSTS[(_d)-1][1]) >> \
32) >> \
(OD_ILOG(_d) - 1))
# define OD_DIVU(_x, _d) \
(((_d) < OD_DIVU_DMAX)?(OD_DIVU_SMALL((_x), (_d))):((_x)/(_d)))
#define OD_DIVU(_x, _d) \
(((_d) < OD_DIVU_DMAX) ? (OD_DIVU_SMALL((_x), (_d))) : ((_x) / (_d)))
#define OD_MINI VPXMIN
#define OD_CLAMPI(min, val, max) clamp((val), (min), (max))
# define OD_CLZ0 (1)
# define OD_CLZ(x) (-get_msb(x))
# define OD_ILOG_NZ(x) (OD_CLZ0 - OD_CLZ(x))
#define OD_CLZ0 (1)
#define OD_CLZ(x) (-get_msb(x))
#define OD_ILOG_NZ(x) (OD_CLZ0 - OD_CLZ(x))
/*Note that __builtin_clz is not defined when x == 0, according to the gcc
documentation (and that of the x86 BSR instruction that implements it), so
we have to special-case it.
We define a special version of the macro to use when x can be zero.*/
# define OD_ILOG(x) ((x) ? OD_ILOG_NZ(x) : 0)
#define OD_ILOG(x) ((x) ? OD_ILOG_NZ(x) : 0)
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1783,10 +1783,11 @@ static void decode_partition(VP10Decoder *const pbi, MACROBLOCKD *const xd,
#if DERING_REFINEMENT
if (bsize == BLOCK_64X64) {
if (cm->dering_level != 0 && !sb_all_skip(cm, mi_row, mi_col)) {
cm->mi_grid_visible[mi_row*cm->mi_stride + mi_col]->mbmi.dering_gain =
cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain =
vpx_read_literal(r, DERING_REFINEMENT_BITS);
} else {
cm->mi_grid_visible[mi_row*cm->mi_stride + mi_col]->mbmi.dering_gain = 0;
cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain =
0;
}
}
#endif // DERGING_REFINEMENT
@@ -1967,7 +1968,7 @@ static void setup_clpf(VP10_COMMON *cm, struct vpx_read_bit_buffer *rb) {
#if CONFIG_DERING
static void setup_dering(VP10_COMMON *cm, struct vpx_read_bit_buffer *rb) {
cm->dering_level = vpx_rb_read_literal(rb, DERING_LEVEL_BITS);
cm->dering_level = vpx_rb_read_literal(rb, DERING_LEVEL_BITS);
}
#endif // CONFIG_DERING
@@ -3390,7 +3391,7 @@ static void read_global_motion_params(Global_Motion_Params *params,
GM_ALPHA_DECODE_FACTOR);
params->motion_params.wmmat[5] =
vp10_read_primitive_symmetric(r, GM_ABS_ALPHA_BITS) *
GM_ALPHA_DECODE_FACTOR +
GM_ALPHA_DECODE_FACTOR +
(1 << WARPEDMODEL_PREC_BITS);
// fallthrough intended
case GLOBAL_ROTZOOM:

View File

@@ -1883,7 +1883,8 @@ static void write_modes_sb(VP10_COMP *const cpi, const TileInfo *const tile,
if (bsize == BLOCK_64X64 && cm->dering_level != 0 &&
!sb_all_skip(cm, mi_row, mi_col)) {
vpx_write_literal(
w, cm->mi_grid_visible[mi_row*cm->mi_stride + mi_col]->mbmi.dering_gain,
w,
cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain,
DERING_REFINEMENT_BITS);
}
#endif

View File

@@ -1253,18 +1253,18 @@ static const transform_2d FHT_8x4[] = {
};
static const transform_2d FHT_8x16[] = {
{ fdct16, fdct8 }, // DCT_DCT
{ fadst16, fdct8 }, // ADST_DCT
{ fdct16, fadst8 }, // DCT_ADST
{ fdct16, fdct8 }, // DCT_DCT
{ fadst16, fdct8 }, // ADST_DCT
{ fdct16, fadst8 }, // DCT_ADST
{ fadst16, fadst8 }, // ADST_ADST
{ fadst16, fdct8 }, // FLIPADST_DCT
{ fdct16, fadst8 }, // DCT_FLIPADST
{ fadst16, fdct8 }, // FLIPADST_DCT
{ fdct16, fadst8 }, // DCT_FLIPADST
{ fadst16, fadst8 }, // FLIPADST_FLIPADST
{ fadst16, fadst8 }, // ADST_FLIPADST
{ fadst16, fadst8 }, // FLIPADST_ADST
{ fidtx16, fidtx8 }, // IDTX
{ fdct16, fidtx8 }, // V_DCT
{ fidtx16, fdct8 }, // H_DCT
{ fdct16, fidtx8 }, // V_DCT
{ fidtx16, fdct8 }, // H_DCT
{ fadst16, fidtx8 }, // V_ADST
{ fidtx16, fadst8 }, // H_ADST
{ fadst16, fidtx8 }, // V_FLIPADST
@@ -1272,18 +1272,18 @@ static const transform_2d FHT_8x16[] = {
};
static const transform_2d FHT_16x8[] = {
{ fdct8, fdct16 }, // DCT_DCT
{ fadst8, fdct16 }, // ADST_DCT
{ fdct8, fadst16 }, // DCT_ADST
{ fdct8, fdct16 }, // DCT_DCT
{ fadst8, fdct16 }, // ADST_DCT
{ fdct8, fadst16 }, // DCT_ADST
{ fadst8, fadst16 }, // ADST_ADST
{ fadst8, fdct16 }, // FLIPADST_DCT
{ fdct8, fadst16 }, // DCT_FLIPADST
{ fadst8, fdct16 }, // FLIPADST_DCT
{ fdct8, fadst16 }, // DCT_FLIPADST
{ fadst8, fadst16 }, // FLIPADST_FLIPADST
{ fadst8, fadst16 }, // ADST_FLIPADST
{ fadst8, fadst16 }, // FLIPADST_ADST
{ fidtx8, fidtx16 }, // IDTX
{ fdct8, fidtx16 }, // V_DCT
{ fidtx8, fdct16 }, // H_DCT
{ fdct8, fidtx16 }, // V_DCT
{ fidtx8, fdct16 }, // H_DCT
{ fadst8, fidtx16 }, // V_ADST
{ fidtx8, fadst16 }, // H_ADST
{ fadst8, fidtx16 }, // V_FLIPADST
@@ -1291,40 +1291,40 @@ static const transform_2d FHT_16x8[] = {
};
static const transform_2d FHT_16x32[] = {
{ fdct32, fdct16 }, // DCT_DCT
{ fhalfright32, fdct16 }, // ADST_DCT
{ fdct32, fadst16 }, // DCT_ADST
{ fhalfright32, fadst16 }, // ADST_ADST
{ fhalfright32, fdct16 }, // FLIPADST_DCT
{ fdct32, fadst16 }, // DCT_FLIPADST
{ fhalfright32, fadst16 }, // FLIPADST_FLIPADST
{ fhalfright32, fadst16 }, // ADST_FLIPADST
{ fhalfright32, fadst16 }, // FLIPADST_ADST
{ fidtx32, fidtx16 }, // IDTX
{ fdct32, fidtx16 }, // V_DCT
{ fidtx32, fdct16 }, // H_DCT
{ fhalfright32, fidtx16 }, // V_ADST
{ fidtx32, fadst16 }, // H_ADST
{ fhalfright32, fidtx16 }, // V_FLIPADST
{ fidtx32, fadst16 }, // H_FLIPADST
{ fdct32, fdct16 }, // DCT_DCT
{ fhalfright32, fdct16 }, // ADST_DCT
{ fdct32, fadst16 }, // DCT_ADST
{ fhalfright32, fadst16 }, // ADST_ADST
{ fhalfright32, fdct16 }, // FLIPADST_DCT
{ fdct32, fadst16 }, // DCT_FLIPADST
{ fhalfright32, fadst16 }, // FLIPADST_FLIPADST
{ fhalfright32, fadst16 }, // ADST_FLIPADST
{ fhalfright32, fadst16 }, // FLIPADST_ADST
{ fidtx32, fidtx16 }, // IDTX
{ fdct32, fidtx16 }, // V_DCT
{ fidtx32, fdct16 }, // H_DCT
{ fhalfright32, fidtx16 }, // V_ADST
{ fidtx32, fadst16 }, // H_ADST
{ fhalfright32, fidtx16 }, // V_FLIPADST
{ fidtx32, fadst16 }, // H_FLIPADST
};
static const transform_2d FHT_32x16[] = {
{ fdct16, fdct32 }, // DCT_DCT
{ fadst16, fdct32 }, // ADST_DCT
{ fdct16, fhalfright32 }, // DCT_ADST
{ fdct16, fdct32 }, // DCT_DCT
{ fadst16, fdct32 }, // ADST_DCT
{ fdct16, fhalfright32 }, // DCT_ADST
{ fadst16, fhalfright32 }, // ADST_ADST
{ fadst16, fdct32 }, // FLIPADST_DCT
{ fdct16, fhalfright32 }, // DCT_FLIPADST
{ fadst16, fdct32 }, // FLIPADST_DCT
{ fdct16, fhalfright32 }, // DCT_FLIPADST
{ fadst16, fhalfright32 }, // FLIPADST_FLIPADST
{ fadst16, fhalfright32 }, // ADST_FLIPADST
{ fadst16, fhalfright32 }, // FLIPADST_ADST
{ fidtx16, fidtx32 }, // IDTX
{ fdct16, fidtx32 }, // V_DCT
{ fidtx16, fdct32 }, // H_DCT
{ fadst16, fidtx32 }, // V_ADST
{ fidtx16, fidtx32 }, // IDTX
{ fdct16, fidtx32 }, // V_DCT
{ fidtx16, fdct32 }, // H_DCT
{ fadst16, fidtx32 }, // V_ADST
{ fidtx16, fhalfright32 }, // H_ADST
{ fadst16, fidtx32 }, // V_FLIPADST
{ fadst16, fidtx32 }, // V_FLIPADST
{ fidtx16, fhalfright32 }, // H_FLIPADST
};
#endif // CONFIG_EXT_TX
@@ -1376,11 +1376,10 @@ void vp10_fht4x8_c(const int16_t *input, tran_low_t *output, int stride,
// Columns
for (i = 0; i < n; ++i) {
for (j = 0; j < n2; ++j)
temp_in[j] = (tran_low_t)fdct_round_shift(
input[j * stride + i] * 8 * Sqrt2);
temp_in[j] =
(tran_low_t)fdct_round_shift(input[j * stride + i] * 8 * Sqrt2);
ht.cols(temp_in, temp_out);
for (j = 0; j < n2; ++j)
out[j * n + i] = temp_out[j];
for (j = 0; j < n2; ++j) out[j * n + i] = temp_out[j];
}
// Rows
@@ -1406,11 +1405,10 @@ void vp10_fht8x4_c(const int16_t *input, tran_low_t *output, int stride,
// Columns
for (i = 0; i < n2; ++i) {
for (j = 0; j < n; ++j)
temp_in[j] = (tran_low_t)fdct_round_shift(
input[j * stride + i] * 8 * Sqrt2);
temp_in[j] =
(tran_low_t)fdct_round_shift(input[j * stride + i] * 8 * Sqrt2);
ht.cols(temp_in, temp_out);
for (j = 0; j < n; ++j)
out[j * n2 + i] = temp_out[j];
for (j = 0; j < n; ++j) out[j * n2 + i] = temp_out[j];
}
// Rows
@@ -1422,8 +1420,8 @@ void vp10_fht8x4_c(const int16_t *input, tran_low_t *output, int stride,
// Note: overall scale factor of transform is 8 times unitary
}
void vp10_fht8x16_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_fht8x16_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
const int n = 8;
const int n2 = 16;
tran_low_t out[16 * 8];
@@ -1436,26 +1434,23 @@ void vp10_fht8x16_c(const int16_t *input, tran_low_t *output,
// Columns
for (i = 0; i < n; ++i) {
for (j = 0; j < n2; ++j)
temp_in[j] = (tran_low_t)fdct_round_shift(
input[j * stride + i] * 4 * Sqrt2);
temp_in[j] =
(tran_low_t)fdct_round_shift(input[j * stride + i] * 4 * Sqrt2);
ht.cols(temp_in, temp_out);
for (j = 0; j < n2; ++j)
out[j * n + i] = temp_out[j];
for (j = 0; j < n2; ++j) out[j * n + i] = temp_out[j];
}
// Rows
for (i = 0; i < n2; ++i) {
for (j = 0; j < n; ++j)
temp_in[j] = out[j + i * n];
for (j = 0; j < n; ++j) temp_in[j] = out[j + i * n];
ht.rows(temp_in, temp_out);
for (j = 0; j < n; ++j)
output[j + i * n] = (temp_out[j] + 1) >> 1;
for (j = 0; j < n; ++j) output[j + i * n] = (temp_out[j] + 1) >> 1;
}
// Note: overall scale factor of transform is 8 times unitary
}
void vp10_fht16x8_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_fht16x8_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
const int n = 8;
const int n2 = 16;
tran_low_t out[16 * 8];
@@ -1468,26 +1463,23 @@ void vp10_fht16x8_c(const int16_t *input, tran_low_t *output,
// Columns
for (i = 0; i < n2; ++i) {
for (j = 0; j < n; ++j)
temp_in[j] = (tran_low_t)fdct_round_shift(
input[j * stride + i] * 4 * Sqrt2);
temp_in[j] =
(tran_low_t)fdct_round_shift(input[j * stride + i] * 4 * Sqrt2);
ht.cols(temp_in, temp_out);
for (j = 0; j < n; ++j)
out[j * n2 + i] = temp_out[j];
for (j = 0; j < n; ++j) out[j * n2 + i] = temp_out[j];
}
// Rows
for (i = 0; i < n; ++i) {
for (j = 0; j < n2; ++j)
temp_in[j] = out[j + i * n2];
for (j = 0; j < n2; ++j) temp_in[j] = out[j + i * n2];
ht.rows(temp_in, temp_out);
for (j = 0; j < n2; ++j)
output[j + i * n2] = (temp_out[j] + 1) >> 1;
for (j = 0; j < n2; ++j) output[j + i * n2] = (temp_out[j] + 1) >> 1;
}
// Note: overall scale factor of transform is 8 times unitary
}
void vp10_fht16x32_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_fht16x32_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
const int n = 16;
const int n2 = 32;
tran_low_t out[32 * 16];
@@ -1500,17 +1492,14 @@ void vp10_fht16x32_c(const int16_t *input, tran_low_t *output,
// Columns
for (i = 0; i < n; ++i) {
for (j = 0; j < n2; ++j)
temp_in[j] = (tran_low_t)fdct_round_shift(
input[j * stride + i] * Sqrt2);
temp_in[j] = (tran_low_t)fdct_round_shift(input[j * stride + i] * Sqrt2);
ht.cols(temp_in, temp_out);
for (j = 0; j < n2; ++j)
out[j * n + i] = temp_out[j];
for (j = 0; j < n2; ++j) out[j * n + i] = temp_out[j];
}
// Rows
for (i = 0; i < n2; ++i) {
for (j = 0; j < n; ++j)
temp_in[j] = out[j + i * n];
for (j = 0; j < n; ++j) temp_in[j] = out[j + i * n];
ht.rows(temp_in, temp_out);
for (j = 0; j < n; ++j)
output[j + i * n] =
@@ -1519,8 +1508,8 @@ void vp10_fht16x32_c(const int16_t *input, tran_low_t *output,
// Note: overall scale factor of transform is 4 times unitary
}
void vp10_fht32x16_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_fht32x16_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
const int n = 16;
const int n2 = 32;
tran_low_t out[32 * 16];
@@ -1533,17 +1522,14 @@ void vp10_fht32x16_c(const int16_t *input, tran_low_t *output,
// Columns
for (i = 0; i < n2; ++i) {
for (j = 0; j < n; ++j)
temp_in[j] = (tran_low_t)fdct_round_shift(
input[j * stride + i] * Sqrt2);
temp_in[j] = (tran_low_t)fdct_round_shift(input[j * stride + i] * Sqrt2);
ht.cols(temp_in, temp_out);
for (j = 0; j < n; ++j)
out[j * n2 + i] = temp_out[j];
for (j = 0; j < n; ++j) out[j * n2 + i] = temp_out[j];
}
// Rows
for (i = 0; i < n; ++i) {
for (j = 0; j < n2; ++j)
temp_in[j] = out[j + i * n2];
for (j = 0; j < n2; ++j) temp_in[j] = out[j + i * n2];
ht.rows(temp_in, temp_out);
for (j = 0; j < n2; ++j)
output[j + i * n2] =
@@ -1807,23 +1793,23 @@ void vp10_highbd_fht4x4_c(const int16_t *input, tran_low_t *output, int stride,
}
#if CONFIG_EXT_TX
void vp10_highbd_fht4x8_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_highbd_fht4x8_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
vp10_fht4x8_c(input, output, stride, tx_type);
}
void vp10_highbd_fht8x4_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_highbd_fht8x4_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
vp10_fht8x4_c(input, output, stride, tx_type);
}
void vp10_highbd_fht8x16_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_highbd_fht8x16_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
vp10_fht8x16_c(input, output, stride, tx_type);
}
void vp10_highbd_fht16x8_c(const int16_t *input, tran_low_t *output,
int stride, int tx_type) {
void vp10_highbd_fht16x8_c(const int16_t *input, tran_low_t *output, int stride,
int tx_type) {
vp10_fht16x8_c(input, output, stride, tx_type);
}

View File

@@ -3349,8 +3349,8 @@ static void loopfilter_frame(VP10_COMP *cpi, VP10_COMMON *cm) {
if (is_lossless_requested(&cpi->oxcf)) {
cm->dering_level = 0;
} else {
cm->dering_level = vp10_dering_search(cm->frame_to_show, cpi->Source, cm,
xd);
cm->dering_level =
vp10_dering_search(cm->frame_to_show, cpi->Source, cm, xd);
vp10_dering_frame(cm->frame_to_show, cm, xd, cm->dering_level);
}
#endif // CONFIG_DERING

View File

@@ -58,42 +58,42 @@ static void fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
static void fwd_txfm_4x8(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
(void) fwd_txfm_opt;
(void)fwd_txfm_opt;
vp10_fht4x8(src_diff, coeff, diff_stride, tx_type);
}
static void fwd_txfm_8x4(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
(void) fwd_txfm_opt;
(void)fwd_txfm_opt;
vp10_fht8x4(src_diff, coeff, diff_stride, tx_type);
}
static void fwd_txfm_8x16(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
(void) fwd_txfm_opt;
(void)fwd_txfm_opt;
vp10_fht8x16(src_diff, coeff, diff_stride, tx_type);
}
static void fwd_txfm_16x8(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
(void) fwd_txfm_opt;
(void)fwd_txfm_opt;
vp10_fht16x8(src_diff, coeff, diff_stride, tx_type);
}
static void fwd_txfm_16x32(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
(void) fwd_txfm_opt;
(void)fwd_txfm_opt;
vp10_fht16x32(src_diff, coeff, diff_stride, tx_type);
}
static void fwd_txfm_32x16(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
(void) fwd_txfm_opt;
(void)fwd_txfm_opt;
vp10_fht32x16(src_diff, coeff, diff_stride, tx_type);
}
#endif // CONFIG_EXT_TX
@@ -244,48 +244,48 @@ static void highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
static void highbd_fwd_txfm_4x8(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void) fwd_txfm_opt;
(void) bd;
(void)fwd_txfm_opt;
(void)bd;
vp10_highbd_fht4x8(src_diff, coeff, diff_stride, tx_type);
}
static void highbd_fwd_txfm_8x4(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void) fwd_txfm_opt;
(void) bd;
(void)fwd_txfm_opt;
(void)bd;
vp10_highbd_fht8x4(src_diff, coeff, diff_stride, tx_type);
}
static void highbd_fwd_txfm_8x16(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void) fwd_txfm_opt;
(void) bd;
(void)fwd_txfm_opt;
(void)bd;
vp10_highbd_fht8x16(src_diff, coeff, diff_stride, tx_type);
}
static void highbd_fwd_txfm_16x8(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void) fwd_txfm_opt;
(void) bd;
(void)fwd_txfm_opt;
(void)bd;
vp10_highbd_fht16x8(src_diff, coeff, diff_stride, tx_type);
}
static void highbd_fwd_txfm_16x32(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void) fwd_txfm_opt;
(void) bd;
(void)fwd_txfm_opt;
(void)bd;
vp10_highbd_fht16x32(src_diff, coeff, diff_stride, tx_type);
}
static void highbd_fwd_txfm_32x16(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void) fwd_txfm_opt;
(void) bd;
(void)fwd_txfm_opt;
(void)bd;
vp10_highbd_fht32x16(src_diff, coeff, diff_stride, tx_type);
}
#endif // CONFIG_EXT_TX
@@ -473,29 +473,26 @@ void highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
bd);
break;
case TX_8X16:
highbd_fwd_txfm_8x16(src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt, bd);
highbd_fwd_txfm_8x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
bd);
break;
case TX_16X8:
highbd_fwd_txfm_16x8(src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt, bd);
highbd_fwd_txfm_16x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
bd);
break;
case TX_16X32:
highbd_fwd_txfm_16x32(src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt, bd);
highbd_fwd_txfm_16x32(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
bd);
break;
case TX_32X16:
highbd_fwd_txfm_32x16(src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt, bd);
highbd_fwd_txfm_32x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
bd);
break;
#endif // CONFIG_EXT_TX
case TX_4X4:
highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, tx_type,
lossless, bd);
break;
default:
assert(0);
highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, tx_type, lossless, bd);
break;
default: assert(0); break;
}
}
#endif // CONFIG_VP9_HIGHBITDEPTH

View File

@@ -18,64 +18,62 @@
#include "vpx/vpx_integer.h"
static double compute_dist(int16_t *x, int xstride, int16_t *y, int ystride,
int nhb, int nvb, int coeff_shift) {
int nhb, int nvb, int coeff_shift) {
int i, j;
double sum;
sum = 0;
for (i = 0; i < nvb << 3; i++) {
for (j = 0; j < nhb << 3; j++) {
double tmp;
tmp = x[i*xstride + j] - y[i*ystride + j];
sum += tmp*tmp;
tmp = x[i * xstride + j] - y[i * ystride + j];
sum += tmp * tmp;
}
}
return sum/(double)(1 << 2*coeff_shift);
return sum / (double)(1 << 2 * coeff_shift);
}
int vp10_dering_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
VP10_COMMON *cm,
MACROBLOCKD *xd) {
VP10_COMMON *cm, MACROBLOCKD *xd) {
int r, c;
int sbr, sbc;
int nhsb, nvsb;
od_dering_in *src;
int16_t *ref_coeff;
unsigned char *bskip;
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS] = {{0}};
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS] = { { 0 } };
int stride;
int bsize[3];
int dec[3];
int pli;
int (*mse)[MAX_DERING_LEVEL];
int best_count[MAX_DERING_LEVEL] = {0};
double tot_mse[MAX_DERING_LEVEL] = {0};
int(*mse)[MAX_DERING_LEVEL];
int best_count[MAX_DERING_LEVEL] = { 0 };
double tot_mse[MAX_DERING_LEVEL] = { 0 };
int level;
int best_level;
int global_level;
double best_tot_mse = 1e15;
int coeff_shift = VPXMAX(cm->bit_depth - 8, 0);
src = vpx_malloc(sizeof(*src)*cm->mi_rows*cm->mi_cols*64);
ref_coeff = vpx_malloc(sizeof(*ref_coeff)*cm->mi_rows*cm->mi_cols*64);
bskip = vpx_malloc(sizeof(*bskip)*cm->mi_rows*cm->mi_cols);
src = vpx_malloc(sizeof(*src) * cm->mi_rows * cm->mi_cols * 64);
ref_coeff = vpx_malloc(sizeof(*ref_coeff) * cm->mi_rows * cm->mi_cols * 64);
bskip = vpx_malloc(sizeof(*bskip) * cm->mi_rows * cm->mi_cols);
vp10_setup_dst_planes(xd->plane, frame, 0, 0);
for (pli = 0; pli < 3; pli++) {
dec[pli] = xd->plane[pli].subsampling_x;
bsize[pli] = 8 >> dec[pli];
}
stride = bsize[0]*cm->mi_cols;
for (r = 0; r < bsize[0]*cm->mi_rows; ++r) {
for (c = 0; c < bsize[0]*cm->mi_cols; ++c) {
stride = bsize[0] * cm->mi_cols;
for (r = 0; r < bsize[0] * cm->mi_rows; ++r) {
for (c = 0; c < bsize[0] * cm->mi_cols; ++c) {
#if CONFIG_VPX_HIGHBITDEPTH
if (cm->use_highbitdepth) {
src[r * stride + c] =
CONVERT_TO_SHORTPTR(xd->plane[0].dst.buf)
[r*xd->plane[0].dst.stride + c];
src[r * stride + c] = CONVERT_TO_SHORTPTR(
xd->plane[0].dst.buf)[r * xd->plane[0].dst.stride + c];
ref_coeff[r * stride + c] =
CONVERT_TO_SHORTPTR(ref->y_buffer)[r * ref->y_stride + c];
} else {
#endif
src[r * stride + c] =
xd->plane[0].dst.buf[r*xd->plane[0].dst.stride + c];
xd->plane[0].dst.buf[r * xd->plane[0].dst.stride + c];
ref_coeff[r * stride + c] = ref->y_buffer[r * ref->y_stride + c];
#if CONFIG_VPX_HIGHBITDEPTH
}
@@ -89,37 +87,35 @@ int vp10_dering_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
bskip[r * cm->mi_cols + c] = mbmi->skip;
}
}
nvsb = (cm->mi_rows + MAX_MIB_SIZE - 1)/MAX_MIB_SIZE;
nhsb = (cm->mi_cols + MAX_MIB_SIZE - 1)/MAX_MIB_SIZE;
mse = vpx_malloc(nvsb*nhsb*sizeof(*mse));
nvsb = (cm->mi_rows + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE;
nhsb = (cm->mi_cols + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE;
mse = vpx_malloc(nvsb * nhsb * sizeof(*mse));
for (sbr = 0; sbr < nvsb; sbr++) {
for (sbc = 0; sbc < nhsb; sbc++) {
int best_mse = 1000000000;
int nvb, nhb;
int16_t dst[MAX_MIB_SIZE*MAX_MIB_SIZE*8*8];
int16_t dst[MAX_MIB_SIZE * MAX_MIB_SIZE * 8 * 8];
best_level = 0;
nhb = VPXMIN(MAX_MIB_SIZE, cm->mi_cols - MAX_MIB_SIZE*sbc);
nvb = VPXMIN(MAX_MIB_SIZE, cm->mi_rows - MAX_MIB_SIZE*sbr);
nhb = VPXMIN(MAX_MIB_SIZE, cm->mi_cols - MAX_MIB_SIZE * sbc);
nvb = VPXMIN(MAX_MIB_SIZE, cm->mi_rows - MAX_MIB_SIZE * sbr);
for (level = 0; level < 64; level++) {
int threshold;
threshold = level << coeff_shift;
od_dering(
&OD_DERING_VTBL_C,
dst,
MAX_MIB_SIZE*bsize[0],
&src[sbr*stride*bsize[0]*MAX_MIB_SIZE +
sbc*bsize[0]*MAX_MIB_SIZE],
cm->mi_cols*bsize[0], nhb, nvb, sbc, sbr, nhsb, nvsb, 0, dir, 0,
&bskip[MAX_MIB_SIZE*sbr*cm->mi_cols + MAX_MIB_SIZE*sbc],
&OD_DERING_VTBL_C, dst, MAX_MIB_SIZE * bsize[0],
&src[sbr * stride * bsize[0] * MAX_MIB_SIZE +
sbc * bsize[0] * MAX_MIB_SIZE],
cm->mi_cols * bsize[0], nhb, nvb, sbc, sbr, nhsb, nvsb, 0, dir, 0,
&bskip[MAX_MIB_SIZE * sbr * cm->mi_cols + MAX_MIB_SIZE * sbc],
cm->mi_cols, threshold, OD_DERING_NO_CHECK_OVERLAP, coeff_shift);
mse[nhsb*sbr+sbc][level] = (int)compute_dist(
dst, MAX_MIB_SIZE*bsize[0],
&ref_coeff[sbr*stride*bsize[0]*MAX_MIB_SIZE +
sbc*bsize[0]*MAX_MIB_SIZE],
mse[nhsb * sbr + sbc][level] = (int)compute_dist(
dst, MAX_MIB_SIZE * bsize[0],
&ref_coeff[sbr * stride * bsize[0] * MAX_MIB_SIZE +
sbc * bsize[0] * MAX_MIB_SIZE],
stride, nhb, nvb, coeff_shift);
tot_mse[level] += mse[nhsb*sbr+sbc][level];
if (mse[nhsb*sbr+sbc][level] < best_mse) {
best_mse = mse[nhsb*sbr+sbc][level];
tot_mse[level] += mse[nhsb * sbr + sbc][level];
if (mse[nhsb * sbr + sbc][level] < best_mse) {
best_mse = mse[nhsb * sbr + sbc][level];
best_level = level;
}
}
@@ -134,11 +130,11 @@ int vp10_dering_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
for (sbr = 0; sbr < nvsb; sbr++) {
for (sbc = 0; sbc < nhsb; sbc++) {
int gi;
int best_mse = mse[nhsb*sbr+sbc][0];
int best_mse = mse[nhsb * sbr + sbc][0];
for (gi = 1; gi < 4; gi++) {
level = compute_level_from_index(global_level, gi);
if (mse[nhsb*sbr+sbc][level] < best_mse) {
best_mse = mse[nhsb*sbr+sbc][level];
if (mse[nhsb * sbr + sbc][level] < best_mse) {
best_mse = mse[nhsb * sbr + sbc][level];
}
}
tot_mse += best_mse;
@@ -153,24 +149,25 @@ int vp10_dering_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
for (sbc = 0; sbc < nhsb; sbc++) {
int gi;
int best_gi;
int best_mse = mse[nhsb*sbr+sbc][0];
int best_mse = mse[nhsb * sbr + sbc][0];
best_gi = 0;
for (gi = 1; gi < DERING_REFINEMENT_LEVELS; gi++) {
level = compute_level_from_index(best_level, gi);
if (mse[nhsb*sbr+sbc][level] < best_mse) {
if (mse[nhsb * sbr + sbc][level] < best_mse) {
best_gi = gi;
best_mse = mse[nhsb*sbr+sbc][level];
best_mse = mse[nhsb * sbr + sbc][level];
}
}
cm->mi_grid_visible[MAX_MIB_SIZE*sbr*cm->mi_stride + MAX_MIB_SIZE*sbc]->
mbmi.dering_gain = best_gi;
cm->mi_grid_visible[MAX_MIB_SIZE * sbr * cm->mi_stride +
MAX_MIB_SIZE * sbc]
->mbmi.dering_gain = best_gi;
}
}
#else
best_level = 0;
for (level = 0; level < MAX_DERING_LEVEL; level++) {
if (tot_mse[level] < tot_mse[best_level]) best_level = level;
}
best_level = 0;
for (level = 0; level < MAX_DERING_LEVEL; level++) {
if (tot_mse[level] < tot_mse[best_level]) best_level = level;
}
#endif
vpx_free(src);
vpx_free(ref_coeff);

View File

@@ -625,9 +625,7 @@ static void get_entropy_contexts_plane(
t_left[i] = !!*(const uint32_t *)&left[i];
break;
#endif // CONFIG_EXT_TX
default:
assert(0 && "Invalid transform size.");
break;
default: assert(0 && "Invalid transform size."); break;
}
}