Go to the documentation of this file.
35 const uint8_t *
src1,
const uint8_t *
src2,
36 int dstStride,
int src1Stride,
int h);
38 const uint8_t *
src1,
const uint8_t *
src2,
39 int dstStride,
int src1Stride,
int h);
41 const uint8_t *
src1,
const uint8_t *
src2,
42 int dstStride,
int src1Stride,
int h);
44 const uint8_t *
src1,
const uint8_t *
src2,
45 int dstStride,
int src1Stride,
int h);
47 const uint8_t *
src1,
const uint8_t *
src2,
48 int dstStride,
int src1Stride,
int h);
50 const uint8_t *
src1,
const uint8_t *
src2,
51 int dstStride,
int src1Stride,
int h);
53 int dstStride,
int srcStride,
int h);
55 int dstStride,
int srcStride,
int h);
58 int dstStride,
int srcStride,
61 int dstStride,
int srcStride,
int h);
63 int dstStride,
int srcStride,
int h);
66 int dstStride,
int srcStride,
69 int dstStride,
int srcStride);
71 int dstStride,
int srcStride);
74 int dstStride,
int srcStride);
76 int dstStride,
int srcStride);
78 int dstStride,
int srcStride);
81 int dstStride,
int srcStride);
85 #define QPEL_OP(OPNAME, RND, MMX) \
86 static void OPNAME ## qpel8_mc10_ ## MMX(uint8_t *dst, \
91 uint8_t *const half = (uint8_t *) temp; \
92 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, \
94 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src, half, \
98 static void OPNAME ## qpel8_mc20_ ## MMX(uint8_t *dst, \
102 ff_ ## OPNAME ## mpeg4_qpel8_h_lowpass_ ## MMX(dst, src, stride, \
106 static void OPNAME ## qpel8_mc30_ ## MMX(uint8_t *dst, \
107 const uint8_t *src, \
111 uint8_t *const half = (uint8_t *) temp; \
112 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, \
114 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src + 1, half, stride, \
118 static void OPNAME ## qpel8_mc01_ ## MMX(uint8_t *dst, \
119 const uint8_t *src, \
123 uint8_t *const half = (uint8_t *) temp; \
124 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, \
126 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src, half, \
127 stride, stride, 8); \
130 static void OPNAME ## qpel8_mc02_ ## MMX(uint8_t *dst, \
131 const uint8_t *src, \
134 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, src, \
138 static void OPNAME ## qpel8_mc03_ ## MMX(uint8_t *dst, \
139 const uint8_t *src, \
143 uint8_t *const half = (uint8_t *) temp; \
144 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, \
146 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src + stride, half, stride,\
150 static void OPNAME ## qpel8_mc11_ ## MMX(uint8_t *dst, \
151 const uint8_t *src, \
154 uint64_t half[8 + 9]; \
155 uint8_t *const halfH = (uint8_t *) half + 64; \
156 uint8_t *const halfHV = (uint8_t *) half; \
157 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
159 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, \
161 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
162 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, \
166 static void OPNAME ## qpel8_mc31_ ## MMX(uint8_t *dst, \
167 const uint8_t *src, \
170 uint64_t half[8 + 9]; \
171 uint8_t *const halfH = (uint8_t *) half + 64; \
172 uint8_t *const halfHV = (uint8_t *) half; \
173 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
175 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src + 1, halfH, 8, \
177 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
178 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, \
182 static void OPNAME ## qpel8_mc13_ ## MMX(uint8_t *dst, \
183 const uint8_t *src, \
186 uint64_t half[8 + 9]; \
187 uint8_t *const halfH = (uint8_t *) half + 64; \
188 uint8_t *const halfHV = (uint8_t *) half; \
189 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
191 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, \
193 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
194 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH + 8, halfHV, \
198 static void OPNAME ## qpel8_mc33_ ## MMX(uint8_t *dst, \
199 const uint8_t *src, \
202 uint64_t half[8 + 9]; \
203 uint8_t *const halfH = (uint8_t *) half + 64; \
204 uint8_t *const halfHV = (uint8_t *) half; \
205 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
207 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src + 1, halfH, 8, \
209 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
210 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH + 8, halfHV, \
214 static void OPNAME ## qpel8_mc21_ ## MMX(uint8_t *dst, \
215 const uint8_t *src, \
218 uint64_t half[8 + 9]; \
219 uint8_t *const halfH = (uint8_t *) half + 64; \
220 uint8_t *const halfHV = (uint8_t *) half; \
221 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
223 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
224 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, \
228 static void OPNAME ## qpel8_mc23_ ## MMX(uint8_t *dst, \
229 const uint8_t *src, \
232 uint64_t half[8 + 9]; \
233 uint8_t *const halfH = (uint8_t *) half + 64; \
234 uint8_t *const halfHV = (uint8_t *) half; \
235 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
237 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
238 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH + 8, halfHV, \
242 static void OPNAME ## qpel8_mc12_ ## MMX(uint8_t *dst, \
243 const uint8_t *src, \
246 uint64_t half[8 + 9]; \
247 uint8_t *const halfH = (uint8_t *) half; \
248 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
250 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, \
252 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, \
256 static void OPNAME ## qpel8_mc32_ ## MMX(uint8_t *dst, \
257 const uint8_t *src, \
260 uint64_t half[8 + 9]; \
261 uint8_t *const halfH = (uint8_t *) half; \
262 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
264 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src + 1, halfH, 8, \
266 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, \
270 static void OPNAME ## qpel8_mc22_ ## MMX(uint8_t *dst, \
271 const uint8_t *src, \
275 uint8_t *const halfH = (uint8_t *) half; \
276 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
278 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, \
282 static void OPNAME ## qpel16_mc10_ ## MMX(uint8_t *dst, \
283 const uint8_t *src, \
287 uint8_t *const half = (uint8_t *) temp; \
288 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(half, src, 16, \
290 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src, half, stride, \
294 static void OPNAME ## qpel16_mc20_ ## MMX(uint8_t *dst, \
295 const uint8_t *src, \
298 ff_ ## OPNAME ## mpeg4_qpel16_h_lowpass_ ## MMX(dst, src, \
299 stride, stride, 16);\
302 static void OPNAME ## qpel16_mc30_ ## MMX(uint8_t *dst, \
303 const uint8_t *src, \
307 uint8_t *const half = (uint8_t*) temp; \
308 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(half, src, 16, \
310 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src + 1, half, \
311 stride, stride, 16); \
314 static void OPNAME ## qpel16_mc01_ ## MMX(uint8_t *dst, \
315 const uint8_t *src, \
319 uint8_t *const half = (uint8_t *) temp; \
320 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(half, src, 16, \
322 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src, half, stride, \
326 static void OPNAME ## qpel16_mc02_ ## MMX(uint8_t *dst, \
327 const uint8_t *src, \
330 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, src, \
334 static void OPNAME ## qpel16_mc03_ ## MMX(uint8_t *dst, \
335 const uint8_t *src, \
339 uint8_t *const half = (uint8_t *) temp; \
340 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(half, src, 16, \
342 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src+stride, half, \
343 stride, stride, 16); \
346 static void OPNAME ## qpel16_mc11_ ## MMX(uint8_t *dst, \
347 const uint8_t *src, \
350 uint64_t half[16 * 2 + 17 * 2]; \
351 uint8_t *const halfH = (uint8_t *) half + 256; \
352 uint8_t *const halfHV = (uint8_t *) half; \
353 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
355 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, \
357 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
359 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, \
363 static void OPNAME ## qpel16_mc31_ ## MMX(uint8_t *dst, \
364 const uint8_t *src, \
367 uint64_t half[16 * 2 + 17 * 2]; \
368 uint8_t *const halfH = (uint8_t *) half + 256; \
369 uint8_t *const halfHV = (uint8_t *) half; \
370 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
372 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src + 1, halfH, 16, \
374 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
376 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, \
380 static void OPNAME ## qpel16_mc13_ ## MMX(uint8_t *dst, \
381 const uint8_t *src, \
384 uint64_t half[16 * 2 + 17 * 2]; \
385 uint8_t *const halfH = (uint8_t *) half + 256; \
386 uint8_t *const halfHV = (uint8_t *) half; \
387 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
389 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, \
391 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
393 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH + 16, halfHV, \
397 static void OPNAME ## qpel16_mc33_ ## MMX(uint8_t *dst, \
398 const uint8_t *src, \
401 uint64_t half[16 * 2 + 17 * 2]; \
402 uint8_t *const halfH = (uint8_t *) half + 256; \
403 uint8_t *const halfHV = (uint8_t *) half; \
404 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
406 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src + 1, halfH, 16, \
408 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
410 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH + 16, halfHV, \
414 static void OPNAME ## qpel16_mc21_ ## MMX(uint8_t *dst, \
415 const uint8_t *src, \
418 uint64_t half[16 * 2 + 17 * 2]; \
419 uint8_t *const halfH = (uint8_t *) half + 256; \
420 uint8_t *const halfHV = (uint8_t *) half; \
421 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
423 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
425 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, \
429 static void OPNAME ## qpel16_mc23_ ## MMX(uint8_t *dst, \
430 const uint8_t *src, \
433 uint64_t half[16 * 2 + 17 * 2]; \
434 uint8_t *const halfH = (uint8_t *) half + 256; \
435 uint8_t *const halfHV = (uint8_t *) half; \
436 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
438 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
440 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH + 16, halfHV, \
444 static void OPNAME ## qpel16_mc12_ ## MMX(uint8_t *dst, \
445 const uint8_t *src, \
448 uint64_t half[17 * 2]; \
449 uint8_t *const halfH = (uint8_t *) half; \
450 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
452 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, \
454 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, \
458 static void OPNAME ## qpel16_mc32_ ## MMX(uint8_t *dst, \
459 const uint8_t *src, \
462 uint64_t half[17 * 2]; \
463 uint8_t *const halfH = (uint8_t *) half; \
464 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
466 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src + 1, halfH, 16, \
468 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, \
472 static void OPNAME ## qpel16_mc22_ ## MMX(uint8_t *dst, \
473 const uint8_t *src, \
476 uint64_t half[17 * 2]; \
477 uint8_t *const halfH = (uint8_t *) half; \
478 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
480 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, \
484 QPEL_OP(put_,
_, mmxext)
485 QPEL_OP(avg_,
_, mmxext)
486 QPEL_OP(put_no_rnd_, _no_rnd_, mmxext)
488 #define MC00(OPNAME, SIZE, EXT) \
489 static void OPNAME ## _qpel ## SIZE ## _mc00_ ## EXT(uint8_t *dst, \
493 ff_ ## OPNAME ## _pixels ## SIZE ##_ ## EXT(dst, src, stride, SIZE);\
503 #define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \
505 c->PFX ## _pixels_tab[IDX][ 1] = PREFIX ## PFX ## SIZE ## _mc10_ ## CPU; \
506 c->PFX ## _pixels_tab[IDX][ 2] = PREFIX ## PFX ## SIZE ## _mc20_ ## CPU; \
507 c->PFX ## _pixels_tab[IDX][ 3] = PREFIX ## PFX ## SIZE ## _mc30_ ## CPU; \
508 c->PFX ## _pixels_tab[IDX][ 4] = PREFIX ## PFX ## SIZE ## _mc01_ ## CPU; \
509 c->PFX ## _pixels_tab[IDX][ 5] = PREFIX ## PFX ## SIZE ## _mc11_ ## CPU; \
510 c->PFX ## _pixels_tab[IDX][ 6] = PREFIX ## PFX ## SIZE ## _mc21_ ## CPU; \
511 c->PFX ## _pixels_tab[IDX][ 7] = PREFIX ## PFX ## SIZE ## _mc31_ ## CPU; \
512 c->PFX ## _pixels_tab[IDX][ 8] = PREFIX ## PFX ## SIZE ## _mc02_ ## CPU; \
513 c->PFX ## _pixels_tab[IDX][ 9] = PREFIX ## PFX ## SIZE ## _mc12_ ## CPU; \
514 c->PFX ## _pixels_tab[IDX][10] = PREFIX ## PFX ## SIZE ## _mc22_ ## CPU; \
515 c->PFX ## _pixels_tab[IDX][11] = PREFIX ## PFX ## SIZE ## _mc32_ ## CPU; \
516 c->PFX ## _pixels_tab[IDX][12] = PREFIX ## PFX ## SIZE ## _mc03_ ## CPU; \
517 c->PFX ## _pixels_tab[IDX][13] = PREFIX ## PFX ## SIZE ## _mc13_ ## CPU; \
518 c->PFX ## _pixels_tab[IDX][14] = PREFIX ## PFX ## SIZE ## _mc23_ ## CPU; \
519 c->PFX ## _pixels_tab[IDX][15] = PREFIX ## PFX ## SIZE ## _mc33_ ## CPU; \
527 #if HAVE_MMXEXT_EXTERNAL
529 c->avg_qpel_pixels_tab[1][0] = avg_qpel8_mc00_mmxext;
533 c->put_no_rnd_qpel_pixels_tab[1][0] =
534 c->put_qpel_pixels_tab[1][0] = put_qpel8_mc00_mmx;
540 #if HAVE_SSE2_EXTERNAL
542 c->put_no_rnd_qpel_pixels_tab[0][0] =
543 c->put_qpel_pixels_tab[0][0] = put_qpel16_mc00_sse2;
544 c->avg_qpel_pixels_tab[0][0] = avg_qpel16_mc00_sse2;
void ff_avg_mpeg4_qpel16_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h)
void ff_put_mpeg4_qpel8_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
void ff_put_no_rnd_mpeg4_qpel8_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h)
static atomic_int cpu_flags
void ff_avg_mpeg4_qpel16_v_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride)
void ff_put_pixels16_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dstStride, int src1Stride, int h)
void ff_put_no_rnd_mpeg4_qpel16_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h)
void ff_put_mpeg4_qpel16_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h)
void ff_put_no_rnd_mpeg4_qpel16_v_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride)
#define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
void ff_avg_pixels8_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dstStride, int src1Stride, int h)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
av_cold void ff_qpeldsp_init_x86(QpelDSPContext *c)
void ff_avg_mpeg4_qpel8_v_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride)
#define EXTERNAL_SSE2(flags)
void ff_put_pixels8_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dstStride, int src1Stride, int h)
void ff_put_no_rnd_mpeg4_qpel8_v_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride)
void ff_put_mpeg4_qpel8_v_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride)
void ff_put_no_rnd_pixels8_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dstStride, int src1Stride, int h)
void ff_put_mpeg4_qpel16_v_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride)
void ff_avg_pixels16_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dstStride, int src1Stride, int h)
void ff_put_no_rnd_pixels16_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dstStride, int src1Stride, int h)
void ff_avg_mpeg4_qpel8_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h)
#define X86_MMXEXT(flags)