diff options
author | Dmitry Kovalev <dkovalev@google.com> | 2013-11-25 10:59:56 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2013-11-25 10:59:56 -0800 |
commit | 3e7227727296f9e4d164ecd2d8f0b8b9af535b6c (patch) | |
tree | 9ee6f3906a60a214c149499d865f69c2243188b2 /vp9/encoder | |
parent | cfc1f91c9f1dc09b4dc2612473954ae709efaff4 (diff) | |
parent | 485682c30a5eca11082425a46bc5f3e1146db48c (diff) | |
download | libvpx-3e7227727296f9e4d164ecd2d8f0b8b9af535b6c.tar libvpx-3e7227727296f9e4d164ecd2d8f0b8b9af535b6c.tar.gz libvpx-3e7227727296f9e4d164ecd2d8f0b8b9af535b6c.tar.bz2 libvpx-3e7227727296f9e4d164ecd2d8f0b8b9af535b6c.zip |
Merge "Adding select_tx_size() function."
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_rdopt.c | 72 |
1 files changed, 28 insertions, 44 deletions
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index cad7b9d63..9fed2006e 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -731,6 +731,32 @@ static void choose_largest_txfm_size(VP9_COMP *cpi, MACROBLOCK *x, cpi->tx_stepdown_count[0]++; } +static TX_SIZE select_tx_size(TX_MODE tx_mode, TX_SIZE max_tx_size, + int64_t rd[][2]) { + if (max_tx_size == TX_32X32 && + (tx_mode == ALLOW_32X32 || + (tx_mode == TX_MODE_SELECT && + rd[TX_32X32][1] < rd[TX_16X16][1] && + rd[TX_32X32][1] < rd[TX_8X8][1] && + rd[TX_32X32][1] < rd[TX_4X4][1]))) { + return TX_32X32; + } else if (max_tx_size >= TX_16X16 && + (tx_mode == ALLOW_16X16 || + tx_mode == ALLOW_32X32 || + (tx_mode == TX_MODE_SELECT && + rd[TX_16X16][1] < rd[TX_8X8][1] && + rd[TX_16X16][1] < rd[TX_4X4][1]))) { + return TX_16X16; + } else if (tx_mode == ALLOW_8X8 || + tx_mode == ALLOW_16X16 || + tx_mode == ALLOW_32X32 || + (tx_mode == TX_MODE_SELECT && rd[TX_8X8][1] < rd[TX_4X4][1])) { + return TX_8X8; + } else { + return TX_4X4; + } +} + static void choose_txfm_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x, int (*r)[2], int *rate, int64_t *d, int64_t *distortion, @@ -777,27 +803,7 @@ static void choose_txfm_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x, } } - if (max_tx_size == TX_32X32 && - (cm->tx_mode == ALLOW_32X32 || - (cm->tx_mode == TX_MODE_SELECT && - rd[TX_32X32][1] < rd[TX_16X16][1] && rd[TX_32X32][1] < rd[TX_8X8][1] && - rd[TX_32X32][1] < rd[TX_4X4][1]))) { - mbmi->tx_size = TX_32X32; - } else if (max_tx_size >= TX_16X16 && - (cm->tx_mode == ALLOW_16X16 || - cm->tx_mode == ALLOW_32X32 || - (cm->tx_mode == TX_MODE_SELECT && - rd[TX_16X16][1] < rd[TX_8X8][1] && - rd[TX_16X16][1] < rd[TX_4X4][1]))) { - mbmi->tx_size = TX_16X16; - } else if (cm->tx_mode == ALLOW_8X8 || - cm->tx_mode == ALLOW_16X16 || - cm->tx_mode == ALLOW_32X32 || - (cm->tx_mode == TX_MODE_SELECT && rd[TX_8X8][1] < rd[TX_4X4][1])) { - mbmi->tx_size = TX_8X8; - } else { - mbmi->tx_size = TX_4X4; - } + mbmi->tx_size = select_tx_size(cm->tx_mode, max_tx_size, rd); *distortion = d[mbmi->tx_size]; *rate = r[mbmi->tx_size][cm->tx_mode == TX_MODE_SELECT]; @@ -883,29 +889,7 @@ static void choose_txfm_size_from_modelrd(VP9_COMP *cpi, MACROBLOCK *x, rd[n][1] = (int64_t)(scale_rd[n] * rd[n][1]); } - if (max_tx_size == TX_32X32 && - (cm->tx_mode == ALLOW_32X32 || - (cm->tx_mode == TX_MODE_SELECT && - rd[TX_32X32][1] <= rd[TX_16X16][1] && - rd[TX_32X32][1] <= rd[TX_8X8][1] && - rd[TX_32X32][1] <= rd[TX_4X4][1]))) { - mbmi->tx_size = TX_32X32; - } else if (max_tx_size >= TX_16X16 && - (cm->tx_mode == ALLOW_16X16 || - cm->tx_mode == ALLOW_32X32 || - (cm->tx_mode == TX_MODE_SELECT && - rd[TX_16X16][1] <= rd[TX_8X8][1] && - rd[TX_16X16][1] <= rd[TX_4X4][1]))) { - mbmi->tx_size = TX_16X16; - } else if (cm->tx_mode == ALLOW_8X8 || - cm->tx_mode == ALLOW_16X16 || - cm->tx_mode == ALLOW_32X32 || - (cm->tx_mode == TX_MODE_SELECT && - rd[TX_8X8][1] <= rd[TX_4X4][1])) { - mbmi->tx_size = TX_8X8; - } else { - mbmi->tx_size = TX_4X4; - } + mbmi->tx_size = select_tx_size(cm->tx_mode, max_tx_size, rd); // Actually encode using the chosen mode if a model was used, but do not // update the r, d costs |