summaryrefslogtreecommitdiff
path: root/vp9/common/vp9_postproc.h
blob: bf56b5692e9f37b80779fd5ba252f5f3413b48e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 *  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_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;
  int           last_noise;
  char          noise[3072];
  DECLARE_ALIGNED(16, char, blackclamp[16]);
  DECLARE_ALIGNED(16, char, whiteclamp[16]);
  DECLARE_ALIGNED(16, char, bothclamp[16]);
};
#include "vp9_onyxc_int.h"
#include "vp9_ppflags.h"
int vp9_post_proc_frame(struct VP9Common *oci, YV12_BUFFER_CONFIG *dest,
                        vp9_ppflags_t *flags);


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);

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);
#endif