summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorJim Bankoski <jimbankoski@google.com>2012-11-28 10:30:42 -0800
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2012-11-28 10:30:42 -0800
commit926d95cd84745764ad312b5d5c297f4b5570d03d (patch)
tree04a363b870d88b97498314b3b498876d231abcaa /vp9/common
parent00e2c6bf7ac0c0bb0de2021987b4d4fbf5734d15 (diff)
parent85cba19e16328f1d94a71ef60d82c07a0d6daaca (diff)
downloadlibvpx-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.c2
-rw-r--r--vp9/common/generic/vp9_systemdependent.c10
-rw-r--r--vp9/common/vp9_onyxc_int.h3
-rw-r--r--vp9/common/vp9_postproc.c144
-rw-r--r--vp9/common/vp9_postproc.h91
-rw-r--r--vp9/common/vp9_rtcd_defs.sh28
-rw-r--r--vp9/common/x86/vp9_x86_systemdependent.c12
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