FFmpeg  4.0
tpeldsp.c
Go to the documentation of this file.
1 /*
2  * thirdpel DSP functions
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /**
22  * @file
23  * thirdpel DSP functions
24  */
25 
26 #include <stdint.h>
27 
28 #include "libavutil/attributes.h"
29 #include "tpeldsp.h"
30 
31 #define BIT_DEPTH 8
32 #include "pel_template.c"
33 
34 static inline void put_tpel_pixels_mc00_c(uint8_t *dst, const uint8_t *src,
35  int stride, int width, int height)
36 {
37  switch (width) {
38  case 2:
39  put_pixels2_8_c(dst, src, stride, height);
40  break;
41  case 4:
42  put_pixels4_8_c(dst, src, stride, height);
43  break;
44  case 8:
45  put_pixels8_8_c(dst, src, stride, height);
46  break;
47  case 16:
48  put_pixels16_8_c(dst, src, stride, height);
49  break;
50  }
51 }
52 
53 static inline void put_tpel_pixels_mc10_c(uint8_t *dst, const uint8_t *src,
54  int stride, int width, int height)
55 {
56  int i, j;
57 
58  for (i = 0; i < height; i++) {
59  for (j = 0; j < width; j++)
60  dst[j] = ((2 * src[j] + src[j + 1] + 1) *
61  683) >> 11;
62  src += stride;
63  dst += stride;
64  }
65 }
66 
67 static inline void put_tpel_pixels_mc20_c(uint8_t *dst, const uint8_t *src,
68  int stride, int width, int height)
69 {
70  int i, j;
71 
72  for (i = 0; i < height; i++) {
73  for (j = 0; j < width; j++)
74  dst[j] = ((src[j] + 2 * src[j + 1] + 1) *
75  683) >> 11;
76  src += stride;
77  dst += stride;
78  }
79 }
80 
81 static inline void put_tpel_pixels_mc01_c(uint8_t *dst, const uint8_t *src,
82  int stride, int width, int height)
83 {
84  int i, j;
85 
86  for (i = 0; i < height; i++) {
87  for (j = 0; j < width; j++)
88  dst[j] = ((2 * src[j] + src[j + stride] + 1) *
89  683) >> 11;
90  src += stride;
91  dst += stride;
92  }
93 }
94 
95 static inline void put_tpel_pixels_mc11_c(uint8_t *dst, const uint8_t *src,
96  int stride, int width, int height)
97 {
98  int i, j;
99 
100  for (i = 0; i < height; i++) {
101  for (j = 0; j < width; j++)
102  dst[j] = ((4 * src[j] + 3 * src[j + 1] +
103  3 * src[j + stride] + 2 * src[j + stride + 1] + 6) *
104  2731) >> 15;
105  src += stride;
106  dst += stride;
107  }
108 }
109 
110 static inline void put_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src,
111  int stride, int width, int height)
112 {
113  int i, j;
114 
115  for (i = 0; i < height; i++) {
116  for (j = 0; j < width; j++)
117  dst[j] = ((3 * src[j] + 2 * src[j + 1] +
118  4 * src[j + stride] + 3 * src[j + stride + 1] + 6) *
119  2731) >> 15;
120  src += stride;
121  dst += stride;
122  }
123 }
124 
125 static inline void put_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src,
126  int stride, int width, int height)
127 {
128  int i, j;
129 
130  for (i = 0; i < height; i++) {
131  for (j = 0; j < width; j++)
132  dst[j] = ((src[j] + 2 * src[j + stride] + 1) *
133  683) >> 11;
134  src += stride;
135  dst += stride;
136  }
137 }
138 
139 static inline void put_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src,
140  int stride, int width, int height)
141 {
142  int i, j;
143 
144  for (i = 0; i < height; i++) {
145  for (j = 0; j < width; j++)
146  dst[j] = ((3 * src[j] + 4 * src[j + 1] +
147  2 * src[j + stride] + 3 * src[j + stride + 1] + 6) *
148  2731) >> 15;
149  src += stride;
150  dst += stride;
151  }
152 }
153 
154 static inline void put_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src,
155  int stride, int width, int height)
156 {
157  int i, j;
158 
159  for (i = 0; i < height; i++) {
160  for (j = 0; j < width; j++)
161  dst[j] = ((2 * src[j] + 3 * src[j + 1] +
162  3 * src[j + stride] + 4 * src[j + stride + 1] + 6) *
163  2731) >> 15;
164  src += stride;
165  dst += stride;
166  }
167 }
168 
169 static inline void avg_tpel_pixels_mc00_c(uint8_t *dst, const uint8_t *src,
170  int stride, int width, int height)
171 {
172  switch (width) {
173  case 2:
174  avg_pixels2_8_c(dst, src, stride, height);
175  break;
176  case 4:
177  avg_pixels4_8_c(dst, src, stride, height);
178  break;
179  case 8:
180  avg_pixels8_8_c(dst, src, stride, height);
181  break;
182  case 16:
183  avg_pixels16_8_c(dst, src, stride, height);
184  break;
185  }
186 }
187 
188 static inline void avg_tpel_pixels_mc10_c(uint8_t *dst, const uint8_t *src,
189  int stride, int width, int height)
190 {
191  int i, j;
192 
193  for (i = 0; i < height; i++) {
194  for (j = 0; j < width; j++)
195  dst[j] = (dst[j] +
196  (((2 * src[j] + src[j + 1] + 1) *
197  683) >> 11) + 1) >> 1;
198  src += stride;
199  dst += stride;
200  }
201 }
202 
203 static inline void avg_tpel_pixels_mc20_c(uint8_t *dst, const uint8_t *src,
204  int stride, int width, int height)
205 {
206  int i, j;
207 
208  for (i = 0; i < height; i++) {
209  for (j = 0; j < width; j++)
210  dst[j] = (dst[j] +
211  (((src[j] + 2 * src[j + 1] + 1) *
212  683) >> 11) + 1) >> 1;
213  src += stride;
214  dst += stride;
215  }
216 }
217 
218 static inline void avg_tpel_pixels_mc01_c(uint8_t *dst, const uint8_t *src,
219  int stride, int width, int height)
220 {
221  int i, j;
222 
223  for (i = 0; i < height; i++) {
224  for (j = 0; j < width; j++)
225  dst[j] = (dst[j] +
226  (((2 * src[j] + src[j + stride] + 1) *
227  683) >> 11) + 1) >> 1;
228  src += stride;
229  dst += stride;
230  }
231 }
232 
233 static inline void avg_tpel_pixels_mc11_c(uint8_t *dst, const uint8_t *src,
234  int stride, int width, int height)
235 {
236  int i, j;
237 
238  for (i = 0; i < height; i++) {
239  for (j = 0; j < width; j++)
240  dst[j] = (dst[j] +
241  (((4 * src[j] + 3 * src[j + 1] +
242  3 * src[j + stride] + 2 * src[j + stride + 1] + 6) *
243  2731) >> 15) + 1) >> 1;
244  src += stride;
245  dst += stride;
246  }
247 }
248 
249 static inline void avg_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src,
250  int stride, int width, int height)
251 {
252  int i, j;
253 
254  for (i = 0; i < height; i++) {
255  for (j = 0; j < width; j++)
256  dst[j] = (dst[j] +
257  (((3 * src[j] + 2 * src[j + 1] +
258  4 * src[j + stride] + 3 * src[j + stride + 1] + 6) *
259  2731) >> 15) + 1) >> 1;
260  src += stride;
261  dst += stride;
262  }
263 }
264 
265 static inline void avg_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src,
266  int stride, int width, int height)
267 {
268  int i, j;
269 
270  for (i = 0; i < height; i++) {
271  for (j = 0; j < width; j++)
272  dst[j] = (dst[j] +
273  (((src[j] + 2 * src[j + stride] + 1) *
274  683) >> 11) + 1) >> 1;
275  src += stride;
276  dst += stride;
277  }
278 }
279 
280 static inline void avg_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src,
281  int stride, int width, int height)
282 {
283  int i, j;
284 
285  for (i = 0; i < height; i++) {
286  for (j = 0; j < width; j++)
287  dst[j] = (dst[j] +
288  (((3 * src[j] + 4 * src[j + 1] +
289  2 * src[j + stride] + 3 * src[j + stride + 1] + 6) *
290  2731) >> 15) + 1) >> 1;
291  src += stride;
292  dst += stride;
293  }
294 }
295 
296 static inline void avg_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src,
297  int stride, int width, int height)
298 {
299  int i, j;
300 
301  for (i = 0; i < height; i++) {
302  for (j = 0; j < width; j++)
303  dst[j] = (dst[j] +
304  (((2 * src[j] + 3 * src[j + 1] +
305  3 * src[j + stride] + 4 * src[j + stride + 1] + 6) *
306  2731) >> 15) + 1) >> 1;
307  src += stride;
308  dst += stride;
309  }
310 }
311 
313 {
323 
333 }
static void avg_tpel_pixels_mc01_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:218
static void put_tpel_pixels_mc10_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:53
static void avg_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:296
static void avg_tpel_pixels_mc20_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:203
#define src
Definition: vp8dsp.c:254
int stride
Definition: mace.c:144
Macro definitions for various function/variable attributes.
static void put_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:110
uint8_t
#define av_cold
Definition: attributes.h:82
static void put_tpel_pixels_mc01_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:81
static void avg_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:265
static void put_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:125
static void put_tpel_pixels_mc11_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:95
#define height
thirdpel DSP context
Definition: tpeldsp.h:42
static void avg_tpel_pixels_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:169
thirdpel DSP functions
static void avg_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:249
av_cold void ff_tpeldsp_init(TpelDSPContext *c)
Definition: tpeldsp.c:312
uint16_t width
Definition: gdv.c:47
static void put_tpel_pixels_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:34
tpel_mc_func avg_tpel_pixels_tab[11]
Definition: tpeldsp.h:54
static void avg_tpel_pixels_mc10_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:188
static void put_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:154
tpel_mc_func put_tpel_pixels_tab[11]
Thirdpel motion compensation with rounding (a + b + 1) >> 1.
Definition: tpeldsp.h:53
static void avg_tpel_pixels_mc11_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:233
static void put_tpel_pixels_mc20_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:67
static void avg_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:280
static void put_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height)
Definition: tpeldsp.c:139
static double c[64]