From f28ea3e830a2447bc9a3813c302f36594d1376d3 Mon Sep 17 00:00:00 2001 From: Debargha Mukherjee Date: Mon, 8 Feb 2016 15:59:17 -0800 Subject: [PATCH] Explicitly set tx_type for sub8x8 blocks Fixes an issue where the tx_type was not set correctly for sub8x8 inter and intra blocks. In the current syntax, for sub8x8 blocks, there is still a single tx_type that is transmitted. Ideally, this should be searched for the best rd performance, albeit at the expense of encode speed. For now, we just set it to DCT_DCT. Previously it was left incorrectly as what was used for the previous non sub8x8 block. derflr: BDRATE -0.277% Change-Id: If76ba903bfbfd4d374cf1ac7d1daee50e92f0edd --- vp10/encoder/rdopt.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vp10/encoder/rdopt.c b/vp10/encoder/rdopt.c index b1077cb21..c62da964a 100644 --- a/vp10/encoder/rdopt.c +++ b/vp10/encoder/rdopt.c @@ -1073,6 +1073,12 @@ static int64_t rd_pick_intra_sub_8x8_y_mode(VP10_COMP *cpi, MACROBLOCK *mb, memcpy(t_above, xd->plane[0].above_context, sizeof(t_above)); memcpy(t_left, xd->plane[0].left_context, sizeof(t_left)); + // TODO(any): Add search of the tx_type to improve rd performance at the + // expense of speed. + mic->mbmi.tx_type = DCT_DCT; + + // Later we can add search of the tx_type to improve results. + // For now just set it to DCT_DCT // Pick modes for each sub-block (of size 4x4, 4x8, or 8x4) in an 8x8 block. for (idy = 0; idy < 2; idy += num_4x4_blocks_high) { for (idx = 0; idx < 2; idx += num_4x4_blocks_wide) { @@ -3940,6 +3946,10 @@ void vp10_rd_pick_inter_mode_sub8x8(VP10_COMP *cpi, for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i) filter_cache[i] = INT64_MAX; + // TODO(any): Add search of the tx_type to improve rd performance at the + // expense of speed. + mbmi->tx_type = DCT_DCT; + if (cm->interp_filter != BILINEAR) { tmp_best_filter = EIGHTTAP; if (x->source_variance < sf->disable_filter_search_var_thresh) { -- 2.49.0