Commit d9a0cbb1 authored by Angie Chiang's avatar Angie Chiang

Use vp10_[fwd/inv]_txfm2d_add_#x# for bd 10

Change-Id: Ie35bdbd7aafae693e3106d7ccbbdd8e65ee8800c
parent 2b93fde9
......@@ -15,6 +15,7 @@
#include "vp10/common/blockd.h"
#include "vp10/common/enums.h"
#include "vp10/common/idct.h"
#include "vp10/common/vp10_inv_txfm2d_cfg.h"
#include "vpx_dsp/inv_txfm.h"
#include "vpx_ports/mem.h"
......@@ -1288,7 +1289,11 @@ void vp10_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest,
switch (tx_type) {
case DCT_DCT:
vp10_highbd_idct4x4_add(input, dest, stride, eob, bd);
if (bd == 10)
vp10_inv_txfm2d_add_4x4(input, CONVERT_TO_SHORTPTR(dest), stride,
&inv_txfm_2d_cfg_dct_dct_4, bd);
else
vp10_highbd_idct4x4_add(input, dest, stride, eob, bd);
break;
case ADST_DCT:
case DCT_ADST:
......@@ -1327,7 +1332,11 @@ void vp10_highbd_inv_txfm_add_8x8(const tran_low_t *input, uint8_t *dest,
TX_TYPE tx_type) {
switch (tx_type) {
case DCT_DCT:
vp10_highbd_idct8x8_add(input, dest, stride, eob, bd);
if (bd == 10)
vp10_inv_txfm2d_add_8x8(input, CONVERT_TO_SHORTPTR(dest), stride,
&inv_txfm_2d_cfg_dct_dct_8, bd);
else
vp10_highbd_idct8x8_add(input, dest, stride, eob, bd);
break;
case ADST_DCT:
case DCT_ADST:
......@@ -1366,7 +1375,11 @@ void vp10_highbd_inv_txfm_add_16x16(const tran_low_t *input, uint8_t *dest,
TX_TYPE tx_type) {
switch (tx_type) {
case DCT_DCT:
vp10_highbd_idct16x16_add(input, dest, stride, eob, bd);
if (bd == 10)
vp10_inv_txfm2d_add_16x16(input, CONVERT_TO_SHORTPTR(dest), stride,
&inv_txfm_2d_cfg_dct_dct_16, bd);
else
vp10_highbd_idct16x16_add(input, dest, stride, eob, bd);
break;
case ADST_DCT:
case DCT_ADST:
......
......@@ -377,6 +377,7 @@ void vp10_xform_quant(MACROBLOCK *x, int plane, int block, int blk_row,
src_diff = &p->src_diff[4 * (blk_row * diff_stride + blk_col)];
#if CONFIG_VP9_HIGHBITDEPTH
fwd_txfm_param.bd = xd->bd;
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
highbd_fwd_txfm(src_diff, coeff, diff_stride, &fwd_txfm_param);
if (xform_quant_idx != VP10_XFORM_QUANT_SKIP_QUANT) {
......
......@@ -13,6 +13,7 @@
#include "./vpx_dsp_rtcd.h"
#include "vp10/common/idct.h"
#include "vp10/common/vp10_fwd_txfm2d_cfg.h"
#include "vp10/encoder/hybrid_fwd_txfm.h"
static INLINE void fdct32x32(int rd_transform, const int16_t *src,
......@@ -193,7 +194,8 @@ static void fwd_txfm_32x32(int rd_transform, const int16_t *src_diff,
#if CONFIG_VP9_HIGHBITDEPTH
void vp10_highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type, int lossless) {
int diff_stride, TX_TYPE tx_type, int lossless,
const int bd) {
if (lossless) {
assert(tx_type == DCT_DCT);
vp10_highbd_fwht4x4(src_diff, coeff, diff_stride);
......@@ -202,7 +204,12 @@ void vp10_highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
switch (tx_type) {
case DCT_DCT:
vp10_highbd_fht4x4(src_diff, coeff, diff_stride, tx_type);
if (bd == 10) {
vp10_fwd_txfm2d_4x4(src_diff, coeff, diff_stride,
&fwd_txfm_2d_cfg_dct_dct_4, bd);
} else {
vp10_highbd_fht4x4(src_diff, coeff, diff_stride, tx_type);
}
break;
case ADST_DCT:
case DCT_ADST:
......@@ -237,10 +244,15 @@ void vp10_highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
static void highbd_fwd_txfm_8x8(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void)fwd_txfm_opt;
switch (tx_type) {
case DCT_DCT:
if (bd == 10) {
vp10_fwd_txfm2d_8x8(src_diff, coeff, diff_stride,
&fwd_txfm_2d_cfg_dct_dct_8, bd);
break;
}
case ADST_DCT:
case DCT_ADST:
case ADST_ADST:
......@@ -278,10 +290,15 @@ static void highbd_fwd_txfm_8x8(const int16_t *src_diff, tran_low_t *coeff,
static void highbd_fwd_txfm_16x16(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type,
FWD_TXFM_OPT fwd_txfm_opt) {
FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
(void)fwd_txfm_opt;
switch (tx_type) {
case DCT_DCT:
if (bd == 10) {
vp10_fwd_txfm2d_16x16(src_diff, coeff, diff_stride,
&fwd_txfm_2d_cfg_dct_dct_16, bd);
break;
}
case ADST_DCT:
case DCT_ADST:
case ADST_ADST:
......@@ -319,7 +336,9 @@ static void highbd_fwd_txfm_16x16(const int16_t *src_diff, tran_low_t *coeff,
static void highbd_fwd_txfm_32x32(int rd_transform, const int16_t *src_diff,
tran_low_t *coeff, int diff_stride,
TX_TYPE tx_type, FWD_TXFM_OPT fwd_txfm_opt) {
TX_TYPE tx_type, FWD_TXFM_OPT fwd_txfm_opt,
const int bd) {
(void)bd;
switch (tx_type) {
case DCT_DCT:
if (fwd_txfm_opt == FWD_TXFM_OPT_NORMAL)
......@@ -390,20 +409,23 @@ void highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
const TX_SIZE tx_size = fwd_txfm_param->tx_size;
const int rd_transform = fwd_txfm_param->rd_transform;
const int lossless = fwd_txfm_param->lossless;
const int bd = fwd_txfm_param->bd;
switch (tx_size) {
case TX_32X32:
highbd_fwd_txfm_32x32(rd_transform, src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt);
fwd_txfm_opt, bd);
break;
case TX_16X16:
highbd_fwd_txfm_16x16(src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt);
fwd_txfm_opt, bd);
break;
case TX_8X8:
highbd_fwd_txfm_8x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
highbd_fwd_txfm_8x8(src_diff, coeff, diff_stride, tx_type,
fwd_txfm_opt, bd);
break;
case TX_4X4:
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, tx_type, lossless);
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, tx_type,
lossless, bd);
break;
default:
assert(0);
......
......@@ -21,6 +21,9 @@ typedef struct FWD_TXFM_PARAM {
FWD_TXFM_OPT fwd_txfm_opt;
int rd_transform;
int lossless;
#if CONFIG_VP9_HIGHBITDEPTH
int bd;
#endif // CONFIG_VP9_HIGHBITDEPTH
} FWD_TXFM_PARAM;
#ifdef __cplusplus
......@@ -36,7 +39,8 @@ void vp10_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
void highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, FWD_TXFM_PARAM *fwd_txfm_param);
void vp10_highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, TX_TYPE tx_type, int lossless);
int diff_stride, TX_TYPE tx_type, int lossless,
const int bd);
#endif // CONFIG_VP9_HIGHBITDEPTH
static INLINE int get_tx1d_size(TX_SIZE tx_size) {
......
......@@ -1970,7 +1970,7 @@ static int64_t rd_pick_intra4x4block(VP10_COMP *cpi, MACROBLOCK *x,
const int coeff_ctx = combine_entropy_contexts(*(tempa + idx),
*(templ + idy));
#endif // CONFIG_VAR_TX
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, 8, DCT_DCT, 1);
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, 8, DCT_DCT, 1, xd->bd);
vp10_regular_quantize_b_4x4(x, 0, block, so->scan, so->iscan);
#if CONFIG_VAR_TX
ratey += cost_coeffs(x, 0, block, coeff_ctx, TX_4X4, so->scan,
......@@ -1997,7 +1997,7 @@ static int64_t rd_pick_intra4x4block(VP10_COMP *cpi, MACROBLOCK *x,
const int coeff_ctx = combine_entropy_contexts(*(tempa + idx),
*(templ + idy));
#endif // CONFIG_VAR_TX
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, 8, tx_type, 0);
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, 8, tx_type, 0, xd->bd);
vp10_regular_quantize_b_4x4(x, 0, block, so->scan, so->iscan);
#if CONFIG_VAR_TX
ratey += cost_coeffs(x, 0, block, coeff_ctx, TX_4X4, so->scan,
......@@ -4305,7 +4305,7 @@ static int64_t encode_inter_mb_segment(VP10_COMP *cpi,
#if CONFIG_VP9_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
vp10_highbd_fwd_txfm_4x4(src_diff, coeff, 8, DCT_DCT,
xd->lossless[mi->mbmi.segment_id]);
xd->lossless[mi->mbmi.segment_id], xd->bd);
} else {
vp10_fwd_txfm_4x4(src_diff, coeff, 8, DCT_DCT,
xd->lossless[mi->mbmi.segment_id]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment