From: Scott LaVarnway Date: Sat, 26 Jan 2013 01:06:32 +0000 (-0800) Subject: Bug fix: error-concealment enabled changed postproc output X-Git-Tag: v1.3.0~1201^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0c2919c3d57c92db996531b17255c6c444375600;p=platform%2Fupstream%2Flibvpx.git Bug fix: error-concealment enabled changed postproc output When error concealment is enabled, it swaps the mi and prev_mi ptrs after each frame is decoded. The postproc uses the mi ptr for the mode info context. Now the postproc will use the correct mode info context. Change-Id: I537ae5450f319c624999b44525bb52bb30047b7b --- diff --git a/vp8/common/mfqe.c b/vp8/common/mfqe.c index 8a8f92f..0693326 100644 --- a/vp8/common/mfqe.c +++ b/vp8/common/mfqe.c @@ -280,7 +280,7 @@ void vp8_multiframe_quality_enhance FRAME_TYPE frame_type = cm->frame_type; /* Point at base of Mb MODE_INFO list has motion vectors etc */ - const MODE_INFO *mode_info_context = cm->mi; + const MODE_INFO *mode_info_context = cm->show_frame_mi; int mb_row; int mb_col; int totmap, map[4]; diff --git a/vp8/common/onyxc_int.h b/vp8/common/onyxc_int.h index 03c9718..276dd72 100644 --- a/vp8/common/onyxc_int.h +++ b/vp8/common/onyxc_int.h @@ -127,7 +127,8 @@ typedef struct VP8Common MODE_INFO *prev_mip; /* MODE_INFO array 'mip' from last decoded frame */ MODE_INFO *prev_mi; /* 'mi' from last frame (points into prev_mip) */ #endif - + MODE_INFO *show_frame_mi; /* MODE_INFO for the last decoded frame + to show */ LOOPFILTERTYPE filter_type; loop_filter_info_n lf_info; diff --git a/vp8/common/postproc.c b/vp8/common/postproc.c index fd313b6..e40fb11 100644 --- a/vp8/common/postproc.c +++ b/vp8/common/postproc.c @@ -334,7 +334,7 @@ void vp8_deblock(VP8_COMMON *cm, double level = 6.0e-05 * q * q * q - .0067 * q * q + .306 * q + .0065; int ppl = (int)(level + .5); - const MODE_INFO *mode_info_context = cm->mi; + const MODE_INFO *mode_info_context = cm->show_frame_mi; int mbr, mbc; /* The pixel thresholds are adjusted according to if or not the macroblock diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c index 24fc878..e965483 100644 --- a/vp8/decoder/onyxd_if.c +++ b/vp8/decoder/onyxd_if.c @@ -419,7 +419,13 @@ int vp8dx_receive_compressed_data(VP8D_COMP *pbi, size_t size, vp8_clear_system_state(); -#if CONFIG_ERROR_CONCEALMENT + if (cm->show_frame) + { + cm->current_video_frame++; + cm->show_frame_mi = cm->mi; + } + + #if CONFIG_ERROR_CONCEALMENT /* swap the mode infos to storage for future error concealment */ if (pbi->ec_enabled && pbi->common.prev_mi) { @@ -441,9 +447,6 @@ int vp8dx_receive_compressed_data(VP8D_COMP *pbi, size_t size, } #endif - if (cm->show_frame) - cm->current_video_frame++; - pbi->ready_for_new_data = 0; pbi->last_time_stamp = time_stamp; diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 7eb7193..92f9818 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -5362,6 +5362,7 @@ int vp8_get_preview_raw_frame(VP8_COMP *cpi, YV12_BUFFER_CONFIG *dest, vp8_ppfla #endif #if CONFIG_POSTPROC + cpi->common.show_frame_mi = cpi->common.mi; ret = vp8_post_proc_frame(&cpi->common, dest, flags); #else