summaryrefslogtreecommitdiff
path: root/vp8/common/postproc.c
diff options
context:
space:
mode:
authorDeb Mukherjee <debargha@google.com>2012-01-09 16:48:45 -0800
committerDeb Mukherjee <debargha@google.com>2012-01-10 14:14:41 -0800
commit9c2ca8c1ca87f219965f3a528190a57a1ce72da8 (patch)
tree9bf6dc3206e7c53e3a0cd0f9e4d0f48b1bfad980 /vp8/common/postproc.c
parente6c91b625eef4ef5bc2de8eab08cca69ce9e73f0 (diff)
downloadlibvpx-9c2ca8c1ca87f219965f3a528190a57a1ce72da8.tar
libvpx-9c2ca8c1ca87f219965f3a528190a57a1ce72da8.tar.gz
libvpx-9c2ca8c1ca87f219965f3a528190a57a1ce72da8.tar.bz2
libvpx-9c2ca8c1ca87f219965f3a528190a57a1ce72da8.zip
Allowing the mfqe post-processing filter to be used in conjunction
with deblock or demacroblock filters. When --mfqe is used together with --demacroblock or --deblock, mfqe is applied first and then demacroblock/deblock is applied to the mfqe result. Change-Id: Id83ee01f1b4a33a116f071dcf26d59c7f3497c32
Diffstat (limited to 'vp8/common/postproc.c')
-rw-r--r--vp8/common/postproc.c57
1 files changed, 42 insertions, 15 deletions
diff --git a/vp8/common/postproc.c b/vp8/common/postproc.c
index 34468ded5..eb17a7ca6 100644
--- a/vp8/common/postproc.c
+++ b/vp8/common/postproc.c
@@ -797,6 +797,12 @@ static void multiframe_quality_enhance_block
}
}
+#if CONFIG_RUNTIME_CPU_DETECT
+#define RTCD_VTABLE(oci) (&(oci)->rtcd.postproc)
+#else
+#define RTCD_VTABLE(oci) NULL
+#endif
+
void vp8_multiframe_quality_enhance
(
VP8_COMMON *cm
@@ -808,11 +814,10 @@ 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;
- int qcurr = cm->base_qindex;
- int qprev = cm->postproc_state.last_base_qindex;
-
int mb_row;
int mb_col;
+ int qcurr = cm->base_qindex;
+ int qprev = cm->postproc_state.last_base_qindex;
unsigned char *y_ptr, *u_ptr, *v_ptr;
unsigned char *yd_ptr, *ud_ptr, *vd_ptr;
@@ -896,11 +901,6 @@ void vp8_multiframe_quality_enhance
}
}
-#if CONFIG_RUNTIME_CPU_DETECT
-#define RTCD_VTABLE(oci) (&(oci)->rtcd.postproc)
-#else
-#define RTCD_VTABLE(oci) NULL
-#endif
int vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t *ppflags)
{
int q = oci->filter_level * 10 / 6;
@@ -926,11 +926,44 @@ int vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t
return 0;
}
+ /* Allocate post_proc_buffer_int if needed */
+ if ((flags & VP8D_MFQE) && !oci->post_proc_buffer_int_used)
+ {
+ if ((flags & VP8D_DEBLOCK) || (flags & VP8D_DEMACROBLOCK))
+ {
+ if (vp8_yv12_alloc_frame_buffer(&oci->post_proc_buffer_int, oci->Width, oci->Height, VP8BORDERINPIXELS) >= 0)
+ {
+ oci->post_proc_buffer_int_used = 1;
+ }
+ }
+ }
+
#if ARCH_X86||ARCH_X86_64
vpx_reset_mmx_state();
#endif
- if (flags & VP8D_DEMACROBLOCK)
+ if ((flags & VP8D_MFQE) &&
+ oci->current_video_frame >= 2 &&
+ oci->base_qindex - oci->postproc_state.last_base_qindex >= 10)
+ {
+ vp8_multiframe_quality_enhance(oci);
+ if (((flags & VP8D_DEBLOCK) || (flags & VP8D_DEMACROBLOCK)) &&
+ oci->post_proc_buffer_int_used)
+ {
+ vp8_yv12_copy_frame_ptr(&oci->post_proc_buffer, &oci->post_proc_buffer_int);
+ if (flags & VP8D_DEMACROBLOCK)
+ {
+ vp8_deblock_and_de_macro_block(&oci->post_proc_buffer_int, &oci->post_proc_buffer,
+ q + (deblock_level - 5) * 10, 1, 0, RTCD_VTABLE(oci));
+ }
+ else if (flags & VP8D_DEBLOCK)
+ {
+ vp8_deblock(&oci->post_proc_buffer_int, &oci->post_proc_buffer,
+ q, 1, 0, RTCD_VTABLE(oci));
+ }
+ }
+ }
+ else if (flags & VP8D_DEMACROBLOCK)
{
vp8_deblock_and_de_macro_block(oci->frame_to_show, &oci->post_proc_buffer,
q + (deblock_level - 5) * 10, 1, 0, RTCD_VTABLE(oci));
@@ -940,12 +973,6 @@ int vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t
vp8_deblock(oci->frame_to_show, &oci->post_proc_buffer,
q, 1, 0, RTCD_VTABLE(oci));
}
- else if ((flags & VP8D_MFQE) &&
- oci->current_video_frame >= 2 &&
- oci->base_qindex - oci->postproc_state.last_base_qindex >= 10)
- {
- vp8_multiframe_quality_enhance(oci);
- }
else
{
vp8_yv12_copy_frame_ptr(oci->frame_to_show, &oci->post_proc_buffer);