summaryrefslogtreecommitdiff
path: root/vp8/common
diff options
context:
space:
mode:
authorScott LaVarnway <slavarnway@google.com>2011-04-21 14:38:36 -0400
committerScott LaVarnway <slavarnway@google.com>2011-04-21 14:38:36 -0400
commit3698c1f6207d68c2b4d36b94ae1c55f9dd2ba4da (patch)
tree6635319a406343b911e5b9c6fb7b5d459945656e /vp8/common
parent7a49accd0b65453057762929efc7eed93deba043 (diff)
downloadlibvpx-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.h2
-rw-r--r--vp8/common/loopfilter.c23
-rw-r--r--vp8/common/postproc.c5
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 ++;