Set ext_delta_q default and bug fix * Set ext_delta_q experiment as default * Update test for ext_delta_q * Fix a bug (BUG=aomedia:485) in encoder which cause decoder and encoder mismatch. Change-Id: I28ece21c32ff8621f8837ed4807b02eef8c92e29
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index cac1aaf..6fb7485 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -2453,11 +2453,13 @@ #endif PICK_MODE_CONTEXT *ctx, int *rate) { MACROBLOCK *const x = &td->mb; -#if CONFIG_MOTION_VAR && CONFIG_NCOBMC +#if (CONFIG_MOTION_VAR && CONFIG_NCOBMC) | CONFIG_EXT_DELTA_Q MACROBLOCKD *xd = &x->e_mbd; MB_MODE_INFO *mbmi; +#if CONFIG_MOTION_VAR && CONFIG_NCOBMC int check_ncobmc; #endif +#endif set_offsets(cpi, tile, x, mi_row, mi_col, bsize); #if CONFIG_EXT_PARTITION_TYPES @@ -2481,6 +2483,13 @@ encode_superblock(cpi, td, tp, dry_run, mi_row, mi_col, bsize, ctx, rate); if (!dry_run) { +#if CONFIG_EXT_DELTA_Q + mbmi = &xd->mi[0]->mbmi; + if (bsize == BLOCK_64X64 && mbmi->skip == 1 && is_inter_block(mbmi) && + cpi->common.delta_lf_present_flag) { + mbmi->current_delta_lf_from_base = xd->prev_delta_lf_from_base; + } +#endif #if CONFIG_SUPERTX update_stats(&cpi->common, td, mi_row, mi_col, 0); #else
diff --git a/configure b/configure index 817085d..5bb32d3 100755 --- a/configure +++ b/configure
@@ -494,6 +494,7 @@ soft_enable dual_filter soft_enable motion_var soft_enable warped_motion + soft_enable ext_delta_q # Backwards/jenkins compatibility with --enable-aom-highbitdepth enabled aom_highbitdepth && enable_feature highbitdepth
diff --git a/test/aq_segment_test.cc b/test/aq_segment_test.cc index a9bad82..5dc93ec 100644 --- a/test/aq_segment_test.cc +++ b/test/aq_segment_test.cc
@@ -37,12 +37,18 @@ if (video->frame() == 1) { encoder->Control(AOME_SET_CPUUSED, set_cpu_used_); encoder->Control(AV1E_SET_AQ_MODE, aq_mode_); +#if CONFIG_EXT_DELTA_Q + encoder->Control(AV1E_SET_DELTAQ_MODE, deltaq_mode_); +#endif encoder->Control(AOME_SET_MAX_INTRA_BITRATE_PCT, 100); } } void DoTest(int aq_mode) { aq_mode_ = aq_mode; +#if CONFIG_EXT_DELTA_Q + deltaq_mode_ = 0; +#endif cfg_.kf_max_dist = 12; cfg_.rc_min_quantizer = 8; cfg_.rc_max_quantizer = 56; @@ -59,6 +65,9 @@ int set_cpu_used_; int aq_mode_; +#if CONFIG_EXT_DELTA_Q + int deltaq_mode_; +#endif }; // Validate that this AQ segmentation mode (AQ=1, variance_ap) @@ -81,12 +90,11 @@ TEST_P(AqSegmentTestLarge, TestNoMisMatchAQ3) { DoTest(3); } -#if CONFIG_DELTA_Q +#if CONFIG_DELTA_Q & !CONFIG_EXT_DELTA_Q // Validate that this AQ mode (AQ=4, delta q) // encodes and decodes without a mismatch. TEST_P(AqSegmentTest, TestNoMisMatchAQ4) { cfg_.rc_end_usage = AOM_CQ; - aq_mode_ = 4; ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, @@ -96,6 +104,20 @@ } #endif +#if CONFIG_EXT_DELTA_Q +// Validate that this delta q mode +// encodes and decodes without a mismatch. +TEST_P(AqSegmentTest, TestNoMisMatchExtDeltaQ) { + cfg_.rc_end_usage = AOM_CQ; + aq_mode_ = 0; + deltaq_mode_ = 2; + ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, + 30, 1, 0, 100); + + ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); +} +#endif + AV1_INSTANTIATE_TEST_CASE(AqSegmentTest, ::testing::Values(::libaom_test::kRealTime, ::libaom_test::kOnePassGood),