FFmpeg
Loading...
Searching...
No Matches
h2656_inter_template.c
Go to the documentation of this file.
1/*
2 * inter prediction template for HEVC/VVC
3 *
4 * Copyright (C) 2022 Nuo Mi
5 * Copyright (C) 2024 Wu Jianhua
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24#define CHROMA_EXTRA_BEFORE 1
25#define CHROMA_EXTRA 3
26#define LUMA_EXTRA_BEFORE 3
27#define LUMA_EXTRA 7
28
29static void FUNC(put_pixels)(int16_t *dst,
30 const uint8_t *_src, const ptrdiff_t _src_stride,
31 const int height, const int8_t *hf, const int8_t *vf, const int width)
32{
33 const pixel *src = (const pixel *)_src;
34 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
35
36 for (int y = 0; y < height; y++) {
37 for (int x = 0; x < width; x++)
38 dst[x] = src[x] << (14 - BIT_DEPTH);
39 src += src_stride;
41 }
42}
43
44static void FUNC(put_uni_pixels)(uint8_t *_dst, const ptrdiff_t _dst_stride,
45 const uint8_t *_src, const ptrdiff_t _src_stride, const int height,
46 const int8_t *hf, const int8_t *vf, const int width)
47{
48 const pixel *src = (const pixel *)_src;
49 pixel *dst = (pixel *)_dst;
50 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
51 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
52
53 for (int y = 0; y < height; y++) {
54 memcpy(dst, src, width * sizeof(pixel));
55 src += src_stride;
56 dst += dst_stride;
57 }
58}
59
60static void FUNC(put_uni_w_pixels)(uint8_t *_dst, const ptrdiff_t _dst_stride,
61 const uint8_t *_src, const ptrdiff_t _src_stride, const int height,
62 const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf,
63 const int width)
64{
65 const pixel *src = (const pixel *)_src;
66 pixel *dst = (pixel *)_dst;
67 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
68 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
69 const int shift = denom + 14 - BIT_DEPTH;
70#if BIT_DEPTH < 14
71 const int offset = 1 << (shift - 1);
72#else
73 const int offset = 0;
74#endif
75 const int ox = _ox * (1 << (BIT_DEPTH - 8));
76
77 for (int y = 0; y < height; y++) {
78 for (int x = 0; x < width; x++) {
79 const int v = (src[x] << (14 - BIT_DEPTH));
80 dst[x] = av_clip_pixel(((v * wx + offset) >> shift) + ox);
81 }
82 src += src_stride;
83 dst += dst_stride;
84 }
85}
86
87#define LUMA_FILTER(src, stride) \
88 (filter[0] * src[x - 3 * stride] + \
89 filter[1] * src[x - 2 * stride] + \
90 filter[2] * src[x - stride] + \
91 filter[3] * src[x ] + \
92 filter[4] * src[x + stride] + \
93 filter[5] * src[x + 2 * stride] + \
94 filter[6] * src[x + 3 * stride] + \
95 filter[7] * src[x + 4 * stride])
96
97static void FUNC(put_luma_h)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride,
98 const int height, const int8_t *hf, const int8_t *vf, const int width)
99{
100 const pixel *src = (const pixel*)_src;
101 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
102 const int8_t *filter = hf;
103
104 for (int y = 0; y < height; y++) {
105 for (int x = 0; x < width; x++)
106 dst[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
107 src += src_stride;
108 dst += MAX_PB_SIZE;
109 }
110}
111
112static void FUNC(put_luma_v)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride,
113 const int height, const int8_t *hf, const int8_t *vf, const int width)
114{
115 const pixel *src = (pixel*)_src;
116 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
117 const int8_t *filter = vf;
118
119 for (int y = 0; y < height; y++) {
120 for (int x = 0; x < width; x++)
121 dst[x] = LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8);
122 src += src_stride;
123 dst += MAX_PB_SIZE;
124 }
125}
126
127static void FUNC(put_luma_hv)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride,
128 const int height, const int8_t *hf, const int8_t *vf, const int width)
129{
130 int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE];
131 int16_t *tmp = tmp_array;
132 const pixel *src = (const pixel*)_src;
133 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
134 const int8_t *filter = hf;
135
136 src -= LUMA_EXTRA_BEFORE * src_stride;
137 for (int y = 0; y < height + LUMA_EXTRA; y++) {
138 for (int x = 0; x < width; x++)
139 tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
140 src += src_stride;
141 tmp += MAX_PB_SIZE;
142 }
143
144 tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE;
145 filter = vf;
146 for (int y = 0; y < height; y++) {
147 for (int x = 0; x < width; x++)
148 dst[x] = LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6;
149 tmp += MAX_PB_SIZE;
150 dst += MAX_PB_SIZE;
151 }
152}
153
154static void FUNC(put_uni_luma_h)(uint8_t *_dst, const ptrdiff_t _dst_stride,
155 const uint8_t *_src, const ptrdiff_t _src_stride,
156 const int height, const int8_t *hf, const int8_t *vf, const int width)
157{
158 const pixel *src = (const pixel*)_src;
159 pixel *dst = (pixel *)_dst;
160 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
161 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
162 const int8_t *filter = hf;
163 const int shift = 14 - BIT_DEPTH;
164#if BIT_DEPTH < 14
165 const int offset = 1 << (shift - 1);
166#else
167 const int offset = 0;
168#endif
169
170 for (int y = 0; y < height; y++) {
171 for (int x = 0; x < width; x++) {
172 const int val = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
173 dst[x] = av_clip_pixel((val + offset) >> shift);
174 }
175 src += src_stride;
176 dst += dst_stride;
177 }
178}
179
180static void FUNC(put_uni_luma_v)(uint8_t *_dst, const ptrdiff_t _dst_stride,
181 const uint8_t *_src, const ptrdiff_t _src_stride,
182 const int height, const int8_t *hf, const int8_t *vf, const int width)
183{
184
185 const pixel *src = (const pixel*)_src;
186 pixel *dst = (pixel *)_dst;
187 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
188 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
189 const int8_t *filter = vf;
190 const int shift = 14 - BIT_DEPTH;
191#if BIT_DEPTH < 14
192 const int offset = 1 << (shift - 1);
193#else
194 const int offset = 0;
195#endif
196
197 for (int y = 0; y < height; y++) {
198 for (int x = 0; x < width; x++) {
199 const int val = LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8);
200 dst[x] = av_clip_pixel((val + offset) >> shift);
201 }
202 src += src_stride;
203 dst += dst_stride;
204 }
205}
206
207static void FUNC(put_uni_luma_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride,
208 const uint8_t *_src, const ptrdiff_t _src_stride,
209 const int height, const int8_t *hf, const int8_t *vf, const int width)
210{
211 int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE];
212 int16_t *tmp = tmp_array;
213 const pixel *src = (const pixel*)_src;
214 pixel *dst = (pixel *)_dst;
215 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
216 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
217 const int8_t *filter = hf;
218 const int shift = 14 - BIT_DEPTH;
219#if BIT_DEPTH < 14
220 const int offset = 1 << (shift - 1);
221#else
222 const int offset = 0;
223#endif
224
225 src -= LUMA_EXTRA_BEFORE * src_stride;
226 for (int y = 0; y < height + LUMA_EXTRA; y++) {
227 for (int x = 0; x < width; x++)
228 tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
229 src += src_stride;
230 tmp += MAX_PB_SIZE;
231 }
232
233 tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE;
234 filter = vf;
235
236 for (int y = 0; y < height; y++) {
237 for (int x = 0; x < width; x++) {
238 const int val = LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6;
239 dst[x] = av_clip_pixel((val + offset) >> shift);
240 }
241 tmp += MAX_PB_SIZE;
242 dst += dst_stride;
243 }
244
245}
246
247static void FUNC(put_uni_luma_w_h)(uint8_t *_dst, const ptrdiff_t _dst_stride,
248 const uint8_t *_src, const ptrdiff_t _src_stride, int height,
249 const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf,
250 const int width)
251{
252 const pixel *src = (const pixel*)_src;
253 pixel *dst = (pixel *)_dst;
254 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
255 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
256 const int8_t *filter = hf;
257 const int ox = _ox * (1 << (BIT_DEPTH - 8));
258 const int shift = denom + 14 - BIT_DEPTH;
259#if BIT_DEPTH < 14
260 const int offset = 1 << (shift - 1);
261#else
262 const int offset = 0;
263#endif
264
265 for (int y = 0; y < height; y++) {
266 for (int x = 0; x < width; x++)
267 dst[x] = av_clip_pixel((((LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox);
268 src += src_stride;
269 dst += dst_stride;
270 }
271}
272
273static void FUNC(put_uni_luma_w_v)(uint8_t *_dst, const ptrdiff_t _dst_stride,
274 const uint8_t *_src, const ptrdiff_t _src_stride, const int height,
275 const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf,
276 const int width)
277{
278 const pixel *src = (const pixel*)_src;
279 pixel *dst = (pixel *)_dst;
280 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
281 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
282 const int8_t *filter = vf;
283 const int ox = _ox * (1 << (BIT_DEPTH - 8));
284 const int shift = denom + 14 - BIT_DEPTH;
285#if BIT_DEPTH < 14
286 const int offset = 1 << (shift - 1);
287#else
288 const int offset = 0;
289#endif
290
291 for (int y = 0; y < height; y++) {
292 for (int x = 0; x < width; x++)
293 dst[x] = av_clip_pixel((((LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox);
294 src += src_stride;
295 dst += dst_stride;
296 }
297}
298
299static void FUNC(put_uni_luma_w_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride,
300 const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom,
301 const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width)
302{
303 int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE];
304 int16_t *tmp = tmp_array;
305 const pixel *src = (const pixel*)_src;
306 pixel *dst = (pixel *)_dst;
307 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
308 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
309 const int8_t *filter = hf;
310 const int ox = _ox * (1 << (BIT_DEPTH - 8));
311 const int shift = denom + 14 - BIT_DEPTH;
312#if BIT_DEPTH < 14
313 const int offset = 1 << (shift - 1);
314#else
315 const int offset = 0;
316#endif
317
318 src -= LUMA_EXTRA_BEFORE * src_stride;
319 for (int y = 0; y < height + LUMA_EXTRA; y++) {
320 for (int x = 0; x < width; x++)
321 tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
322 src += src_stride;
323 tmp += MAX_PB_SIZE;
324 }
325
326 tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE;
327 filter = vf;
328 for (int y = 0; y < height; y++) {
329 for (int x = 0; x < width; x++)
330 dst[x] = av_clip_pixel((((LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox);
331 tmp += MAX_PB_SIZE;
332 dst += dst_stride;
333 }
334}
335
336#define CHROMA_FILTER(src, stride) \
337 (filter[0] * src[x - stride] + \
338 filter[1] * src[x] + \
339 filter[2] * src[x + stride] + \
340 filter[3] * src[x + 2 * stride])
341
342static void FUNC(put_chroma_h)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride,
343 const int height, const int8_t *hf, const int8_t *vf, const int width)
344{
345 const pixel *src = (const pixel *)_src;
346 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
347 const int8_t *filter = hf;
348
349 for (int y = 0; y < height; y++) {
350 for (int x = 0; x < width; x++)
351 dst[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
352 src += src_stride;
353 dst += MAX_PB_SIZE;
354 }
355}
356
357static void FUNC(put_chroma_v)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride,
358 const int height, const int8_t *hf, const int8_t *vf, const int width)
359{
360 const pixel *src = (const pixel *)_src;
361 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
362 const int8_t *filter = vf;
363
364 for (int y = 0; y < height; y++) {
365 for (int x = 0; x < width; x++)
366 dst[x] = CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8);
367 src += src_stride;
368 dst += MAX_PB_SIZE;
369 }
370}
371
372static void FUNC(put_chroma_hv)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride,
373 const int height, const int8_t *hf, const int8_t *vf, const int width)
374{
375 int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE];
376 int16_t *tmp = tmp_array;
377 const pixel *src = (const pixel *)_src;
378 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
379 const int8_t *filter = hf;
380
381 src -= CHROMA_EXTRA_BEFORE * src_stride;
382
383 for (int y = 0; y < height + CHROMA_EXTRA; y++) {
384 for (int x = 0; x < width; x++)
385 tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
386 src += src_stride;
387 tmp += MAX_PB_SIZE;
388 }
389
390 tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE;
391 filter = vf;
392
393 for (int y = 0; y < height; y++) {
394 for (int x = 0; x < width; x++)
395 dst[x] = CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6;
396 tmp += MAX_PB_SIZE;
397 dst += MAX_PB_SIZE;
398 }
399}
400
401static void FUNC(put_uni_chroma_h)(uint8_t *_dst, const ptrdiff_t _dst_stride,
402 const uint8_t *_src, const ptrdiff_t _src_stride,
403 const int height, const int8_t *hf, const int8_t *vf, const int width)
404{
405 const pixel *src = (const pixel *)_src;
406 pixel *dst = (pixel *)_dst;
407 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
408 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
409 const int8_t *filter = hf;
410 const int shift = 14 - BIT_DEPTH;
411#if BIT_DEPTH < 14
412 const int offset = 1 << (shift - 1);
413#else
414 const int offset = 0;
415#endif
416
417 for (int y = 0; y < height; y++) {
418 for (int x = 0; x < width; x++)
419 dst[x] = av_clip_pixel(((CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) + offset) >> shift);
420 src += src_stride;
421 dst += dst_stride;
422 }
423}
424
425static void FUNC(put_uni_chroma_v)(uint8_t *_dst, const ptrdiff_t _dst_stride,
426 const uint8_t *_src, const ptrdiff_t _src_stride,
427 const int height, const int8_t *hf, const int8_t *vf, const int width)
428{
429 const pixel *src = (const pixel *)_src;
430 pixel *dst = (pixel *)_dst;
431 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
432 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
433 const int8_t *filter = vf;
434 const int shift = 14 - BIT_DEPTH;
435#if BIT_DEPTH < 14
436 const int offset = 1 << (shift - 1);
437#else
438 const int offset = 0;
439#endif
440
441 for (int y = 0; y < height; y++) {
442 for (int x = 0; x < width; x++)
443 dst[x] = av_clip_pixel(((CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) + offset) >> shift);
444 src += src_stride;
445 dst += dst_stride;
446 }
447}
448
449static void FUNC(put_uni_chroma_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride,
450 const uint8_t *_src, const ptrdiff_t _src_stride,
451 const int height, const int8_t *hf, const int8_t *vf, const int width)
452{
453 int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE];
454 int16_t *tmp = tmp_array;
455 const pixel *src = (const pixel *)_src;
456 pixel *dst = (pixel *)_dst;
457 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
458 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
459 const int8_t *filter = hf;
460 const int shift = 14 - BIT_DEPTH;
461#if BIT_DEPTH < 14
462 const int offset = 1 << (shift - 1);
463#else
464 const int offset = 0;
465#endif
466
467 src -= CHROMA_EXTRA_BEFORE * src_stride;
468
469 for (int y = 0; y < height + CHROMA_EXTRA; y++) {
470 for (int x = 0; x < width; x++)
471 tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
472 src += src_stride;
473 tmp += MAX_PB_SIZE;
474 }
475
476 tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE;
477 filter = vf;
478
479 for (int y = 0; y < height; y++) {
480 for (int x = 0; x < width; x++)
482 tmp += MAX_PB_SIZE;
483 dst += dst_stride;
484 }
485}
486
487static void FUNC(put_uni_chroma_w_h)(uint8_t *_dst, ptrdiff_t _dst_stride,
488 const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox,
489 const int8_t *hf, const int8_t *vf, int width)
490{
491 const pixel *src = (const pixel *)_src;
492 pixel *dst = (pixel *)_dst;
493 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
494 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
495 const int8_t *filter = hf;
496 const int shift = denom + 14 - BIT_DEPTH;
497#if BIT_DEPTH < 14
498 const int offset = 1 << (shift - 1);
499#else
500 const int offset = 0;
501#endif
502
503 ox = ox * (1 << (BIT_DEPTH - 8));
504 for (int y = 0; y < height; y++) {
505 for (int x = 0; x < width; x++) {
506 dst[x] = av_clip_pixel((((CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox);
507 }
508 dst += dst_stride;
509 src += src_stride;
510 }
511}
512
513static void FUNC(put_uni_chroma_w_v)(uint8_t *_dst, const ptrdiff_t _dst_stride,
514 const uint8_t *_src, const ptrdiff_t _src_stride, const int height,
515 const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf,
516 const int width)
517{
518 const pixel *src = (const pixel *)_src;
519 pixel *dst = (pixel *)_dst;
520 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
521 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
522 const int8_t *filter = vf;
523 const int shift = denom + 14 - BIT_DEPTH;
524 const int ox = _ox * (1 << (BIT_DEPTH - 8));
525#if BIT_DEPTH < 14
526 int offset = 1 << (shift - 1);
527#else
528 int offset = 0;
529#endif
530
531 for (int y = 0; y < height; y++) {
532 for (int x = 0; x < width; x++) {
533 dst[x] = av_clip_pixel((((CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox);
534 }
535 dst += dst_stride;
536 src += src_stride;
537 }
538}
539
540static void FUNC(put_uni_chroma_w_hv)(uint8_t *_dst, ptrdiff_t _dst_stride,
541 const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox,
542 const int8_t *hf, const int8_t *vf, int width)
543{
544 int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE];
545 int16_t *tmp = tmp_array;
546 const pixel *src = (const pixel *)_src;
547 pixel *dst = (pixel *)_dst;
548 const ptrdiff_t src_stride = _src_stride / sizeof(pixel);
549 const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel);
550 const int8_t *filter = hf;
551 const int shift = denom + 14 - BIT_DEPTH;
552#if BIT_DEPTH < 14
553 const int offset = 1 << (shift - 1);
554#else
555 const int offset = 0;
556#endif
557
558 src -= CHROMA_EXTRA_BEFORE * src_stride;
559
560 for (int y = 0; y < height + CHROMA_EXTRA; y++) {
561 for (int x = 0; x < width; x++)
562 tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8);
563 src += src_stride;
564 tmp += MAX_PB_SIZE;
565 }
566
567 tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE;
568 filter = vf;
569
570 ox = ox * (1 << (BIT_DEPTH - 8));
571 for (int y = 0; y < height; y++) {
572 for (int x = 0; x < width; x++)
573 dst[x] = av_clip_pixel((((CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox);
574 tmp += MAX_PB_SIZE;
575 dst += dst_stride;
576 }
577}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t const int8_t * vf
Definition dsp.h:262
uint8_t * _dst
Definition dsp.h:56
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t * hf
Definition dsp.h:262
uint8_t ptrdiff_t const uint8_t * _src
Definition dsp.h:56
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define BIT_DEPTH
Definition dsp_init.c:121
static double val(void *priv, double ch)
Definition aeval.c:77
#define av_clip_pixel(a)
#define FUNC(a)
#define pixel
static void FUNC put_luma_v(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
#define CHROMA_FILTER(src, stride)
static void FUNC put_uni_luma_h(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_chroma_w_hv(uint8_t *_dst, ptrdiff_t _dst_stride, const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox, const int8_t *hf, const int8_t *vf, int width)
#define LUMA_EXTRA_BEFORE
static void FUNC put_uni_chroma_v(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_chroma_h(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_luma_w_hv(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_luma_w_v(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_luma_hv(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_luma_w_h(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, int height, const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_luma_hv(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_chroma_hv(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
#define LUMA_FILTER(src, stride)
static void FUNC put_uni_w_pixels(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_chroma_hv(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_chroma_h(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
#define LUMA_EXTRA
#define CHROMA_EXTRA_BEFORE
static void FUNC put_chroma_v(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_pixels(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_luma_v(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_chroma_w_v(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_luma_h(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
static void FUNC put_uni_chroma_w_h(uint8_t *_dst, ptrdiff_t _dst_stride, const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox, const int8_t *hf, const int8_t *vf, int width)
static void FUNC put_uni_pixels(uint8_t *_dst, const ptrdiff_t _dst_stride, const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int8_t *hf, const int8_t *vf, const int width)
#define CHROMA_EXTRA
#define MAX_PB_SIZE
Definition dsp.h:32
unsigned offset
Definition libaomenc.c:763
static int shift(int a, int b)
Definition bonk.c:261
static uint8_t tmp[40]
Definition aes_ctr.c:52
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
Definition h263dsp.c:29
#define src
Definition vp8dsp.c:248
#define height
Definition dsp.h:89
#define width
Definition dsp.h:89