diff options
author | Jim Bankoski <jimbankoski@google.com> | 2012-11-28 10:30:42 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2012-11-28 10:30:42 -0800 |
commit | 926d95cd84745764ad312b5d5c297f4b5570d03d (patch) | |
tree | 04a363b870d88b97498314b3b498876d231abcaa /vp9/common | |
parent | 00e2c6bf7ac0c0bb0de2021987b4d4fbf5734d15 (diff) | |
parent | 85cba19e16328f1d94a71ef60d82c07a0d6daaca (diff) | |
download | libvpx-926d95cd84745764ad312b5d5c297f4b5570d03d.tar libvpx-926d95cd84745764ad312b5d5c297f4b5570d03d.tar.gz libvpx-926d95cd84745764ad312b5d5c297f4b5570d03d.tar.bz2 libvpx-926d95cd84745764ad312b5d5c297f4b5570d03d.zip |
Merge "remove postproc invokes" into experimental
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/arm/neon/vp9_recon_neon.c | 2 | ||||
-rw-r--r-- | vp9/common/generic/vp9_systemdependent.c | 10 | ||||
-rw-r--r-- | vp9/common/vp9_onyxc_int.h | 3 | ||||
-rw-r--r-- | vp9/common/vp9_postproc.c | 144 | ||||
-rw-r--r-- | vp9/common/vp9_postproc.h | 91 | ||||
-rw-r--r-- | vp9/common/vp9_rtcd_defs.sh | 28 | ||||
-rw-r--r-- | vp9/common/x86/vp9_x86_systemdependent.c | 12 |
7 files changed, 93 insertions, 197 deletions
diff --git a/vp9/common/arm/neon/vp9_recon_neon.c b/vp9/common/arm/neon/vp9_recon_neon.c index cc3f9f59d..1bf7a29bd 100644 --- a/vp9/common/arm/neon/vp9_recon_neon.c +++ b/vp9/common/arm/neon/vp9_recon_neon.c @@ -15,7 +15,7 @@ extern void vp8_recon16x16mb_neon(unsigned char *pred_ptr, short *diff_ptr, unsigned char *dst_ptr, int ystride, unsigned char *udst_ptr, unsigned char *vdst_ptr); -void vp8_recon_mb_neon(const vp8_recon_rtcd_vtable_t *rtcd, MACROBLOCKD *xd) { +void vp8_recon_mb_neon(MACROBLOCKD *xd) { unsigned char *pred_ptr = &xd->predictor[0]; short *diff_ptr = &xd->diff[0]; unsigned char *dst_ptr = xd->dst.y_buffer; diff --git a/vp9/common/generic/vp9_systemdependent.c b/vp9/common/generic/vp9_systemdependent.c index 29d1c3057..4c3a7d3f2 100644 --- a/vp9/common/generic/vp9_systemdependent.c +++ b/vp9/common/generic/vp9_systemdependent.c @@ -22,16 +22,6 @@ void vp9_machine_specific_config(VP9_COMMON *ctx) { #if CONFIG_RUNTIME_CPU_DETECT VP9_COMMON_RTCD *rtcd = &ctx->rtcd; -#if CONFIG_POSTPROC || (CONFIG_VP9_ENCODER && CONFIG_INTERNAL_STATS) - rtcd->postproc.down = vp9_mbpost_proc_down_c; - rtcd->postproc.across = vp9_mbpost_proc_across_ip_c; - rtcd->postproc.downacross = vp9_post_proc_down_and_across_c; - rtcd->postproc.addnoise = vp9_plane_add_noise_c; - rtcd->postproc.blend_mb_inner = vp9_blend_mb_inner_c; - rtcd->postproc.blend_mb_outer = vp9_blend_mb_outer_c; - rtcd->postproc.blend_b = vp9_blend_b_c; -#endif - #endif #if ARCH_X86 || ARCH_X86_64 diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h index 4819833fb..bef4b41ac 100644 --- a/vp9/common/vp9_onyxc_int.h +++ b/vp9/common/vp9_onyxc_int.h @@ -145,9 +145,6 @@ typedef enum { typedef struct VP9_COMMON_RTCD { #if CONFIG_RUNTIME_CPU_DETECT -#if CONFIG_POSTPROC - vp9_postproc_rtcd_vtable_t postproc; -#endif int flags; #else int unused; diff --git a/vp9/common/vp9_postproc.c b/vp9/common/vp9_postproc.c index 5752fbd82..aa8186be2 100644 --- a/vp9/common/vp9_postproc.c +++ b/vp9/common/vp9_postproc.c @@ -15,6 +15,8 @@ #include "vp9/common/vp9_textblit.h" #include "vpx_scale/vpxscale.h" #include "vp9_systemdependent.h" +#include "./vp9_rtcd.h" + #include <math.h> #include <stdlib.h> @@ -286,82 +288,78 @@ static void deblock_and_de_macro_block(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *post, int q, int low_var_thresh, - int flag, - vp9_postproc_rtcd_vtable_t *rtcd) { + int flag) { double level = 6.0e-05 * q * q * q - .0067 * q * q + .306 * q + .0065; int ppl = (int)(level + .5); (void) low_var_thresh; (void) flag; - POSTPROC_INVOKE(rtcd, downacross)(source->y_buffer, post->y_buffer, - source->y_stride, post->y_stride, - source->y_height, source->y_width, ppl); - POSTPROC_INVOKE(rtcd, across)(post->y_buffer, post->y_stride, - post->y_height, post->y_width, q2mbl(q)); - POSTPROC_INVOKE(rtcd, down)(post->y_buffer, post->y_stride, - post->y_height, post->y_width, q2mbl(q)); - - POSTPROC_INVOKE(rtcd, downacross)(source->u_buffer, post->u_buffer, - source->uv_stride, post->uv_stride, - source->uv_height, source->uv_width, ppl); - POSTPROC_INVOKE(rtcd, downacross)(source->v_buffer, post->v_buffer, - source->uv_stride, post->uv_stride, - source->uv_height, source->uv_width, ppl); + vp9_post_proc_down_and_across(source->y_buffer, post->y_buffer, + source->y_stride, post->y_stride, + source->y_height, source->y_width, ppl); + + vp9_mbpost_proc_across_ip(post->y_buffer, post->y_stride, post->y_height, + post->y_width, q2mbl(q)); + + vp9_mbpost_proc_down(post->y_buffer, post->y_stride, post->y_height, + post->y_width, q2mbl(q)); + + vp9_post_proc_down_and_across(source->u_buffer, post->u_buffer, + source->uv_stride, post->uv_stride, + source->uv_height, source->uv_width, ppl); + vp9_post_proc_down_and_across(source->v_buffer, post->v_buffer, + source->uv_stride, post->uv_stride, + source->uv_height, source->uv_width, ppl); } void vp9_deblock(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *post, int q, int low_var_thresh, - int flag, - vp9_postproc_rtcd_vtable_t *rtcd) { + int flag) { double level = 6.0e-05 * q * q * q - .0067 * q * q + .306 * q + .0065; int ppl = (int)(level + .5); (void) low_var_thresh; (void) flag; - POSTPROC_INVOKE(rtcd, downacross)(source->y_buffer, post->y_buffer, - source->y_stride, post->y_stride, - source->y_height, source->y_width, ppl); - POSTPROC_INVOKE(rtcd, downacross)(source->u_buffer, post->u_buffer, - source->uv_stride, post->uv_stride, - source->uv_height, source->uv_width, ppl); - POSTPROC_INVOKE(rtcd, downacross)(source->v_buffer, post->v_buffer, - source->uv_stride, post->uv_stride, - source->uv_height, source->uv_width, ppl); + vp9_post_proc_down_and_across(source->y_buffer, post->y_buffer, + source->y_stride, post->y_stride, + source->y_height, source->y_width, ppl); + + vp9_post_proc_down_and_across(source->u_buffer, post->u_buffer, + source->uv_stride, post->uv_stride, + source->uv_height, source->uv_width, ppl); + + vp9_post_proc_down_and_across(source->v_buffer, post->v_buffer, + source->uv_stride, post->uv_stride, + source->uv_height, source->uv_width, ppl); } void vp9_de_noise(YV12_BUFFER_CONFIG *src, YV12_BUFFER_CONFIG *post, int q, int low_var_thresh, - int flag, - vp9_postproc_rtcd_vtable_t *rtcd) { + int flag) { double level = 6.0e-05 * q * q * q - .0067 * q * q + .306 * q + .0065; int ppl = (int)(level + .5); (void) post; (void) low_var_thresh; (void) flag; - POSTPROC_INVOKE(rtcd, downacross)(src->y_buffer + 2 * src->y_stride + 2, - src->y_buffer + 2 * src->y_stride + 2, - src->y_stride, - src->y_stride, - src->y_height - 4, - src->y_width - 4, - ppl); - POSTPROC_INVOKE(rtcd, downacross)(src->u_buffer + 2 * src->uv_stride + 2, - src->u_buffer + 2 * src->uv_stride + 2, - src->uv_stride, - src->uv_stride, - src->uv_height - 4, - src->uv_width - 4, ppl); - POSTPROC_INVOKE(rtcd, downacross)(src->v_buffer + 2 * src->uv_stride + 2, - src->v_buffer + 2 * src->uv_stride + 2, - src->uv_stride, - src->uv_stride, - src->uv_height - 4, - src->uv_width - 4, ppl); + vp9_post_proc_down_and_across(src->y_buffer + 2 * src->y_stride + 2, + src->y_buffer + 2 * src->y_stride + 2, + src->y_stride, src->y_stride, src->y_height - 4, + src->y_width - 4, ppl); + + vp9_post_proc_down_and_across(src->u_buffer + 2 * src->uv_stride + 2, + src->u_buffer + 2 * src->uv_stride + 2, + src->uv_stride, src->uv_stride, + src->uv_height - 4, src->uv_width - 4, ppl); + + vp9_post_proc_down_and_across(src->v_buffer + 2 * src->uv_stride + 2, + src->v_buffer + 2 * src->uv_stride + 2, + src->uv_stride, src->uv_stride, + src->uv_height - 4, src->uv_width - 4, ppl); } double vp9_gaussian(double sigma, double mu, double x) { @@ -620,13 +618,6 @@ static void constrain_line(int x0, int *x1, int y0, int *y1, } } - -#if CONFIG_RUNTIME_CPU_DETECT -#define RTCD_VTABLE(oci) (&(oci)->rtcd.postproc) -#else -#define RTCD_VTABLE(oci) NULL -#endif - int vp9_post_proc_frame(VP9_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp9_ppflags_t *ppflags) { int q = oci->filter_level * 10 / 6; @@ -657,11 +648,9 @@ int vp9_post_proc_frame(VP9_COMMON *oci, YV12_BUFFER_CONFIG *dest, if (flags & VP9D_DEMACROBLOCK) { 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); } else if (flags & VP9D_DEBLOCK) { - vp9_deblock(oci->frame_to_show, &oci->post_proc_buffer, - q, 1, 0, RTCD_VTABLE(oci)); + vp9_deblock(oci->frame_to_show, &oci->post_proc_buffer, q, 1, 0); } else { vp8_yv12_copy_frame(oci->frame_to_show, &oci->post_proc_buffer); } @@ -672,14 +661,14 @@ int vp9_post_proc_frame(VP9_COMMON *oci, YV12_BUFFER_CONFIG *dest, fillrd(&oci->postproc_state, 63 - q, noise_level); } - POSTPROC_INVOKE(RTCD_VTABLE(oci), addnoise)(oci->post_proc_buffer.y_buffer, - oci->postproc_state.noise, - oci->postproc_state.blackclamp, - oci->postproc_state.whiteclamp, - oci->postproc_state.bothclamp, - oci->post_proc_buffer.y_width, - oci->post_proc_buffer.y_height, - oci->post_proc_buffer.y_stride); + vp9_plane_add_noise(oci->post_proc_buffer.y_buffer, + oci->postproc_state.noise, + oci->postproc_state.blackclamp, + oci->postproc_state.whiteclamp, + oci->postproc_state.bothclamp, + oci->post_proc_buffer.y_width, + oci->post_proc_buffer.y_height, + oci->post_proc_buffer.y_stride); } #if CONFIG_POSTPROC_VISUALIZER @@ -945,11 +934,8 @@ int vp9_post_proc_frame(VP9_COMMON *oci, YV12_BUFFER_CONFIG *dest, U = B_PREDICTION_MODE_colors[bmi->as_mode.first][1]; V = B_PREDICTION_MODE_colors[bmi->as_mode.first][2]; - POSTPROC_INVOKE(RTCD_VTABLE(oci), blend_b)(yl + bx, - ul + (bx >> 1), - vl + (bx >> 1), - Y, U, V, - 0xc000, y_stride); + vp9_blend_b(yl + bx, ul + (bx >> 1), vl + (bx >> 1), Y, U, V, + 0xc000, y_stride); } bmi++; } @@ -963,11 +949,8 @@ int vp9_post_proc_frame(VP9_COMMON *oci, YV12_BUFFER_CONFIG *dest, U = MB_PREDICTION_MODE_colors[mi->mbmi.mode][1]; V = MB_PREDICTION_MODE_colors[mi->mbmi.mode][2]; - POSTPROC_INVOKE(RTCD_VTABLE(oci), blend_mb_inner)(y_ptr + x, - u_ptr + (x >> 1), - v_ptr + (x >> 1), - Y, U, V, - 0xc000, y_stride); + vp9_blend_mb_inner(y_ptr + x, u_ptr + (x >> 1), v_ptr + (x >> 1), + Y, U, V, 0xc000, y_stride); } mi++; @@ -1002,11 +985,8 @@ int vp9_post_proc_frame(VP9_COMMON *oci, YV12_BUFFER_CONFIG *dest, U = MV_REFERENCE_FRAME_colors[mi->mbmi.ref_frame][1]; V = MV_REFERENCE_FRAME_colors[mi->mbmi.ref_frame][2]; - POSTPROC_INVOKE(RTCD_VTABLE(oci), blend_mb_outer)(y_ptr + x, - u_ptr + (x >> 1), - v_ptr + (x >> 1), - Y, U, V, - 0xc000, y_stride); + vp9_blend_mb_outer(y_ptr + x, u_ptr + (x >> 1), v_ptr + (x >> 1), + Y, U, V, 0xc000, y_stride); } mi++; diff --git a/vp9/common/vp9_postproc.h b/vp9/common/vp9_postproc.h index bf56b5692..de011b575 100644 --- a/vp9/common/vp9_postproc.h +++ b/vp9/common/vp9_postproc.h @@ -12,91 +12,6 @@ #ifndef POSTPROC_H #define POSTPROC_H -#define prototype_postproc_inplace(sym)\ - void sym(unsigned char *dst, int pitch, int rows, int cols, int flimit) - -#define prototype_postproc(sym)\ - void sym(unsigned char *src, unsigned char *dst, int src_pitch, \ - int dst_pitch, int rows, int cols, int flimit) - -#define prototype_postproc_addnoise(sym) \ - void sym(unsigned char *s, char *noise, char blackclamp[16], \ - char whiteclamp[16], char bothclamp[16], \ - unsigned int w, unsigned int h, int pitch) - -#define prototype_postproc_blend_mb_inner(sym)\ - void sym(unsigned char *y, unsigned char *u, unsigned char *v, \ - int y1, int u1, int v1, int alpha, int stride) - -#define prototype_postproc_blend_mb_outer(sym)\ - void sym(unsigned char *y, unsigned char *u, unsigned char *v, \ - int y1, int u1, int v1, int alpha, int stride) - -#define prototype_postproc_blend_b(sym)\ - void sym(unsigned char *y, unsigned char *u, unsigned char *v, \ - int y1, int u1, int v1, int alpha, int stride) - -#if ARCH_X86 || ARCH_X86_64 -#include "x86/vp9_postproc_x86.h" -#endif - -#ifndef vp9_postproc_down -#define vp9_postproc_down vp9_mbpost_proc_down_c -#endif -extern prototype_postproc_inplace(vp9_postproc_down); - -#ifndef vp9_postproc_across -#define vp9_postproc_across vp9_mbpost_proc_across_ip_c -#endif -extern prototype_postproc_inplace(vp9_postproc_across); - -#ifndef vp9_postproc_downacross -#define vp9_postproc_downacross vp9_post_proc_down_and_across_c -#endif -extern prototype_postproc(vp9_postproc_downacross); - -#ifndef vp9_postproc_addnoise -#define vp9_postproc_addnoise vp9_plane_add_noise_c -#endif -extern prototype_postproc_addnoise(vp9_postproc_addnoise); - -#ifndef vp9_postproc_blend_mb_inner -#define vp9_postproc_blend_mb_inner vp9_blend_mb_inner_c -#endif -extern prototype_postproc_blend_mb_inner(vp9_postproc_blend_mb_inner); - -#ifndef vp9_postproc_blend_mb_outer -#define vp9_postproc_blend_mb_outer vp9_blend_mb_outer_c -#endif -extern prototype_postproc_blend_mb_outer(vp9_postproc_blend_mb_outer); - -#ifndef vp9_postproc_blend_b -#define vp9_postproc_blend_b vp9_blend_b_c -#endif -extern prototype_postproc_blend_b(vp9_postproc_blend_b); - -typedef prototype_postproc((*vp9_postproc_fn_t)); -typedef prototype_postproc_inplace((*vp9_postproc_inplace_fn_t)); -typedef prototype_postproc_addnoise((*vp9_postproc_addnoise_fn_t)); -typedef prototype_postproc_blend_mb_inner((*vp9_postproc_blend_mb_inner_fn_t)); -typedef prototype_postproc_blend_mb_outer((*vp9_postproc_blend_mb_outer_fn_t)); -typedef prototype_postproc_blend_b((*vp9_postproc_blend_b_fn_t)); -typedef struct { - vp9_postproc_inplace_fn_t down; - vp9_postproc_inplace_fn_t across; - vp9_postproc_fn_t downacross; - vp9_postproc_addnoise_fn_t addnoise; - vp9_postproc_blend_mb_inner_fn_t blend_mb_inner; - vp9_postproc_blend_mb_outer_fn_t blend_mb_outer; - vp9_postproc_blend_b_fn_t blend_b; -} vp9_postproc_rtcd_vtable_t; - -#if CONFIG_RUNTIME_CPU_DETECT -#define POSTPROC_INVOKE(ctx,fn) (ctx)->fn -#else -#define POSTPROC_INVOKE(ctx,fn) vp9_postproc_##fn -#endif - #include "vpx_ports/mem.h" struct postproc_state { int last_q; @@ -116,13 +31,11 @@ void vp9_de_noise(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *post, int q, int low_var_thresh, - int flag, - vp9_postproc_rtcd_vtable_t *rtcd); + int flag); void vp9_deblock(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *post, int q, int low_var_thresh, - int flag, - vp9_postproc_rtcd_vtable_t *rtcd); + int flag); #endif diff --git a/vp9/common/vp9_rtcd_defs.sh b/vp9/common/vp9_rtcd_defs.sh index ea134a854..ee9a66cdc 100644 --- a/vp9/common/vp9_rtcd_defs.sh +++ b/vp9/common/vp9_rtcd_defs.sh @@ -219,6 +219,34 @@ vp9_loop_filter_simple_bh_media=vp9_loop_filter_bhs_armv6 vp9_loop_filter_simple_bh_neon=vp9_loop_filter_bhs_neon # +# post proc +# +prototype void vp9_mbpost_proc_down "unsigned char *dst, int pitch, int rows, int cols, int flimit" +specialize vp9_mbpost_proc_down mmx sse2 +vp9_mbpost_proc_down_sse2=vp9_mbpost_proc_down_xmm + +prototype void vp9_mbpost_proc_across_ip "unsigned char *src, int pitch, int rows, int cols, int flimit" +specialize vp9_mbpost_proc_across_ip sse2 +vp9_mbpost_proc_across_ip_sse2=vp9_mbpost_proc_across_ip_xmm + +prototype void vp9_post_proc_down_and_across "unsigned char *src_ptr, unsigned char *dst_ptr, int src_pixels_per_line, int dst_pixels_per_line, int rows, int cols, int flimit" +specialize vp9_post_proc_down_and_across mmx sse2 +vp9_post_proc_down_and_across_sse2=vp9_post_proc_down_and_across_xmm + +prototype void vp9_plane_add_noise "unsigned char *Start, char *noise, char blackclamp[16], char whiteclamp[16], char bothclamp[16], unsigned int Width, unsigned int Height, int Pitch" +specialize vp9_plane_add_noise mmx sse2 +vp9_plane_add_noise_sse2=vp9_plane_add_noise_wmt + +prototype void vp9_blend_mb_inner "unsigned char *y, unsigned char *u, unsigned char *v, int y1, int u1, int v1, int alpha, int stride" +specialize vp9_blend_mb_inner + +prototype void vp9_blend_mb_outer "unsigned char *y, unsigned char *u, unsigned char *v, int y1, int u1, int v1, int alpha, int stride" +specialize vp9_blend_mb_outer + +prototype void vp9_blend_b "unsigned char *y, unsigned char *u, unsigned char *v, int y1, int u1, int v1, int alpha, int stride" +specialize vp9_blend_b + +# # sad 16x3, 3x16 # prototype unsigned int vp9_sad16x3 "const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride" diff --git a/vp9/common/x86/vp9_x86_systemdependent.c b/vp9/common/x86/vp9_x86_systemdependent.c index 8a9f04c9a..23b7a588a 100644 --- a/vp9/common/x86/vp9_x86_systemdependent.c +++ b/vp9/common/x86/vp9_x86_systemdependent.c @@ -31,12 +31,6 @@ void vp9_arch_x86_common_init(VP9_COMMON *ctx) { // The commented functions need to be re-written for vpx. if (flags & HAS_MMX) { -#if CONFIG_POSTPROC - rtcd->postproc.down = vp9_mbpost_proc_down_mmx; - /*rtcd->postproc.across = vp9_mbpost_proc_across_ip_c;*/ - rtcd->postproc.downacross = vp9_post_proc_down_and_across_mmx; - rtcd->postproc.addnoise = vp9_plane_add_noise_mmx; -#endif } #endif @@ -47,12 +41,6 @@ void vp9_arch_x86_common_init(VP9_COMMON *ctx) { // rtcd->idct.iwalsh16 = vp9_short_inv_walsh4x4_sse2; -#if CONFIG_POSTPROC - rtcd->postproc.down = vp9_mbpost_proc_down_xmm; - rtcd->postproc.across = vp9_mbpost_proc_across_ip_xmm; - rtcd->postproc.downacross = vp9_post_proc_down_and_across_xmm; - rtcd->postproc.addnoise = vp9_plane_add_noise_wmt; -#endif } #endif |