diff options
author | Scott LaVarnway <slavarnway@google.com> | 2011-04-21 14:38:36 -0400 |
---|---|---|
committer | Scott LaVarnway <slavarnway@google.com> | 2011-04-21 14:38:36 -0400 |
commit | 3698c1f6207d68c2b4d36b94ae1c55f9dd2ba4da (patch) | |
tree | 6635319a406343b911e5b9c6fb7b5d459945656e /vp8/common | |
parent | 7a49accd0b65453057762929efc7eed93deba043 (diff) | |
download | libvpx-3698c1f6207d68c2b4d36b94ae1c55f9dd2ba4da.tar libvpx-3698c1f6207d68c2b4d36b94ae1c55f9dd2ba4da.tar.gz libvpx-3698c1f6207d68c2b4d36b94ae1c55f9dd2ba4da.tar.bz2 libvpx-3698c1f6207d68c2b4d36b94ae1c55f9dd2ba4da.zip |
Removed dc_diff from MB_MODE_INFO
The dc_diff flag is used to skip loopfiltering. Instead
of setting this flag in the decoder/encoder, we now check
for this condition in the loopfilter.
Change-Id: Ie2b9cdf9e0f4e8b932bbd36e0878c05bffd28931
Diffstat (limited to 'vp8/common')
-rw-r--r-- | vp8/common/blockd.h | 2 | ||||
-rw-r--r-- | vp8/common/loopfilter.c | 23 | ||||
-rw-r--r-- | vp8/common/postproc.c | 5 |
3 files changed, 21 insertions, 9 deletions
diff --git a/vp8/common/blockd.h b/vp8/common/blockd.h index cfe9e1572..aef692744 100644 --- a/vp8/common/blockd.h +++ b/vp8/common/blockd.h @@ -169,9 +169,7 @@ typedef struct unsigned char partitioning; unsigned char mb_skip_coeff; /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */ - unsigned char dc_diff; unsigned char need_to_clamp_mvs; - unsigned char segment_id; /* Which set of segmentation parameters should be used for this MB */ } MB_MODE_INFO; diff --git a/vp8/common/loopfilter.c b/vp8/common/loopfilter.c index 37c5b7740..221998bc6 100644 --- a/vp8/common/loopfilter.c +++ b/vp8/common/loopfilter.c @@ -353,6 +353,9 @@ void vp8_loop_filter_frame for (mb_col = 0; mb_col < cm->mb_cols; mb_col++) { int Segment = (alt_flt_enabled) ? mbd->mode_info_context->mbmi.segment_id : 0; + int skip_lf = (mbd->mode_info_context->mbmi.mode != B_PRED && + mbd->mode_info_context->mbmi.mode != SPLITMV && + mbd->mode_info_context->mbmi.mb_skip_coeff); filter_level = baseline_filter_level[Segment]; @@ -367,14 +370,14 @@ void vp8_loop_filter_frame if (mb_col > 0) cm->lf_mbv(y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi[filter_level], cm->simpler_lpf); - if (mbd->mode_info_context->mbmi.dc_diff > 0) + if (!skip_lf) cm->lf_bv(y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi[filter_level], cm->simpler_lpf); /* don't apply across umv border */ if (mb_row > 0) cm->lf_mbh(y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi[filter_level], cm->simpler_lpf); - if (mbd->mode_info_context->mbmi.dc_diff > 0) + if (!skip_lf) cm->lf_bh(y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi[filter_level], cm->simpler_lpf); } @@ -457,6 +460,10 @@ void vp8_loop_filter_frame_yonly for (mb_col = 0; mb_col < cm->mb_cols; mb_col++) { int Segment = (alt_flt_enabled) ? mbd->mode_info_context->mbmi.segment_id : 0; + int skip_lf = (mbd->mode_info_context->mbmi.mode != B_PRED && + mbd->mode_info_context->mbmi.mode != SPLITMV && + mbd->mode_info_context->mbmi.mb_skip_coeff); + filter_level = baseline_filter_level[Segment]; /* Apply any context driven MB level adjustment */ @@ -467,14 +474,14 @@ void vp8_loop_filter_frame_yonly if (mb_col > 0) cm->lf_mbv(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); - if (mbd->mode_info_context->mbmi.dc_diff > 0) + if (!skip_lf) cm->lf_bv(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); /* don't apply across umv border */ if (mb_row > 0) cm->lf_mbh(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); - if (mbd->mode_info_context->mbmi.dc_diff > 0) + if (!skip_lf) cm->lf_bh(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); } @@ -565,6 +572,10 @@ void vp8_loop_filter_partial_frame for (mb_col = 0; mb_col < mb_cols; mb_col++) { int Segment = (alt_flt_enabled) ? mbd->mode_info_context->mbmi.segment_id : 0; + int skip_lf = (mbd->mode_info_context->mbmi.mode != B_PRED && + mbd->mode_info_context->mbmi.mode != SPLITMV && + mbd->mode_info_context->mbmi.mb_skip_coeff); + filter_level = baseline_filter_level[Segment]; if (filter_level) @@ -572,12 +583,12 @@ void vp8_loop_filter_partial_frame if (mb_col > 0) cm->lf_mbv(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); - if (mbd->mode_info_context->mbmi.dc_diff > 0) + if (!skip_lf) cm->lf_bv(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); cm->lf_mbh(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); - if (mbd->mode_info_context->mbmi.dc_diff > 0) + if (!skip_lf) cm->lf_bh(y_ptr, 0, 0, post->y_stride, 0, &lfi[filter_level], 0); } diff --git a/vp8/common/postproc.c b/vp8/common/postproc.c index 5bfc7d6fb..660880b52 100644 --- a/vp8/common/postproc.c +++ b/vp8/common/postproc.c @@ -804,11 +804,14 @@ int vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t for (j = 0; j < mb_cols; j++) { char zz[4]; + int dc_diff = !(mi[mb_index].mbmi.mode != B_PRED && + mi[mb_index].mbmi.mode != SPLITMV && + mi[mb_index].mbmi.mb_skip_coeff)); if (oci->frame_type == KEY_FRAME) sprintf(zz, "a"); else - sprintf(zz, "%c", mi[mb_index].mbmi.dc_diff + '0'); + sprintf(zz, "%c", dc_diff + '0'); vp8_blit_text(zz, y_ptr, post->y_stride); mb_index ++; |