summaryrefslogtreecommitdiff
path: root/vp8
diff options
context:
space:
mode:
authorYaowu Xu <yaowu@google.com>2012-01-19 16:37:32 -0800
committerYaowu Xu <yaowu@google.com>2012-01-19 17:09:40 -0800
commit5aab0c3fb736929762f4f082536a1691fe9941d8 (patch)
treed58242476301b3041b853f5bb2f12713ddc5f267 /vp8
parentbe9af16e164c80d2417e4035265468295bfda00f (diff)
downloadlibvpx-5aab0c3fb736929762f4f082536a1691fe9941d8.tar
libvpx-5aab0c3fb736929762f4f082536a1691fe9941d8.tar.gz
libvpx-5aab0c3fb736929762f4f082536a1691fe9941d8.tar.bz2
libvpx-5aab0c3fb736929762f4f082536a1691fe9941d8.zip
Added code to prevent I8X8_PRED mode for MBs using 8x8 transform
This fixed a conflict introduced by the change of adding 8x8 intra prediction modes. The 8x8 intra prediction mode code assumed the use of 4x4 transform, and causes encoder crashes when the codec is configured with --enable-t8x8. Change-Id: I00cc94df63e9725377ffba9eb51be6b77fe3fcf9
Diffstat (limited to 'vp8')
-rw-r--r--vp8/encoder/rdopt.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 619f061ec..99bad881d 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -2206,7 +2206,9 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
#if CONFIG_T8X8
// No 4x4 modes if segment flagged as 8x8
else if ( ( get_seg_tx_type( xd, segment_id ) == TX_8X8 ) &&
- ( (this_mode == B_PRED) || (this_mode == SPLITMV) ) )
+ ( (this_mode == B_PRED)
+ ||(this_mode == I8X8_PRED)
+ || (this_mode == SPLITMV) ) )
{
continue;
}
@@ -3015,13 +3017,24 @@ void vp8_rd_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_)
&rate16x16, &rate16x16_tokenonly,
&dist16x16);
mode16x16 = x->e_mbd.mode_info_context->mbmi.mode;
- error8x8 = rd_pick_intra8x8mby_modes(cpi, x,
- &rate8x8, &rate8x8_tokenonly,
- &dist8x8, error16x16);
- mode8x8[0]= x->e_mbd.mode_info_context->bmi[0].as_mode;
- mode8x8[1]= x->e_mbd.mode_info_context->bmi[2].as_mode;
- mode8x8[2]= x->e_mbd.mode_info_context->bmi[8].as_mode;
- mode8x8[3]= x->e_mbd.mode_info_context->bmi[10].as_mode;
+#if CONFIG_T8X8
+ if ( get_seg_tx_type( xd,
+ xd->mode_info_context->mbmi.segment_id ) == TX_8X8)
+ {
+ error8x8 = INT_MAX;
+ }
+ else
+#else
+ {
+ error8x8 = rd_pick_intra8x8mby_modes(cpi, x,
+ &rate8x8, &rate8x8_tokenonly,
+ &dist8x8, error16x16);
+ mode8x8[0]= x->e_mbd.mode_info_context->bmi[0].as_mode;
+ mode8x8[1]= x->e_mbd.mode_info_context->bmi[2].as_mode;
+ mode8x8[2]= x->e_mbd.mode_info_context->bmi[8].as_mode;
+ mode8x8[3]= x->e_mbd.mode_info_context->bmi[10].as_mode;
+ }
+#endif
#if CONFIG_T8X8
if ( get_seg_tx_type( xd,