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