From 9ded6e375a417c992ba6f55e3d31b8be74dca131 Mon Sep 17 00:00:00 2001 From: Yaowu Xu Date: Fri, 10 Feb 2012 11:49:22 -0800 Subject: [PATCH] fixed an issue related to 2nd order size due to merge artifacts. For 8x8 transformed macroblock, the 2nd order transform is a 2x2 haar transform, here there is only 4 coefficients total. A previous merge changed these to 64, causing crashes when encoding with 8x8 transform enabled. (i.e. when input video image size > 640x360 ) This commit reverts them back to 4 and fixes the crashes. Change-Id: I3290b81f8c0d32c7efec03093a61ea57736c0550 --- vp8/decoder/detokenize.c | 5 ++--- vp8/encoder/quantize.c | 2 +- vp8/encoder/tokenize.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/vp8/decoder/detokenize.c b/vp8/decoder/detokenize.c index 313e00d..394ed89 100644 --- a/vp8/decoder/detokenize.c +++ b/vp8/decoder/detokenize.c @@ -346,14 +346,14 @@ BLOCK_LOOP_8x8: seg_eob = get_segdata( x, segment_id, SEG_LVL_EOB ); } else - seg_eob = 64; + seg_eob = 4; } else { VP8_COMBINEENTROPYCONTEXTS_8x8(v, *a, *l, *a1, *l1); if ( segfeature_active( x, segment_id, SEG_LVL_EOB ) ) { - seg_eob = get_segdata( x, segment_id, SEG_LVL_EOB ); + seg_eob = get_segdata( x, segment_id, SE_LVL_EOB ); } else seg_eob = 64; @@ -363,7 +363,6 @@ BLOCK_LOOP_8x8: Prob += v * ENTROPY_NODES; DO_WHILE_8x8: -//#if CONFIG_SEGFEATURES if ( c == seg_eob ) goto BLOCK_FINISHED_8x8; diff --git a/vp8/encoder/quantize.c b/vp8/encoder/quantize.c index 04939c7..300c407 100644 --- a/vp8/encoder/quantize.c +++ b/vp8/encoder/quantize.c @@ -1222,7 +1222,7 @@ void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x) { x->block[24].eob_max_offset = 16; #if CONFIG_T8X8 - x->block[24].eob_max_offset_8x8 = 64; + x->block[24].eob_max_offset_8x8 = 4; #endif } diff --git a/vp8/encoder/tokenize.c b/vp8/encoder/tokenize.c index d753bb1..aa9dd8e 100644 --- a/vp8/encoder/tokenize.c +++ b/vp8/encoder/tokenize.c @@ -124,7 +124,7 @@ static void tokenize2nd_order_b_8x8 int x; const short *qcoeff_ptr = b->qcoeff; - int seg_eob = 64; + int seg_eob = 4; int segment_id = xd->mode_info_context->mbmi.segment_id; if ( segfeature_active( xd, segment_id, SEG_LVL_EOB ) ) -- 2.7.4