1/* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 12#ifndef POSTPROC_H 13#define POSTPROC_H 14 15#define prototype_postproc_inplace(sym)\ 16 void sym (unsigned char *dst, int pitch, int rows, int cols,int flimit) 17 18#define prototype_postproc(sym)\ 19 void sym (unsigned char *src, unsigned char *dst, int src_pitch,\ 20 int dst_pitch, int rows, int cols, int flimit) 21 22#define prototype_postproc_addnoise(sym) \ 23 void sym (unsigned char *s, char *noise, char blackclamp[16],\ 24 char whiteclamp[16], char bothclamp[16],\ 25 unsigned int w, unsigned int h, int pitch) 26 27#define prototype_postproc_blend_mb_inner(sym)\ 28 void sym (unsigned char *y, unsigned char *u, unsigned char *v,\ 29 int y1, int u1, int v1, int alpha, int stride) 30 31#define prototype_postproc_blend_mb_outer(sym)\ 32 void sym (unsigned char *y, unsigned char *u, unsigned char *v,\ 33 int y1, int u1, int v1, int alpha, int stride) 34 35#define prototype_postproc_blend_b(sym)\ 36 void sym (unsigned char *y, unsigned char *u, unsigned char *v,\ 37 int y1, int u1, int v1, int alpha, int stride) 38 39#if ARCH_X86 || ARCH_X86_64 40#include "x86/postproc_x86.h" 41#endif 42 43#ifndef vp8_postproc_down 44#define vp8_postproc_down vp8_mbpost_proc_down_c 45#endif 46extern prototype_postproc_inplace(vp8_postproc_down); 47 48#ifndef vp8_postproc_across 49#define vp8_postproc_across vp8_mbpost_proc_across_ip_c 50#endif 51extern prototype_postproc_inplace(vp8_postproc_across); 52 53#ifndef vp8_postproc_downacross 54#define vp8_postproc_downacross vp8_post_proc_down_and_across_c 55#endif 56extern prototype_postproc(vp8_postproc_downacross); 57 58#ifndef vp8_postproc_addnoise 59#define vp8_postproc_addnoise vp8_plane_add_noise_c 60#endif 61extern prototype_postproc_addnoise(vp8_postproc_addnoise); 62 63#ifndef vp8_postproc_blend_mb_inner 64#define vp8_postproc_blend_mb_inner vp8_blend_mb_inner_c 65#endif 66extern prototype_postproc_blend_mb_inner(vp8_postproc_blend_mb_inner); 67 68#ifndef vp8_postproc_blend_mb_outer 69#define vp8_postproc_blend_mb_outer vp8_blend_mb_outer_c 70#endif 71extern prototype_postproc_blend_mb_outer(vp8_postproc_blend_mb_outer); 72 73#ifndef vp8_postproc_blend_b 74#define vp8_postproc_blend_b vp8_blend_b_c 75#endif 76extern prototype_postproc_blend_b(vp8_postproc_blend_b); 77 78typedef prototype_postproc((*vp8_postproc_fn_t)); 79typedef prototype_postproc_inplace((*vp8_postproc_inplace_fn_t)); 80typedef prototype_postproc_addnoise((*vp8_postproc_addnoise_fn_t)); 81typedef prototype_postproc_blend_mb_inner((*vp8_postproc_blend_mb_inner_fn_t)); 82typedef prototype_postproc_blend_mb_outer((*vp8_postproc_blend_mb_outer_fn_t)); 83typedef prototype_postproc_blend_b((*vp8_postproc_blend_b_fn_t)); 84typedef struct 85{ 86 vp8_postproc_inplace_fn_t down; 87 vp8_postproc_inplace_fn_t across; 88 vp8_postproc_fn_t downacross; 89 vp8_postproc_addnoise_fn_t addnoise; 90 vp8_postproc_blend_mb_inner_fn_t blend_mb_inner; 91 vp8_postproc_blend_mb_outer_fn_t blend_mb_outer; 92 vp8_postproc_blend_b_fn_t blend_b; 93} vp8_postproc_rtcd_vtable_t; 94 95#if CONFIG_RUNTIME_CPU_DETECT 96#define POSTPROC_INVOKE(ctx,fn) (ctx)->fn 97#else 98#define POSTPROC_INVOKE(ctx,fn) vp8_postproc_##fn 99#endif 100 101#include "vpx_ports/mem.h" 102struct postproc_state 103{ 104 int last_q; 105 int last_noise; 106 char noise[3072]; 107 DECLARE_ALIGNED(16, char, blackclamp[16]); 108 DECLARE_ALIGNED(16, char, whiteclamp[16]); 109 DECLARE_ALIGNED(16, char, bothclamp[16]); 110}; 111#include "onyxc_int.h" 112#include "ppflags.h" 113int vp8_post_proc_frame(struct VP8Common *oci, YV12_BUFFER_CONFIG *dest, 114 vp8_ppflags_t *flags); 115 116 117void vp8_de_noise(YV12_BUFFER_CONFIG *source, 118 YV12_BUFFER_CONFIG *post, 119 int q, 120 int low_var_thresh, 121 int flag, 122 vp8_postproc_rtcd_vtable_t *rtcd); 123 124void vp8_deblock(YV12_BUFFER_CONFIG *source, 125 YV12_BUFFER_CONFIG *post, 126 int q, 127 int low_var_thresh, 128 int flag, 129 vp8_postproc_rtcd_vtable_t *rtcd); 130#endif 131