diff options
-rw-r--r-- | test/datarate_test.cc | 9 | ||||
-rw-r--r-- | vp9/decoder/vp9_decoder.c | 7 | ||||
-rw-r--r-- | vp9/encoder/vp9_bitstream.c | 14 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.c | 6 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.h | 15 |
5 files changed, 27 insertions, 24 deletions
diff --git a/test/datarate_test.cc b/test/datarate_test.cc index 1b921f0a1..e8604a6d7 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -570,9 +570,9 @@ TEST_P(DatarateTestVP9Large, BasicRateTargeting3TemporalLayersFrameDropping) { << " The datarate for the file is greater than target by too much, " "for layer: " << j; // Expect some frame drops in this test: for this 200 frames test, - // expect at least 10% and not more than 50% drops. + // expect at least 10% and not more than 60% drops. ASSERT_GE(num_drops_, 20); - ASSERT_LE(num_drops_, 100); + ASSERT_LE(num_drops_, 120); } } @@ -580,8 +580,5 @@ VP8_INSTANTIATE_TEST_CASE(DatarateTestLarge, ALL_TEST_MODES); VP9_INSTANTIATE_TEST_CASE(DatarateTestVP9Large, ::testing::Values(::libvpx_test::kOnePassGood, ::libvpx_test::kRealTime), - ::testing::Range(2, 5)); -// TODO(marpan): Speed 5 to 7 fails on one of these tests, for -// real-time mode. So for now test up to speed 4, and start at 2 -// (since speed 0 and 1 are slow). Enable more speeds when issue is fixed. + ::testing::Range(2, 7)); } // namespace diff --git a/vp9/decoder/vp9_decoder.c b/vp9/decoder/vp9_decoder.c index c954a5d0e..b3e3f9c15 100644 --- a/vp9/decoder/vp9_decoder.c +++ b/vp9/decoder/vp9_decoder.c @@ -422,19 +422,12 @@ int vp9_get_raw_frame(VP9D_COMP *pbi, YV12_BUFFER_CONFIG *sd, #if CONFIG_VP9_POSTPROC ret = vp9_post_proc_frame(&pbi->common, sd, flags); #else - - if (pbi->common.frame_to_show) { *sd = *pbi->common.frame_to_show; sd->y_width = pbi->common.width; sd->y_height = pbi->common.height; sd->uv_width = sd->y_width >> pbi->common.subsampling_x; sd->uv_height = sd->y_height >> pbi->common.subsampling_y; - ret = 0; - } else { - ret = -1; - } - #endif /*!CONFIG_POSTPROC*/ vp9_clear_system_state(); return ret; diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c index dbefe1ecf..4313418d4 100644 --- a/vp9/encoder/vp9_bitstream.c +++ b/vp9/encoder/vp9_bitstream.c @@ -521,7 +521,7 @@ static void update_coef_probs_common(vp9_writer* const bc, VP9_COMP *cpi, const int entropy_nodes_update = UNCONSTRAINED_NODES; int i, j, k, l, t; switch (cpi->sf.use_fast_coef_updates) { - case 0: { + case TWO_LOOP: { /* dry run to see if there is any udpate at all needed */ int savings = 0; int update[2] = {0, 0}; @@ -596,14 +596,14 @@ static void update_coef_probs_common(vp9_writer* const bc, VP9_COMP *cpi, return; } - case 1: - case 2: { + case ONE_LOOP: + case ONE_LOOP_REDUCED: { const int prev_coef_contexts_to_update = - cpi->sf.use_fast_coef_updates == 2 ? COEFF_CONTEXTS >> 1 - : COEFF_CONTEXTS; + cpi->sf.use_fast_coef_updates == ONE_LOOP_REDUCED ? + COEFF_CONTEXTS >> 1 : COEFF_CONTEXTS; const int coef_band_to_update = - cpi->sf.use_fast_coef_updates == 2 ? COEF_BANDS >> 1 - : COEF_BANDS; + cpi->sf.use_fast_coef_updates == ONE_LOOP_REDUCED ? + COEF_BANDS >> 1 : COEF_BANDS; int updates = 0; int noupdates_before_first = 0; for (i = 0; i < PLANE_TYPES; ++i) { diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index 7b983f992..9ca1b5eda 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -111,7 +111,7 @@ static void set_good_speed_feature(VP9_COMP *cpi, sf->adaptive_rd_thresh = 3; sf->mode_skip_start = 6; - sf->use_fast_coef_updates = 2; + sf->use_fast_coef_updates = ONE_LOOP_REDUCED; sf->use_fast_coef_costing = 1; } // Additions or changes for speed 3 and above @@ -220,7 +220,7 @@ static void set_rt_speed_feature(VP9_COMMON *cm, sf->use_uv_intra_rd_estimate = 1; sf->skip_encode_sb = 1; sf->subpel_iters_per_step = 1; - sf->use_fast_coef_updates = 2; + sf->use_fast_coef_updates = ONE_LOOP_REDUCED; sf->adaptive_rd_thresh = 4; sf->mode_skip_start = 6; sf->allow_skip_recode = 0; @@ -328,7 +328,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) { sf->use_uv_intra_rd_estimate = 0; sf->allow_skip_recode = 0; sf->lpf_pick = LPF_PICK_FROM_FULL_IMAGE; - sf->use_fast_coef_updates = 0; + sf->use_fast_coef_updates = TWO_LOOP; sf->use_fast_coef_costing = 0; sf->mode_skip_start = MAX_MODES; // Mode index at which mode skip mask set sf->use_nonrd_pick_mode = 0; diff --git a/vp9/encoder/vp9_speed_features.h b/vp9/encoder/vp9_speed_features.h index 826043910..922f8803e 100644 --- a/vp9/encoder/vp9_speed_features.h +++ b/vp9/encoder/vp9_speed_features.h @@ -113,6 +113,19 @@ typedef enum { VAR_BASED_PARTITION } PARTITION_SEARCH_TYPE; +typedef enum { + // Does a dry run to see if any of the contexts need to be updated or not, + // before the final run. + TWO_LOOP = 0, + + // No dry run conducted. + ONE_LOOP = 1, + + // No dry run, also only half the coef contexts and bands are updated. + // The rest are not updated at all. + ONE_LOOP_REDUCED = 2 +} FAST_COEFF_UPDATE; + typedef struct { // Frame level coding parameter update int frame_parameter_update; @@ -291,7 +304,7 @@ typedef struct { // This feature limits the number of coefficients updates we actually do // by only looking at counts from 1/2 the bands. - int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced + FAST_COEFF_UPDATE use_fast_coef_updates; // This flag controls the use of non-RD mode decision. int use_nonrd_pick_mode; |