diff options
author | Angie Chiang <angiebird@google.com> | 2019-01-28 12:15:58 -0800 |
---|---|---|
committer | Angie Chiang <angiebird@google.com> | 2019-01-28 12:18:52 -0800 |
commit | 33a39c5a1a78a93880caf6813a3feb042f89feaf (patch) | |
tree | 7d791173183fab6b34090b64bbc2c8c710b20dac | |
parent | 9259bb370a3ba129edb73ee5f872099ad7425aee (diff) | |
download | libvpx-33a39c5a1a78a93880caf6813a3feb042f89feaf.tar libvpx-33a39c5a1a78a93880caf6813a3feb042f89feaf.tar.gz libvpx-33a39c5a1a78a93880caf6813a3feb042f89feaf.tar.bz2 libvpx-33a39c5a1a78a93880caf6813a3feb042f89feaf.zip |
Add predict_mv_mode_arr()
The function predicts the mv_mode for each prediction block in
diagonal order.
Change-Id: I7dcfcdb317ffa334cb40bb435baa71b5db62252b
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 7d096fca8..eaeb3d96e 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -6197,9 +6197,11 @@ static int find_best_ref_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, return best_mv_mode; } -void predict_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, GF_PICTURE *gf_picture, - int frame_idx, TplDepFrame *tpl_frame, int rf_idx, - BLOCK_SIZE bsize, int mi_row, int mi_col, double *rd) { +static void predict_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, + GF_PICTURE *gf_picture, int frame_idx, + TplDepFrame *tpl_frame, int rf_idx, + BLOCK_SIZE bsize, int mi_row, int mi_col, + double *rd) { const int mi_height = num_8x8_blocks_high_lookup[bsize]; const int mi_width = num_8x8_blocks_wide_lookup[bsize]; int tmp_mv_mode_arr[kMvPreCheckSize]; @@ -6282,6 +6284,32 @@ void predict_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, GF_PICTURE *gf_picture, } } +void predict_mv_mode_arr(VP9_COMP *cpi, MACROBLOCK *x, GF_PICTURE *gf_picture, + int frame_idx, TplDepFrame *tpl_frame, int rf_idx, + BLOCK_SIZE bsize) { + const int mi_height = num_8x8_blocks_high_lookup[bsize]; + const int mi_width = num_8x8_blocks_wide_lookup[bsize]; + const int unit_rows = tpl_frame->mi_rows / mi_height; + const int unit_cols = tpl_frame->mi_cols / mi_width; + const int max_diagonal_lines = unit_rows + unit_cols - 1; + int idx; + for (idx = 0; idx < max_diagonal_lines; ++idx) { + int r; + for (r = VPXMAX(idx - unit_cols + 1, 0); r <= VPXMIN(idx, unit_rows - 1); + ++r) { + double rd; // TODO(angiebird): Use this information later. + int c = idx - r; + int mi_row = r * mi_height; + int mi_col = c * mi_width; + assert(c >= 0 && c < unit_cols); + assert(mi_row >= 0 && mi_row < tpl_frame->mi_rows); + assert(mi_col >= 0 && mi_col < tpl_frame->mi_cols); + predict_mv_mode(cpi, x, gf_picture, frame_idx, tpl_frame, rf_idx, bsize, + mi_row, mi_col, &rd); + } + } +} + static double get_feature_score(uint8_t *buf, ptrdiff_t stride, int rows, int cols) { double IxIx = 0; |