Merge "documentation: minor cosmetics"
[libvpx.git] / vp8 / common / arm / loopfilter_arm.c
blob3532a0356a91a355ce8eba8f057acf8b347c0662
1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
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 */
12 #include "vpx_ports/config.h"
13 #include <math.h>
14 #include "vp8/common/loopfilter.h"
15 #include "vp8/common/onyxc_int.h"
17 extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6);
18 extern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6);
19 extern prototype_loopfilter(vp8_mbloop_filter_horizontal_edge_armv6);
20 extern prototype_loopfilter(vp8_mbloop_filter_vertical_edge_armv6);
21 extern prototype_loopfilter(vp8_loop_filter_simple_horizontal_edge_armv6);
22 extern prototype_loopfilter(vp8_loop_filter_simple_vertical_edge_armv6);
24 extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_y_neon);
25 extern prototype_loopfilter(vp8_loop_filter_vertical_edge_y_neon);
26 extern prototype_loopfilter(vp8_mbloop_filter_horizontal_edge_y_neon);
27 extern prototype_loopfilter(vp8_mbloop_filter_vertical_edge_y_neon);
28 extern prototype_loopfilter(vp8_loop_filter_simple_horizontal_edge_neon);
29 extern prototype_loopfilter(vp8_loop_filter_simple_vertical_edge_neon);
31 extern loop_filter_uvfunction vp8_loop_filter_horizontal_edge_uv_neon;
32 extern loop_filter_uvfunction vp8_loop_filter_vertical_edge_uv_neon;
33 extern loop_filter_uvfunction vp8_mbloop_filter_horizontal_edge_uv_neon;
34 extern loop_filter_uvfunction vp8_mbloop_filter_vertical_edge_uv_neon;
37 #if HAVE_ARMV6
38 /*ARMV6 loopfilter functions*/
39 /* Horizontal MB filtering */
40 void vp8_loop_filter_mbh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
41 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
43 (void) simpler_lpf;
44 vp8_mbloop_filter_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
46 if (u_ptr)
47 vp8_mbloop_filter_horizontal_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
49 if (v_ptr)
50 vp8_mbloop_filter_horizontal_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
53 void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
54 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
56 (void) u_ptr;
57 (void) v_ptr;
58 (void) uv_stride;
59 (void) simpler_lpf;
60 vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
63 /* Vertical MB Filtering */
64 void vp8_loop_filter_mbv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
65 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
67 (void) simpler_lpf;
68 vp8_mbloop_filter_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
70 if (u_ptr)
71 vp8_mbloop_filter_vertical_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
73 if (v_ptr)
74 vp8_mbloop_filter_vertical_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
77 void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
78 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
80 (void) u_ptr;
81 (void) v_ptr;
82 (void) uv_stride;
83 (void) simpler_lpf;
84 vp8_loop_filter_simple_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
87 /* Horizontal B Filtering */
88 void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
89 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
91 (void) simpler_lpf;
92 vp8_loop_filter_horizontal_edge_armv6(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
93 vp8_loop_filter_horizontal_edge_armv6(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
94 vp8_loop_filter_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
96 if (u_ptr)
97 vp8_loop_filter_horizontal_edge_armv6(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
99 if (v_ptr)
100 vp8_loop_filter_horizontal_edge_armv6(v_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
103 void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
104 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
106 (void) u_ptr;
107 (void) v_ptr;
108 (void) uv_stride;
109 (void) simpler_lpf;
110 vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
111 vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
112 vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
115 /* Vertical B Filtering */
116 void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
117 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
119 (void) simpler_lpf;
120 vp8_loop_filter_vertical_edge_armv6(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
121 vp8_loop_filter_vertical_edge_armv6(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
122 vp8_loop_filter_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
124 if (u_ptr)
125 vp8_loop_filter_vertical_edge_armv6(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
127 if (v_ptr)
128 vp8_loop_filter_vertical_edge_armv6(v_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
131 void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
132 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
134 (void) u_ptr;
135 (void) v_ptr;
136 (void) uv_stride;
137 (void) simpler_lpf;
138 vp8_loop_filter_simple_vertical_edge_armv6(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
139 vp8_loop_filter_simple_vertical_edge_armv6(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
140 vp8_loop_filter_simple_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
142 #endif
144 #if HAVE_ARMV7
145 /* NEON loopfilter functions */
146 /* Horizontal MB filtering */
147 void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
148 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
150 (void) simpler_lpf;
151 vp8_mbloop_filter_horizontal_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
153 if (u_ptr)
154 vp8_mbloop_filter_horizontal_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr);
157 void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
158 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
160 (void) u_ptr;
161 (void) v_ptr;
162 (void) uv_stride;
163 (void) simpler_lpf;
164 vp8_loop_filter_simple_horizontal_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
167 /* Vertical MB Filtering */
168 void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
169 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
171 (void) simpler_lpf;
172 vp8_mbloop_filter_vertical_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
174 if (u_ptr)
175 vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr);
178 void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
179 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
181 (void) u_ptr;
182 (void) v_ptr;
183 (void) uv_stride;
184 (void) simpler_lpf;
185 vp8_loop_filter_simple_vertical_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
188 /* Horizontal B Filtering */
189 void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
190 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
192 (void) simpler_lpf;
193 vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
194 vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
195 vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
197 if (u_ptr)
198 vp8_loop_filter_horizontal_edge_uv_neon(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4 * uv_stride);
201 void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
202 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
204 (void) u_ptr;
205 (void) v_ptr;
206 (void) uv_stride;
207 (void) simpler_lpf;
208 vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 4 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
209 vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 8 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
210 vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
213 /* Vertical B Filtering */
214 void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
215 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
217 (void) simpler_lpf;
218 vp8_loop_filter_vertical_edge_y_neon(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
219 vp8_loop_filter_vertical_edge_y_neon(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
220 vp8_loop_filter_vertical_edge_y_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
222 if (u_ptr)
223 vp8_loop_filter_vertical_edge_uv_neon(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4);
226 void vp8_loop_filter_bvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
227 int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
229 (void) u_ptr;
230 (void) v_ptr;
231 (void) uv_stride;
232 (void) simpler_lpf;
233 vp8_loop_filter_simple_vertical_edge_neon(y_ptr + 4, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
234 vp8_loop_filter_simple_vertical_edge_neon(y_ptr + 8, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
235 vp8_loop_filter_simple_vertical_edge_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
237 #endif