diff options
author | Ronald S. Bultje <rbultje@google.com> | 2012-02-28 17:12:08 -0800 |
---|---|---|
committer | Ronald S. Bultje <rbultje@google.com> | 2012-02-28 17:41:03 -0800 |
commit | d476165107297a26d548fd63b1b77353d08b559d (patch) | |
tree | a4dd17ddede06635684add5220d5f8c18fc0f0a4 /vp8/decoder/decodemv.c | |
parent | af5c774b5c8a4cdf6d6792e63ce09d2702909de5 (diff) | |
download | libvpx-d476165107297a26d548fd63b1b77353d08b559d.tar libvpx-d476165107297a26d548fd63b1b77353d08b559d.tar.gz libvpx-d476165107297a26d548fd63b1b77353d08b559d.tar.bz2 libvpx-d476165107297a26d548fd63b1b77353d08b559d.zip |
Compound intra prediction (b_pred/4x4 only, for now),
Also remove duplicate build_intra_predictors_mby/uv().
Change-Id: I78607e7304952a9b962a5b25af9bb9c48692187b
Diffstat (limited to 'vp8/decoder/decodemv.c')
-rw-r--r-- | vp8/decoder/decodemv.c | 72 |
1 files changed, 62 insertions, 10 deletions
diff --git a/vp8/decoder/decodemv.c b/vp8/decoder/decodemv.c index fc1098a44..3a74fd83e 100644 --- a/vp8/decoder/decodemv.c +++ b/vp8/decoder/decodemv.c @@ -125,6 +125,9 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, y_mode = (MB_PREDICTION_MODE) vp8_kfread_ymode( bc, pbi->common.kf_ymode_prob); #endif +#if CONFIG_COMP_INTRA_PRED + m->mbmi.second_mode = (MB_PREDICTION_MODE) (DC_PRED - 1); +#endif m->mbmi.ref_frame = INTRA_FRAME; @@ -135,10 +138,25 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, { const B_PREDICTION_MODE A = above_block_mode(m, i, mis); const B_PREDICTION_MODE L = left_block_mode(m, i); +#if CONFIG_COMP_INTRA_PRED + int use_comp_pred = vp8_read(bc, 128); +#endif - m->bmi[i].as_mode = + m->bmi[i].as_mode.first = (B_PREDICTION_MODE) vp8_read_bmode( bc, pbi->common.kf_bmode_prob [A] [L]); +#if CONFIG_COMP_INTRA_PRED + if (use_comp_pred) + { + m->bmi[i].as_mode.second = + (B_PREDICTION_MODE) vp8_read_bmode( + bc, pbi->common.kf_bmode_prob [A] [L]); + } + else + { + m->bmi[i].as_mode.second = (B_PREDICTION_MODE) (B_DC_PRED - 1); + } +#endif } while (++i < 16); } @@ -150,10 +168,16 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, { int ib = vp8_i8x8_block[i]; mode8x8 = vp8_read_i8x8_mode(bc, pbi->common.i8x8_mode_prob); - m->bmi[ib+0].as_mode= mode8x8; - m->bmi[ib+1].as_mode= mode8x8; - m->bmi[ib+4].as_mode= mode8x8; - m->bmi[ib+5].as_mode= mode8x8; + m->bmi[ib+0].as_mode.first= mode8x8; + m->bmi[ib+1].as_mode.first= mode8x8; + m->bmi[ib+4].as_mode.first= mode8x8; + m->bmi[ib+5].as_mode.first= mode8x8; +#if CONFIG_COMP_INTRA_PRED + m->bmi[ib+0].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); + m->bmi[ib+1].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); + m->bmi[ib+4].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); + m->bmi[ib+5].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); +#endif } } else @@ -164,6 +188,9 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, m->mbmi.uv_mode = (MB_PREDICTION_MODE)vp8_read_uv_mode(bc, pbi->common.kf_uv_mode_prob); #endif +#if CONFIG_COMP_INTRA_PRED + m->mbmi.second_uv_mode = (MB_PREDICTION_MODE) (DC_PRED - 1); +#endif } static int read_mvcomponent(vp8_reader *r, const MV_CONTEXT *mvc) @@ -899,6 +926,9 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, mbmi->mode = (MB_PREDICTION_MODE) vp8_read_ymode(bc, pbi->common.fc.ymode_prob); } +#if CONFIG_COMP_INTRA_PRED + mbmi->second_mode = (MB_PREDICTION_MODE) (DC_PRED - 1); +#endif // If MB mode is BPRED read the block modes if (mbmi->mode == B_PRED) @@ -906,7 +936,20 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, int j = 0; do { - mi->bmi[j].as_mode = (B_PREDICTION_MODE)vp8_read_bmode(bc, pbi->common.fc.bmode_prob); +#if CONFIG_COMP_INTRA_PRED + int use_comp_pred = vp8_read(bc, 128); +#endif + mi->bmi[j].as_mode.first = (B_PREDICTION_MODE)vp8_read_bmode(bc, pbi->common.fc.bmode_prob); +#if CONFIG_COMP_INTRA_PRED + if (use_comp_pred) + { + mi->bmi[j].as_mode.second = (B_PREDICTION_MODE)vp8_read_bmode(bc, pbi->common.fc.bmode_prob); + } + else + { + mi->bmi[j].as_mode.second = (B_PREDICTION_MODE) (B_DC_PRED - 1); + } +#endif } while (++j < 16); } @@ -919,10 +962,16 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, { int ib = vp8_i8x8_block[i]; mode8x8 = vp8_read_i8x8_mode(bc, pbi->common.i8x8_mode_prob); - mi->bmi[ib+0].as_mode= mode8x8; - mi->bmi[ib+1].as_mode= mode8x8; - mi->bmi[ib+4].as_mode= mode8x8; - mi->bmi[ib+5].as_mode= mode8x8; + mi->bmi[ib+0].as_mode.first= mode8x8; + mi->bmi[ib+1].as_mode.first= mode8x8; + mi->bmi[ib+4].as_mode.first= mode8x8; + mi->bmi[ib+5].as_mode.first= mode8x8; +#if CONFIG_COMP_INTRA_PRED + mi->bmi[ib+0].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); + mi->bmi[ib+1].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); + mi->bmi[ib+4].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); + mi->bmi[ib+5].as_mode.second= (MB_PREDICTION_MODE) (DC_PRED - 1); +#endif } } else @@ -933,6 +982,9 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, mbmi->uv_mode = (MB_PREDICTION_MODE)vp8_read_uv_mode(bc, pbi->common.fc.uv_mode_prob); #endif /*CONFIG_UVINTRA*/ +#if CONFIG_COMP_INTRA_PRED + mbmi->second_uv_mode = (MB_PREDICTION_MODE) (DC_PRED - 1); +#endif } } |