FFmpeg
Loading...
Searching...
No Matches
me_cmp_init_aarch64.c
Go to the documentation of this file.
1/*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19#include <stdint.h>
20
21#include "config.h"
25
26int ff_pix_abs16_neon(MPVEncContext *s, const uint8_t *blk1, const uint8_t *blk2,
27 ptrdiff_t stride, int h);
28int ff_pix_abs16_xy2_neon(MPVEncContext *s, const uint8_t *blk1, const uint8_t *blk2,
29 ptrdiff_t stride, int h);
30int ff_pix_abs16_x2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
31 ptrdiff_t stride, int h);
32int ff_pix_abs16_y2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
33 ptrdiff_t stride, int h);
34int ff_pix_abs8_neon(MPVEncContext *s, const uint8_t *blk1, const uint8_t *blk2,
35 ptrdiff_t stride, int h);
36
37int sse16_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
38 ptrdiff_t stride, int h);
39int sse8_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
40 ptrdiff_t stride, int h);
41int sse4_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
42 ptrdiff_t stride, int h);
43
44int vsad16_neon(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
45 ptrdiff_t stride, int h);
46int vsad_intra16_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy,
47 ptrdiff_t stride, int h) ;
48int vsad_intra8_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy,
49 ptrdiff_t stride, int h) ;
50int vsse16_neon(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
51 ptrdiff_t stride, int h);
52int vsse_intra16_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy,
53 ptrdiff_t stride, int h);
54int nsse16_neon(int multiplier, const uint8_t *s, const uint8_t *s2,
55 ptrdiff_t stride, int h);
56int nsse16_neon_wrapper(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
57 ptrdiff_t stride, int h);
58int pix_median_abs16_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
59 ptrdiff_t stride, int h);
60int pix_median_abs8_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
61 ptrdiff_t stride, int h);
62int ff_pix_abs8_x2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
63 ptrdiff_t stride, int h);
64int ff_pix_abs8_y2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
65 ptrdiff_t stride, int h);
66int ff_pix_abs8_xy2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
67 ptrdiff_t stride, int h);
68
69int nsse8_neon(int multiplier, const uint8_t *s, const uint8_t *s2,
70 ptrdiff_t stride, int h);
71int nsse8_neon_wrapper(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
72 ptrdiff_t stride, int h);
73
74int vsse8_neon(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
75 ptrdiff_t stride, int h);
76
77int vsse_intra8_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy,
78 ptrdiff_t stride, int h);
79
80#if HAVE_DOTPROD
81int sse16_neon_dotprod(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2,
82 ptrdiff_t stride, int h);
83int vsse_intra16_neon_dotprod(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
84 ptrdiff_t stride, int h);
85#endif
86
88{
90
91 if (have_neon(cpu_flags)) {
92 c->pix_abs[0][0] = ff_pix_abs16_neon;
93 c->pix_abs[0][1] = ff_pix_abs16_x2_neon;
94 c->pix_abs[0][2] = ff_pix_abs16_y2_neon;
95 c->pix_abs[0][3] = ff_pix_abs16_xy2_neon;
96 c->pix_abs[1][0] = ff_pix_abs8_neon;
97 c->pix_abs[1][1] = ff_pix_abs8_x2_neon;
98 c->pix_abs[1][2] = ff_pix_abs8_y2_neon;
99 c->pix_abs[1][3] = ff_pix_abs8_xy2_neon;
100
101 c->sad[0] = ff_pix_abs16_neon;
102 c->sad[1] = ff_pix_abs8_neon;
103 c->sse[0] = sse16_neon;
104 c->sse[1] = sse8_neon;
105 c->sse[2] = sse4_neon;
106
107 c->vsad[0] = vsad16_neon;
108 c->vsad[4] = vsad_intra16_neon;
109 c->vsad[5] = vsad_intra8_neon;
110
111 c->vsse[0] = vsse16_neon;
112 c->vsse[1] = vsse8_neon;
113
114 c->vsse[4] = vsse_intra16_neon;
115 c->vsse[5] = vsse_intra8_neon;
116
117 c->nsse[0] = nsse16_neon_wrapper;
118 c->nsse[1] = nsse8_neon_wrapper;
119
120 c->median_sad[0] = pix_median_abs16_neon;
121 c->median_sad[1] = pix_median_abs8_neon;
122 }
123
124#if HAVE_DOTPROD
125 if (have_dotprod(cpu_flags)) {
126 c->sse[0] = sse16_neon_dotprod;
127 c->vsse[4] = vsse_intra16_neon_dotprod;
128 }
129#endif
130}
131
132int nsse16_neon_wrapper(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
133 ptrdiff_t stride, int h)
134{
135 if (c)
136 return nsse16_neon(c->c.avctx->nsse_weight, s1, s2, stride, h);
137 else
138 return nsse16_neon(8, s1, s2, stride, h);
139}
140
141int nsse8_neon_wrapper(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2,
142 ptrdiff_t stride, int h)
143{
144 if (c)
145 return nsse8_neon(c->c.avctx->nsse_weight, s1, s2, stride, h);
146 else
147 return nsse8_neon(8, s1, s2, stride, h);
148}
#define s(width, name)
Definition cbs_vp9.c:198
static int dummy
Definition ffplay.c:3754
#define have_dotprod(flags)
Definition cpu.h:31
#define have_neon(flags)
Definition cpu.h:26
Macro definitions for various function/variable attributes.
#define av_cold
Definition attributes.h:117
static atomic_int cpu_flags
Definition cpu.c:56
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition cpu.c:109
int sse16_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int pix_median_abs8_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int vsad_intra8_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy, ptrdiff_t stride, int h)
int ff_pix_abs16_neon(MPVEncContext *s, const uint8_t *blk1, const uint8_t *blk2, ptrdiff_t stride, int h)
int nsse8_neon(int multiplier, const uint8_t *s, const uint8_t *s2, ptrdiff_t stride, int h)
int vsad_intra16_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy, ptrdiff_t stride, int h)
int vsad16_neon(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
int vsse16_neon(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
int ff_pix_abs8_y2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int pix_median_abs16_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int sse8_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_pix_abs8_xy2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_pix_abs16_y2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int vsse8_neon(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
int nsse16_neon_wrapper(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
int nsse8_neon_wrapper(MPVEncContext *c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
int ff_pix_abs16_xy2_neon(MPVEncContext *s, const uint8_t *blk1, const uint8_t *blk2, ptrdiff_t stride, int h)
int ff_pix_abs16_x2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int sse4_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
av_cold void ff_me_cmp_init_aarch64(MECmpContext *c, AVCodecContext *avctx)
int ff_pix_abs8_neon(MPVEncContext *s, const uint8_t *blk1, const uint8_t *blk2, ptrdiff_t stride, int h)
int nsse16_neon(int multiplier, const uint8_t *s, const uint8_t *s2, ptrdiff_t stride, int h)
int vsse_intra16_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy, ptrdiff_t stride, int h)
int vsse_intra8_neon(MPVEncContext *c, const uint8_t *s, const uint8_t *dummy, ptrdiff_t stride, int h)
int ff_pix_abs8_x2_neon(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
mpegvideo header.
main external API structure.
Definition avcodec.h:443
#define stride
static double c[64]