From fed8a1837fd6b1e4e36495be8210bd63bfb2bb8f Mon Sep 17 00:00:00 2001 From: Daniel Kang Date: Thu, 2 Aug 2012 17:03:14 -0700 Subject: 16x16 DCT blocks. Set on all 16x16 intra/inter modes Features: - Butterfly fDCT/iDCT - Loop filter does not filter internal edges with 16x16 - Optimize coefficient function - Update coefficient probability function - RD - Entropy stats - 16x16 is a config option Have not tested with experiments. hd: 2.60% std-hd: 2.43% yt: 1.32% derf: 0.60% Change-Id: I96fb090517c30c5da84bad4fae602c3ec0c58b1c --- vp8/encoder/encodeintra.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'vp8/encoder/encodeintra.c') diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c index 01ae03a23..325efeb6b 100644 --- a/vp8/encoder/encodeintra.c +++ b/vp8/encoder/encodeintra.c @@ -160,23 +160,43 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) { ENCODEMB_INVOKE(&rtcd->encodemb, submby)(x->src_diff, *(b->base_src), x->e_mbd.predictor, b->src_stride); +#if CONFIG_TX16X16 + if (tx_type == TX_16X16) + vp8_transform_intra_mby_16x16(x); + else +#endif if (tx_type == TX_8X8) vp8_transform_intra_mby_8x8(x); else vp8_transform_intra_mby(x); +#if CONFIG_TX16X16 + if (tx_type == TX_16X16) + vp8_quantize_mby_16x16(x); + else +#endif if (tx_type == TX_8X8) vp8_quantize_mby_8x8(x); else vp8_quantize_mby(x); if (x->optimize) { +#if CONFIG_TX16X16 + if (tx_type == TX_16X16) + vp8_optimize_mby_16x16(x, rtcd); + else +#endif if (tx_type == TX_8X8) vp8_optimize_mby_8x8(x, rtcd); else vp8_optimize_mby(x, rtcd); } +#if CONFIG_TX16X16 + if (tx_type == TX_16X16) + vp8_inverse_transform_mby_16x16(IF_RTCD(&rtcd->common->idct), &x->e_mbd); + else +#endif if (tx_type == TX_8X8) vp8_inverse_transform_mby_8x8(IF_RTCD(&rtcd->common->idct), &x->e_mbd); else @@ -220,6 +240,9 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) { void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) { int tx_type = x->e_mbd.mode_info_context->mbmi.txfm_size; +#if CONFIG_TX16X16 + if (tx_type == TX_16X16) tx_type = TX_8X8; // 16x16 for U and V should default to 8x8 behavior. +#endif #if CONFIG_COMP_INTRA_PRED if (x->e_mbd.mode_info_context->mbmi.second_uv_mode == (MB_PREDICTION_MODE)(DC_PRED - 1)) { #endif -- cgit v1.2.3