diff options
Diffstat (limited to 'vp8/decoder')
-rw-r--r-- | vp8/decoder/decodemv.c | 97 | ||||
-rw-r--r-- | vp8/decoder/decodframe.c | 175 | ||||
-rw-r--r-- | vp8/decoder/idct_blk.c | 25 | ||||
-rw-r--r-- | vp8/decoder/onyxd_if.c | 2 |
4 files changed, 255 insertions, 44 deletions
diff --git a/vp8/decoder/decodemv.c b/vp8/decoder/decodemv.c index 94826ef6c..5e0600c2d 100644 --- a/vp8/decoder/decodemv.c +++ b/vp8/decoder/decodemv.c @@ -29,34 +29,31 @@ int dec_mvcount = 0; #endif static int vp8_read_bmode(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_bmode_tree, p); - - return i; + return vp8_treed_read(bc, vp8_bmode_tree, p); } static int vp8_read_ymode(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_ymode_tree, p); + return vp8_treed_read(bc, vp8_ymode_tree, p); +} - return i; +#if CONFIG_SUPERBLOCKS +static int vp8_sb_kfread_ymode(vp8_reader *bc, const vp8_prob *p) { + return vp8_treed_read(bc, vp8_uv_mode_tree, p); } +#endif static int vp8_kfread_ymode(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_kf_ymode_tree, p); - - return i; + return vp8_treed_read(bc, vp8_kf_ymode_tree, p); } -static int vp8_read_i8x8_mode(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_i8x8_mode_tree, p); - return i; +static int vp8_read_i8x8_mode(vp8_reader *bc, const vp8_prob *p) { + return vp8_treed_read(bc, vp8_i8x8_mode_tree, p); } static int vp8_read_uv_mode(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_uv_mode_tree, p); - - return i; + return vp8_treed_read(bc, vp8_uv_mode_tree, p); } // This function reads the current macro block's segnent id from the bitstream @@ -112,8 +109,14 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, m->mbmi.mb_skip_coeff = 0; } +#if CONFIG_SUPERBLOCKS + if (m->mbmi.encoded_as_sb) { + y_mode = (MB_PREDICTION_MODE) vp8_sb_kfread_ymode(bc, + pbi->common.sb_kf_ymode_prob[pbi->common.kf_ymode_probs_index]); + } else +#endif y_mode = (MB_PREDICTION_MODE) vp8_kfread_ymode(bc, - pbi->common.kf_ymode_prob[pbi->common.kf_ymode_probs_index]); + pbi->common.kf_ymode_prob[pbi->common.kf_ymode_probs_index]); #if CONFIG_COMP_INTRA_PRED m->mbmi.second_mode = (MB_PREDICTION_MODE)(DC_PRED - 1); #endif @@ -398,16 +401,18 @@ static MV_REFERENCE_FRAME read_ref_frame(VP8D_COMP *pbi, return (MV_REFERENCE_FRAME)ref_frame; } -static MB_PREDICTION_MODE read_mv_ref(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_mv_ref_tree, p); +#if CONFIG_SUPERBLOCKS +static MB_PREDICTION_MODE read_sb_mv_ref(vp8_reader *bc, const vp8_prob *p) { + return (MB_PREDICTION_MODE) vp8_treed_read(bc, vp8_sb_mv_ref_tree, p); +} +#endif - return (MB_PREDICTION_MODE)i; +static MB_PREDICTION_MODE read_mv_ref(vp8_reader *bc, const vp8_prob *p) { + return (MB_PREDICTION_MODE) vp8_treed_read(bc, vp8_mv_ref_tree, p); } static B_PREDICTION_MODE sub_mv_ref(vp8_reader *bc, const vp8_prob *p) { - const int i = vp8_treed_read(bc, vp8_sub_mv_ref_tree, p); - - return (B_PREDICTION_MODE)i; + return (B_PREDICTION_MODE) vp8_treed_read(bc, vp8_sub_mv_ref_tree, p); } #ifdef VPX_MODE_COUNT @@ -537,15 +542,36 @@ static void read_mb_segment_id(VP8D_COMP *pbi, // Else .... decode it explicitly else { vp8_read_mb_segid(bc, mbmi, xd); - cm->last_frame_seg_map[index] = mbmi->segment_id; } - } // Normal unpredicted coding mode else { vp8_read_mb_segid(bc, mbmi, xd); + } +#if CONFIG_SUPERBLOCKS + if (mbmi->encoded_as_sb) { + cm->last_frame_seg_map[index] = + cm->last_frame_seg_map[index + 1] = + cm->last_frame_seg_map[index + cm->mb_cols] = + cm->last_frame_seg_map[index + cm->mb_cols + 1] = mbmi->segment_id; + } else +#endif + { cm->last_frame_seg_map[index] = mbmi->segment_id; } + } else { +#if CONFIG_SUPERBLOCKS + if (mbmi->encoded_as_sb) { + mbmi->segment_id = + cm->last_frame_seg_map[index] && + cm->last_frame_seg_map[index + 1] && + cm->last_frame_seg_map[index + cm->mb_cols] && + cm->last_frame_seg_map[index + cm->mb_cols + 1]; + } else +#endif + { + mbmi->segment_id = cm->last_frame_seg_map[index]; + } } } else { // The encoder explicitly sets the segment_id to 0 @@ -667,6 +693,11 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, mbmi->mode = get_segdata(xd, mbmi->segment_id, SEG_LVL_MODE); } else { +#if CONFIG_SUPERBLOCKS + if (mbmi->encoded_as_sb) { + mbmi->mode = read_sb_mv_ref(bc, mv_ref_p); + } else +#endif mbmi->mode = read_mv_ref(bc, mv_ref_p); vp8_accum_mv_refs(&pbi->common, mbmi->mode, rct); @@ -963,6 +994,7 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, mbmi->mode = (MB_PREDICTION_MODE) get_segdata(xd, mbmi->segment_id, SEG_LVL_MODE); else { + // FIXME write using SB mode tree mbmi->mode = (MB_PREDICTION_MODE) vp8_read_ymode(bc, pbi->common.fc.ymode_prob); pbi->common.fc.ymode_counts[mbmi->mode]++; @@ -1045,6 +1077,9 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi) { int mb_row = (sb_row << 1); for (sb_col = 0; sb_col < sb_cols; sb_col++) { +#if CONFIG_SUPERBLOCKS + mi->mbmi.encoded_as_sb = vp8_read(&pbi->bc, cm->sb_coded); +#endif for (i = 0; i < 4; i++) { int dy = row_delta[i]; @@ -1059,6 +1094,10 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi) { prev_mi += offset_extended; continue; } +#if CONFIG_SUPERBLOCKS + if (i) + mi->mbmi.encoded_as_sb = 0; +#endif // Make sure the MacroBlockD mode info pointer is set correctly xd->mode_info_context = mi; @@ -1074,6 +1113,18 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi) { read_mb_modes_mv(pbi, mi, &mi->mbmi, prev_mi, mb_row, mb_col); +#if CONFIG_SUPERBLOCKS + if (mi->mbmi.encoded_as_sb) { + assert(!i); + mb_col += 2; + mi[1] = mi[cm->mode_info_stride] = + mi[cm->mode_info_stride + 1] = mi[0]; + mi += 2; + prev_mi += 2; + break; + } +#endif + /* next macroblock */ mb_row += dy; mb_col += dx; diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c index 4b3d36956..1ec4cb17a 100644 --- a/vp8/decoder/decodframe.c +++ b/vp8/decoder/decodframe.c @@ -175,10 +175,27 @@ void mb_init_dequantizer(VP8D_COMP *pbi, MACROBLOCKD *xd) { */ static void skip_recon_mb(VP8D_COMP *pbi, MACROBLOCKD *xd) { if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) { +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + RECON_INVOKE(&pbi->common.rtcd.recon, build_intra_predictors_sbuv_s)(xd); + RECON_INVOKE(&pbi->common.rtcd.recon, + build_intra_predictors_sby_s)(xd); + } else { +#endif RECON_INVOKE(&pbi->common.rtcd.recon, build_intra_predictors_mbuv_s)(xd); RECON_INVOKE(&pbi->common.rtcd.recon, build_intra_predictors_mby_s)(xd); +#if CONFIG_SUPERBLOCKS + } +#endif } else { +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + vp8_build_inter32x32_predictors_sb(xd, xd->dst.y_buffer, + xd->dst.u_buffer, xd->dst.v_buffer, + xd->dst.y_stride, xd->dst.uv_stride); + } else { +#endif vp8_build_1st_inter16x16_predictors_mb(xd, xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, xd->dst.y_stride, xd->dst.uv_stride); @@ -188,6 +205,9 @@ static void skip_recon_mb(VP8D_COMP *pbi, MACROBLOCKD *xd) { xd->dst.u_buffer, xd->dst.v_buffer, xd->dst.y_stride, xd->dst.uv_stride); } +#if CONFIG_SUPERBLOCKS + } +#endif } #ifdef DEC_DEBUG if (dec_debug) { @@ -204,11 +224,15 @@ static void skip_recon_mb(VP8D_COMP *pbi, MACROBLOCKD *xd) { extern const int vp8_i8x8_block[4]; static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, - unsigned int mb_idx) { + unsigned int mb_col) { int eobtotal = 0; MB_PREDICTION_MODE mode; int i; int tx_type; +#if CONFIG_SUPERBLOCKS + VP8_COMMON *pc = &pbi->common; + int orig_skip_flag = xd->mode_info_context->mbmi.mb_skip_coeff; +#endif #if CONFIG_HYBRIDTRANSFORM int QIndex; @@ -268,11 +292,25 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, xd->mode_info_context->mbmi.txfm_size = TX_8X8; } #endif +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + xd->mode_info_context->mbmi.txfm_size = TX_8X8; + } +#endif tx_type = xd->mode_info_context->mbmi.txfm_size; if (xd->mode_info_context->mbmi.mb_skip_coeff) { vp8_reset_mb_tokens_context(xd); +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + xd->above_context++; + xd->left_context++; + vp8_reset_mb_tokens_context(xd); + xd->above_context--; + xd->left_context--; + } +#endif } else if (!vp8dx_bool_error(xd->current_bc)) { for (i = 0; i < 25; i++) { xd->block[i].eob = 0; @@ -315,8 +353,13 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, * */ xd->mode_info_context->mbmi.mb_skip_coeff = 1; - skip_recon_mb(pbi, xd); - return; +#if CONFIG_SUPERBLOCKS + if (!xd->mode_info_context->mbmi.encoded_as_sb || orig_skip_flag) +#endif + { + skip_recon_mb(pbi, xd); + return; + } } #ifdef DEC_DEBUG @@ -350,6 +393,12 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, /* do prediction */ if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) { +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + RECON_INVOKE(&pbi->common.rtcd.recon, build_intra_predictors_sby_s)(xd); + RECON_INVOKE(&pbi->common.rtcd.recon, build_intra_predictors_sbuv_s)(xd); + } else +#endif if (mode != I8X8_PRED) { RECON_INVOKE(&pbi->common.rtcd.recon, build_intra_predictors_mbuv)(xd); if (mode != B_PRED) { @@ -365,6 +414,13 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, #endif } } else { +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + vp8_build_inter32x32_predictors_sb(xd, xd->dst.y_buffer, + xd->dst.u_buffer, xd->dst.v_buffer, + xd->dst.y_stride, xd->dst.uv_stride); + } else +#endif vp8_build_inter_predictors_mb(xd); } @@ -490,6 +546,32 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, else #endif if (tx_type == TX_8X8) { +#if CONFIG_SUPERBLOCKS + void *orig = xd->mode_info_context; + int n, num = xd->mode_info_context->mbmi.encoded_as_sb ? 4 : 1; + for (n = 0; n < num; n++) { + if (n != 0) { + for (i = 0; i < 25; i++) { + xd->block[i].eob = 0; + xd->eobs[i] = 0; + } + xd->above_context = pc->above_context + mb_col + (n & 1); + xd->left_context = pc->left_context + (n >> 1); + xd->mode_info_context = orig; + xd->mode_info_context += (n & 1); + xd->mode_info_context += (n >> 1) * pc->mode_info_stride; + if (!orig_skip_flag) { + eobtotal = vp8_decode_mb_tokens_8x8(pbi, xd); + if (eobtotal == 0) // skip loopfilter + xd->mode_info_context->mbmi.mb_skip_coeff = 1; + } else { + vp8_reset_mb_tokens_context(xd); + } + } + + if (xd->mode_info_context->mbmi.mb_skip_coeff) + continue; // only happens for SBs, which are already in dest buffer +#endif DEQUANT_INVOKE(&pbi->dequant, block_2x2)(b); #ifdef DEC_DEBUG if (dec_debug) { @@ -510,10 +592,27 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, ((int *)b->qcoeff)[5] = 0; ((int *)b->qcoeff)[6] = 0; ((int *)b->qcoeff)[7] = 0; - DEQUANT_INVOKE(&pbi->dequant, dc_idct_add_y_block_8x8) - (xd->qcoeff, xd->block[0].dequant, - xd->predictor, xd->dst.y_buffer, - xd->dst.y_stride, xd->eobs, xd->block[24].diff, xd); +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + vp8_dequant_dc_idct_add_y_block_8x8_inplace_c(xd->qcoeff, + xd->block[0].dequant, + xd->dst.y_buffer + (n >> 1) * 16 * xd->dst.y_stride + (n & 1) * 16, + xd->dst.y_stride, xd->eobs, xd->block[24].diff, xd); + // do UV inline also + vp8_dequant_idct_add_uv_block_8x8_inplace_c(xd->qcoeff + 16 * 16, + xd->block[16].dequant, + xd->dst.u_buffer + (n >> 1) * 8 * xd->dst.uv_stride + (n & 1) * 8, + xd->dst.v_buffer + (n >> 1) * 8 * xd->dst.uv_stride + (n & 1) * 8, + xd->dst.uv_stride, xd->eobs + 16, xd); + } else +#endif + DEQUANT_INVOKE(&pbi->dequant, dc_idct_add_y_block_8x8)(xd->qcoeff, + xd->block[0].dequant, xd->predictor, xd->dst.y_buffer, + xd->dst.y_stride, xd->eobs, xd->block[24].diff, xd); +#if CONFIG_SUPERBLOCKS + } + xd->mode_info_context = orig; +#endif } else { DEQUANT_INVOKE(&pbi->dequant, block)(b); if (xd->eobs[24] > 1) { @@ -538,7 +637,10 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, } } - if (tx_type == TX_8X8 +#if CONFIG_SUPERBLOCKS + if (!xd->mode_info_context->mbmi.encoded_as_sb) { +#endif + if (tx_type == TX_8X8 #if CONFIG_TX16X16 || tx_type == TX_16X16 #endif @@ -552,6 +654,9 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, (xd->qcoeff + 16 * 16, xd->block[16].dequant, xd->predictor + 16 * 16, xd->dst.u_buffer, xd->dst.v_buffer, xd->dst.uv_stride, xd->eobs + 16); +#if CONFIG_SUPERBLOCKS + } +#endif } @@ -591,15 +696,21 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd) { int row_delta[4] = { 0, +1, 0, -1}; int col_delta[4] = { +1, -1, +1, +1}; int sb_cols = (pc->mb_cols + 1) >> 1; - ENTROPY_CONTEXT_PLANES left_context[2]; // For a SB there are 2 left contexts, each pertaining to a MB row within - vpx_memset(left_context, 0, sizeof(left_context)); + vpx_memset(pc->left_context, 0, sizeof(pc->left_context)); mb_row = mbrow; mb_col = 0; for (sb_col = 0; sb_col < sb_cols; sb_col++) { + MODE_INFO *mi = xd->mode_info_context; + +#if CONFIG_SUPERBLOCKS + if (pbi->interleaved_decoding) + mi->mbmi.encoded_as_sb = vp8_read(&pbi->bc, pc->sb_coded); +#endif + // Process the 4 MBs within the SB in the order: // top-left, top-right, bottom-left, bottom-right for (i = 0; i < 4; i++) { @@ -607,6 +718,7 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd) { int dx = col_delta[i]; int offset_extended = dy * xd->mode_info_stride + dx; + mi = xd->mode_info_context; if ((mb_row >= pc->mb_rows) || (mb_col >= pc->mb_cols)) { // MB lies outside frame, skip on to next mb_row += dy; @@ -619,13 +731,10 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd) { #ifdef DEC_DEBUG dec_debug = (pc->current_video_frame == 0 && mb_row == 0 && mb_col == 0); #endif - // Copy in the appropriate left context for this MB row - vpx_memcpy(&pc->left_context, - &left_context[i >> 1], - sizeof(ENTROPY_CONTEXT_PLANES)); // Set above context pointer xd->above_context = pc->above_context + mb_col; + xd->left_context = pc->left_context + (i >> 1); /* Distance of Mb to the various image edges. * These are specified to 8th pel as they are always compared to @@ -648,6 +757,10 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd) { xd->dst.u_buffer = pc->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset; xd->dst.v_buffer = pc->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset; +#if CONFIG_SUPERBLOCKS + if (i) + mi->mbmi.encoded_as_sb = 0; +#endif if(pbi->interleaved_decoding) vpx_decode_mb_mode_mv(pbi, xd, mb_row, mb_col); @@ -690,15 +803,34 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd) { xd->corrupted |= pc->yv12_fb[ref_fb_idx].corrupted; } - decode_macroblock(pbi, xd, mb_row * pc->mb_cols + mb_col); +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + mi[1] = mi[0]; + mi[pc->mode_info_stride] = mi[0]; + mi[pc->mode_info_stride + 1] = mi[0]; + } +#endif + decode_macroblock(pbi, xd, mb_col); +#if CONFIG_SUPERBLOCKS + if (xd->mode_info_context->mbmi.encoded_as_sb) { + mi[1].mbmi.txfm_size = mi[0].mbmi.txfm_size; + mi[pc->mode_info_stride].mbmi.txfm_size = mi[0].mbmi.txfm_size; + mi[pc->mode_info_stride + 1].mbmi.txfm_size = mi[0].mbmi.txfm_size; + } +#endif /* check if the boolean decoder has suffered an error */ xd->corrupted |= vp8dx_bool_error(xd->current_bc); - // Store the modified left context for the MB row locally - vpx_memcpy(&left_context[i >> 1], - &pc->left_context, - sizeof(ENTROPY_CONTEXT_PLANES)); +#if CONFIG_SUPERBLOCKS + if (mi->mbmi.encoded_as_sb) { + assert(!i); + mb_col += 2; + xd->mode_info_context += 2; + xd->prev_mode_info_context += 2; + break; + } +#endif // skip to next MB xd->mode_info_context += offset_extended; @@ -815,7 +947,6 @@ static void init_frame(VP8D_COMP *pbi) { vp8_setup_interp_filters(xd, pc->mcomp_filter_type, pc); } - xd->left_context = &pc->left_context; xd->mode_info_context = pc->mi; xd->prev_mode_info_context = pc->prev_mi; xd->frame_type = pc->frame_type; @@ -1160,6 +1291,10 @@ int vp8_decode_frame(VP8D_COMP *pbi) { } } +#if CONFIG_SUPERBLOCKS + pc->sb_coded = vp8_read_literal(bc, 8); +#endif + /* Read the loop filter level and type */ pc->txfm_mode = (TXFM_MODE) vp8_read_bit(bc); diff --git a/vp8/decoder/idct_blk.c b/vp8/decoder/idct_blk.c index 36eea5d6f..e97d3298f 100644 --- a/vp8/decoder/idct_blk.c +++ b/vp8/decoder/idct_blk.c @@ -127,6 +127,19 @@ void vp8_dequant_dc_idct_add_y_block_8x8_c } +#if CONFIG_SUPERBLOCKS +void vp8_dequant_dc_idct_add_y_block_8x8_inplace_c +(short *q, short *dq, + unsigned char *dst, int stride, char *eobs, short *dc, MACROBLOCKD *xd) { + + vp8_dequant_dc_idct_add_8x8_c(q, dq, dst, dst, stride, stride, dc[0]); + vp8_dequant_dc_idct_add_8x8_c(&q[64], dq, dst + 8, dst + 8, stride, stride, dc[1]); + vp8_dequant_dc_idct_add_8x8_c(&q[128], dq, dst + 8 * stride, dst + 8 * stride, stride, stride, dc[4]); + vp8_dequant_dc_idct_add_8x8_c(&q[192], dq, dst + 8 * stride + 8, dst + 8 * stride + 8, stride, stride, dc[8]); + +} +#endif + void vp8_dequant_idct_add_y_block_8x8_c (short *q, short *dq, unsigned char *pre, unsigned char *dst, int stride, char *eobs, MACROBLOCKD *xd) { @@ -153,6 +166,18 @@ void vp8_dequant_idct_add_uv_block_8x8_c vp8_dequant_idct_add_8x8_c(q, dq, pre, dstv, 8, stride); } +#if CONFIG_SUPERBLOCKS +void vp8_dequant_idct_add_uv_block_8x8_inplace_c +(short *q, short *dq, + unsigned char *dstu, unsigned char *dstv, int stride, char *eobs, MACROBLOCKD *xd) { + vp8_dequant_idct_add_8x8_c(q, dq, dstu, dstu, stride, stride); + + q += 64; + + vp8_dequant_idct_add_8x8_c(q, dq, dstv, dstv, stride, stride); +} +#endif + #if CONFIG_LOSSLESS void vp8_dequant_dc_idct_add_y_block_lossless_c (short *q, short *dq, unsigned char *pre, diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c index 63499a8f7..2e1364817 100644 --- a/vp8/decoder/onyxd_if.c +++ b/vp8/decoder/onyxd_if.c @@ -149,7 +149,7 @@ VP8D_PTR vp8dx_create_decompressor(VP8D_CONFIG *oxcf) { pbi->decoded_key_frame = 0; - pbi->interleaved_decoding = CONFIG_NEWBESTREFMV; + pbi->interleaved_decoding = CONFIG_NEWBESTREFMV || CONFIG_SUPERBLOCKS; return (VP8D_PTR) pbi; } |