ref: 60ed954535e1beb6283ba8674cf65565cbd66bba
parent: 45ddaab89b618438ca9a2a2d927725ddacb38cd9
author: Jingning Han <jingning@google.com>
date: Thu Aug 16 09:25:49 EDT 2012
Fixed decoder mismatch issue Resolved the decoder mismatch issue due to quantization parameter threshold for hybrid transform coding. The macroblock dequantizer initialization is moved to be performed before coefficient detokenization, since the (de)tokenization is now dependent on the macroblock level quantization parameter. Change-Id: I443da4992ebb70ae4114750b2f1363c0c628580e
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -211,10 +211,14 @@
int tx_type;
#if CONFIG_HYBRIDTRANSFORM
- int QIndex = xd->q_index;
- int active_ht = (QIndex < ACTIVE_HT);
+ int QIndex;
+ int active_ht;
#endif
+ // re-initialize macroblock dequantizer before detokenization
+ if (xd->segmentation_enabled)
+ mb_init_dequantizer(pbi, xd);
+
if (pbi->common.frame_type == KEY_FRAME) {
#if CONFIG_TX16X16
if (xd->mode_info_context->mbmi.mode <= TM_PRED ||
@@ -326,11 +330,14 @@
}
#endif
- if (xd->segmentation_enabled)
- mb_init_dequantizer(pbi, xd);
+ // moved to be performed before detokenization
+// if (xd->segmentation_enabled)
+// mb_init_dequantizer(pbi, xd);
#if CONFIG_HYBRIDTRANSFORM
// parse transform types for intra 4x4 mode
+ QIndex = xd->q_index;
+ active_ht = (QIndex < ACTIVE_HT);
if (mode == B_PRED) {
for (i = 0; i < 16; i++) {
BLOCKD *b = &xd->block[i];
--
⑨