rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_c;
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_c;
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_c;
-
-#if CONFIG_POSTPROC || (CONFIG_VP8_ENCODER && CONFIG_INTERNAL_STATS)
- rtcd->postproc.down = vp8_mbpost_proc_down_c;
- rtcd->postproc.across = vp8_mbpost_proc_across_ip_c;
- rtcd->postproc.downacross = vp8_post_proc_down_and_across_c;
- rtcd->postproc.addnoise = vp8_plane_add_noise_c;
- rtcd->postproc.blend_mb_inner = vp8_blend_mb_inner_c;
- rtcd->postproc.blend_mb_outer = vp8_blend_mb_outer_c;
- rtcd->postproc.blend_b = vp8_blend_b_c;
-#endif
-
#endif
#if ARCH_X86 || ARCH_X86_64
{
#if CONFIG_RUNTIME_CPU_DETECT
vp8_subpix_rtcd_vtable_t subpix;
-#if CONFIG_POSTPROC
- vp8_postproc_rtcd_vtable_t postproc;
-#endif
int flags;
#else
int unused;
YV12_BUFFER_CONFIG *post,
int q,
int low_var_thresh,
- int flag,
- vp8_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));
+ vp8_post_proc_down_and_across(source->y_buffer, post->y_buffer, source->y_stride, post->y_stride, source->y_height, source->y_width, ppl);
+ vp8_mbpost_proc_across_ip(post->y_buffer, post->y_stride, post->y_height, post->y_width, q2mbl(q));
+ vp8_mbpost_proc_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);
+ vp8_post_proc_down_and_across(source->u_buffer, post->u_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);
+ vp8_post_proc_down_and_across(source->v_buffer, post->v_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);
}
YV12_BUFFER_CONFIG *post,
int q,
int low_var_thresh,
- int flag,
- vp8_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);
+ vp8_post_proc_down_and_across(source->y_buffer, post->y_buffer, source->y_stride, post->y_stride, source->y_height, source->y_width, ppl);
+ vp8_post_proc_down_and_across(source->u_buffer, post->u_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);
+ vp8_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 vp8_de_noise(YV12_BUFFER_CONFIG *source,
YV12_BUFFER_CONFIG *post,
int q,
int low_var_thresh,
- int flag,
- vp8_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)(
+ vp8_post_proc_down_and_across(
source->y_buffer + 2 * source->y_stride + 2,
source->y_buffer + 2 * source->y_stride + 2,
source->y_stride,
source->y_height - 4,
source->y_width - 4,
ppl);
- POSTPROC_INVOKE(rtcd, downacross)(
+ vp8_post_proc_down_and_across(
source->u_buffer + 2 * source->uv_stride + 2,
source->u_buffer + 2 * source->uv_stride + 2,
source->uv_stride,
source->uv_stride,
source->uv_height - 4,
source->uv_width - 4, ppl);
- POSTPROC_INVOKE(rtcd, downacross)(
+ vp8_post_proc_down_and_across(
source->v_buffer + 2 * source->uv_stride + 2,
source->v_buffer + 2 * source->uv_stride + 2,
source->uv_stride,
}
}
-#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
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));
+ q + (deblock_level - 5) * 10, 1, 0);
}
else if (flags & VP8D_DEBLOCK)
{
vp8_deblock(&oci->post_proc_buffer_int, &oci->post_proc_buffer,
- q, 1, 0, RTCD_VTABLE(oci));
+ q, 1, 0);
}
}
/* Move partially towards the base q of the previous frame */
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));
+ q + (deblock_level - 5) * 10, 1, 0);
oci->postproc_state.last_base_qindex = oci->base_qindex;
}
else if (flags & VP8D_DEBLOCK)
{
vp8_deblock(oci->frame_to_show, &oci->post_proc_buffer,
- q, 1, 0, RTCD_VTABLE(oci));
+ q, 1, 0);
oci->postproc_state.last_base_qindex = oci->base_qindex;
}
else
fillrd(&oci->postproc_state, 63 - q, noise_level);
}
- POSTPROC_INVOKE(RTCD_VTABLE(oci), addnoise)
+ vp8_plane_add_noise
(oci->post_proc_buffer.y_buffer,
oci->postproc_state.noise,
oci->postproc_state.blackclamp,
U = B_PREDICTION_MODE_colors[bmi->as_mode][1];
V = B_PREDICTION_MODE_colors[bmi->as_mode][2];
- POSTPROC_INVOKE(RTCD_VTABLE(oci), blend_b)
+ vp8_blend_b
(yl+bx, ul+(bx>>1), vl+(bx>>1), Y, U, V, 0xc000, y_stride);
}
bmi++;
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)
+ vp8_blend_mb_inner
(y_ptr+x, u_ptr+(x>>1), v_ptr+(x>>1), Y, U, V, 0xc000, y_stride);
}
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)
+ vp8_blend_mb_outer
(y_ptr+x, u_ptr+(x>>1), v_ptr+(x>>1), Y, U, V, 0xc000, y_stride);
}
#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/postproc_x86.h"
-#endif
-
-#ifndef vp8_postproc_down
-#define vp8_postproc_down vp8_mbpost_proc_down_c
-#endif
-extern prototype_postproc_inplace(vp8_postproc_down);
-
-#ifndef vp8_postproc_across
-#define vp8_postproc_across vp8_mbpost_proc_across_ip_c
-#endif
-extern prototype_postproc_inplace(vp8_postproc_across);
-
-#ifndef vp8_postproc_downacross
-#define vp8_postproc_downacross vp8_post_proc_down_and_across_c
-#endif
-extern prototype_postproc(vp8_postproc_downacross);
-
-#ifndef vp8_postproc_addnoise
-#define vp8_postproc_addnoise vp8_plane_add_noise_c
-#endif
-extern prototype_postproc_addnoise(vp8_postproc_addnoise);
-
-#ifndef vp8_postproc_blend_mb_inner
-#define vp8_postproc_blend_mb_inner vp8_blend_mb_inner_c
-#endif
-extern prototype_postproc_blend_mb_inner(vp8_postproc_blend_mb_inner);
-
-#ifndef vp8_postproc_blend_mb_outer
-#define vp8_postproc_blend_mb_outer vp8_blend_mb_outer_c
-#endif
-extern prototype_postproc_blend_mb_outer(vp8_postproc_blend_mb_outer);
-
-#ifndef vp8_postproc_blend_b
-#define vp8_postproc_blend_b vp8_blend_b_c
-#endif
-extern prototype_postproc_blend_b(vp8_postproc_blend_b);
-
-typedef prototype_postproc((*vp8_postproc_fn_t));
-typedef prototype_postproc_inplace((*vp8_postproc_inplace_fn_t));
-typedef prototype_postproc_addnoise((*vp8_postproc_addnoise_fn_t));
-typedef prototype_postproc_blend_mb_inner((*vp8_postproc_blend_mb_inner_fn_t));
-typedef prototype_postproc_blend_mb_outer((*vp8_postproc_blend_mb_outer_fn_t));
-typedef prototype_postproc_blend_b((*vp8_postproc_blend_b_fn_t));
-typedef struct
-{
- vp8_postproc_inplace_fn_t down;
- vp8_postproc_inplace_fn_t across;
- vp8_postproc_fn_t downacross;
- vp8_postproc_addnoise_fn_t addnoise;
- vp8_postproc_blend_mb_inner_fn_t blend_mb_inner;
- vp8_postproc_blend_mb_outer_fn_t blend_mb_outer;
- vp8_postproc_blend_b_fn_t blend_b;
-} vp8_postproc_rtcd_vtable_t;
-
-#if CONFIG_RUNTIME_CPU_DETECT
-#define POSTPROC_INVOKE(ctx,fn) (ctx)->fn
-#else
-#define POSTPROC_INVOKE(ctx,fn) vp8_postproc_##fn
-#endif
-
#include "vpx_ports/mem.h"
struct postproc_state
{
YV12_BUFFER_CONFIG *post,
int q,
int low_var_thresh,
- int flag,
- vp8_postproc_rtcd_vtable_t *rtcd);
+ int flag);
void vp8_deblock(YV12_BUFFER_CONFIG *source,
YV12_BUFFER_CONFIG *post,
int q,
int low_var_thresh,
- int flag,
- vp8_postproc_rtcd_vtable_t *rtcd);
+ int flag);
#endif
#iwalsh1
prototype void vp8_short_inv_walsh4x4_1 "short *input, short *output"
-specialize vp8_short_inv_walsh4x4_1 c #no asm yet
+# no asm yet
#iwalsh16
prototype void vp8_short_inv_walsh4x4 "short *input, short *output"
prototype void vp8_intra4x4_predict "unsigned char *src, int src_stride, int b_mode, unsigned char *dst, int dst_stride"
specialize vp8_intra4x4_predict media
vp8_intra4x4_predict_media=vp8_intra4x4_predict_armv6
+
+#
+# Postproc
+#
+if [ "$CONFIG_POSTPROC" = "yes" ]; then
+ prototype void vp8_mbpost_proc_down "unsigned char *dst, int pitch, int rows, int cols,int flimit"
+ specialize vp8_mbpost_proc_down mmx sse2
+ vp8_mbpost_proc_down_sse2=vp8_mbpost_proc_down_xmm
+
+ prototype void vp8_mbpost_proc_across_ip "unsigned char *dst, int pitch, int rows, int cols,int flimit"
+ specialize vp8_mbpost_proc_across_ip sse2
+ vp8_mbpost_proc_across_ip_sse2=vp8_mbpost_proc_across_ip_xmm
+
+ prototype void vp8_post_proc_down_and_across "unsigned char *src, unsigned char *dst, int src_pitch, int dst_pitch, int rows, int cols, int flimit"
+ specialize vp8_post_proc_down_and_across mmx sse2
+ vp8_post_proc_down_and_across_sse2=vp8_post_proc_down_and_across_xmm
+
+ prototype void vp8_plane_add_noise "unsigned char *s, char *noise, char blackclamp[16], char whiteclamp[16], char bothclamp[16], unsigned int w, unsigned int h, int pitch"
+ specialize vp8_plane_add_noise mmx sse2
+ vp8_plane_add_noise_sse2=vp8_plane_add_noise_wmt
+
+ prototype void vp8_blend_mb_inner "unsigned char *y, unsigned char *u, unsigned char *v, int y1, int u1, int v1, int alpha, int stride"
+ # no asm yet
+
+ prototype void vp8_blend_mb_outer "unsigned char *y, unsigned char *u, unsigned char *v, int y1, int u1, int v1, int alpha, int stride"
+ # no asm yet
+
+ prototype void vp8_blend_b "unsigned char *y, unsigned char *u, unsigned char *v, int y1, int u1, int v1, int alpha, int stride"
+ # no asm yet
+fi
+++ /dev/null
-/*
- * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-#ifndef POSTPROC_X86_H
-#define POSTPROC_X86_H
-
-/* Note:
- *
- * This platform is commonly built for runtime CPU detection. If you modify
- * any of the function mappings present in this file, be sure to also update
- * them in the function pointer initialization code
- */
-
-#if HAVE_MMX
-extern prototype_postproc_inplace(vp8_mbpost_proc_down_mmx);
-extern prototype_postproc(vp8_post_proc_down_and_across_mmx);
-extern prototype_postproc_addnoise(vp8_plane_add_noise_mmx);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef vp8_postproc_down
-#define vp8_postproc_down vp8_mbpost_proc_down_mmx
-
-#undef vp8_postproc_downacross
-#define vp8_postproc_downacross vp8_post_proc_down_and_across_mmx
-
-#undef vp8_postproc_addnoise
-#define vp8_postproc_addnoise vp8_plane_add_noise_mmx
-
-#endif
-#endif
-
-
-#if HAVE_SSE2
-extern prototype_postproc_inplace(vp8_mbpost_proc_down_xmm);
-extern prototype_postproc_inplace(vp8_mbpost_proc_across_ip_xmm);
-extern prototype_postproc(vp8_post_proc_down_and_across_xmm);
-extern prototype_postproc_addnoise(vp8_plane_add_noise_wmt);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef vp8_postproc_down
-#define vp8_postproc_down vp8_mbpost_proc_down_xmm
-
-#undef vp8_postproc_across
-#define vp8_postproc_across vp8_mbpost_proc_across_ip_xmm
-
-#undef vp8_postproc_downacross
-#define vp8_postproc_downacross vp8_post_proc_down_and_across_xmm
-
-#undef vp8_postproc_addnoise
-#define vp8_postproc_addnoise vp8_plane_add_noise_wmt
-
-
-#endif
-#endif
-
-#endif
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_mmx;
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_mmx;
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_mmx;
-
-#if CONFIG_POSTPROC
- rtcd->postproc.down = vp8_mbpost_proc_down_mmx;
- /*rtcd->postproc.across = vp8_mbpost_proc_across_ip_c;*/
- rtcd->postproc.downacross = vp8_post_proc_down_and_across_mmx;
- rtcd->postproc.addnoise = vp8_plane_add_noise_mmx;
-#endif
}
#endif
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_sse2;
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_sse2;
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_sse2;
-
-#if CONFIG_POSTPROC
- rtcd->postproc.down = vp8_mbpost_proc_down_xmm;
- rtcd->postproc.across = vp8_mbpost_proc_across_ip_xmm;
- rtcd->postproc.downacross = vp8_post_proc_down_and_across_xmm;
- rtcd->postproc.addnoise = vp8_plane_add_noise_wmt;
-#endif
}
#endif
if (cm->frame_type == KEY_FRAME)
{
- vp8_de_noise(cpi->Source, cpi->Source, l , 1, 0, RTCD(postproc));
+ vp8_de_noise(cpi->Source, cpi->Source, l , 1, 0);
}
else
{
- vp8_de_noise(cpi->Source, cpi->Source, l , 1, 0, RTCD(postproc));
+ vp8_de_noise(cpi->Source, cpi->Source, l , 1, 0);
src = cpi->Source->y_buffer;
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.c
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.h
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/subpixel_x86.h
-VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/postproc_x86.h
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/x86_systemdependent.c
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp8_asm_stubs.c
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/loopfilter_x86.c