Skip to content
Snippets Groups Projects
Commit 9c2ca8c1 authored by Deb Mukherjee's avatar Deb Mukherjee
Browse files

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
parent e6c91b62
No related branches found
No related tags found
No related merge requests found
...@@ -43,6 +43,8 @@ void vp8_de_alloc_frame_buffers(VP8_COMMON *oci) ...@@ -43,6 +43,8 @@ void vp8_de_alloc_frame_buffers(VP8_COMMON *oci)
vp8_yv12_de_alloc_frame_buffer(&oci->temp_scale_frame); vp8_yv12_de_alloc_frame_buffer(&oci->temp_scale_frame);
vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer); vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer);
if (oci->post_proc_buffer_int_used)
vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer_int);
vpx_free(oci->above_context); vpx_free(oci->above_context);
vpx_free(oci->mip); vpx_free(oci->mip);
...@@ -101,6 +103,8 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height) ...@@ -101,6 +103,8 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
return 1; return 1;
} }
oci->post_proc_buffer_int_used = 0;
oci->mb_rows = height >> 4; oci->mb_rows = height >> 4;
oci->mb_cols = width >> 4; oci->mb_cols = width >> 4;
oci->MBs = oci->mb_rows * oci->mb_cols; oci->MBs = oci->mb_rows * oci->mb_cols;
......
...@@ -114,6 +114,8 @@ typedef struct VP8Common ...@@ -114,6 +114,8 @@ typedef struct VP8Common
YV12_BUFFER_CONFIG post_proc_buffer; YV12_BUFFER_CONFIG post_proc_buffer;
YV12_BUFFER_CONFIG temp_scale_frame; YV12_BUFFER_CONFIG temp_scale_frame;
YV12_BUFFER_CONFIG post_proc_buffer_int;
int post_proc_buffer_int_used;
FRAME_TYPE last_frame_type; /* Save last frame's frame type for motion search. */ FRAME_TYPE last_frame_type; /* Save last frame's frame type for motion search. */
FRAME_TYPE frame_type; FRAME_TYPE frame_type;
......
...@@ -797,6 +797,12 @@ static void multiframe_quality_enhance_block ...@@ -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 void vp8_multiframe_quality_enhance
( (
VP8_COMMON *cm VP8_COMMON *cm
...@@ -808,11 +814,10 @@ void vp8_multiframe_quality_enhance ...@@ -808,11 +814,10 @@ void vp8_multiframe_quality_enhance
FRAME_TYPE frame_type = cm->frame_type; FRAME_TYPE frame_type = cm->frame_type;
/* Point at base of Mb MODE_INFO list has motion vectors etc */ /* 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->mi;
int qcurr = cm->base_qindex;
int qprev = cm->postproc_state.last_base_qindex;
int mb_row; int mb_row;
int mb_col; 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 *y_ptr, *u_ptr, *v_ptr;
unsigned char *yd_ptr, *ud_ptr, *vd_ptr; unsigned char *yd_ptr, *ud_ptr, *vd_ptr;
...@@ -896,11 +901,6 @@ void vp8_multiframe_quality_enhance ...@@ -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 vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t *ppflags)
{ {
int q = oci->filter_level * 10 / 6; 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 ...@@ -926,11 +926,44 @@ int vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t
return 0; 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 #if ARCH_X86||ARCH_X86_64
vpx_reset_mmx_state(); vpx_reset_mmx_state();
#endif #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, vp8_deblock_and_de_macro_block(oci->frame_to_show, &oci->post_proc_buffer,
q + (deblock_level - 5) * 10, 1, 0, RTCD_VTABLE(oci)); 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 ...@@ -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, vp8_deblock(oci->frame_to_show, &oci->post_proc_buffer,
q, 1, 0, RTCD_VTABLE(oci)); 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 else
{ {
vp8_yv12_copy_frame_ptr(oci->frame_to_show, &oci->post_proc_buffer); vp8_yv12_copy_frame_ptr(oci->frame_to_show, &oci->post_proc_buffer);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment