FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
arm
dsputil_init_neon.c
Go to the documentation of this file.
1
/*
2
* ARM NEON optimised DSP functions
3
* Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include <stdint.h>
23
24
#include "
libavutil/attributes.h
"
25
#include "
libavcodec/avcodec.h
"
26
#include "
dsputil_arm.h
"
27
28
void
ff_simple_idct_neon
(int16_t *
data
);
29
void
ff_simple_idct_put_neon
(
uint8_t
*dest,
int
line_size, int16_t *
data
);
30
void
ff_simple_idct_add_neon
(
uint8_t
*dest,
int
line_size, int16_t *
data
);
31
32
void
ff_clear_block_neon
(int16_t *
block
);
33
void
ff_clear_blocks_neon
(int16_t *blocks);
34
35
void
ff_put_pixels16_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
36
void
ff_put_pixels16_x2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
37
void
ff_put_pixels16_y2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
38
void
ff_put_pixels16_xy2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
39
void
ff_put_pixels8_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
40
void
ff_put_pixels8_x2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
41
void
ff_put_pixels8_y2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
42
void
ff_put_pixels8_xy2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
43
void
ff_put_pixels16_x2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
44
void
ff_put_pixels16_y2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
45
void
ff_put_pixels16_xy2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
46
void
ff_put_pixels8_x2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
47
void
ff_put_pixels8_y2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
48
void
ff_put_pixels8_xy2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
49
50
void
ff_avg_pixels16_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
51
void
ff_avg_pixels16_x2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
52
void
ff_avg_pixels16_y2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
53
void
ff_avg_pixels16_xy2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
54
void
ff_avg_pixels8_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
55
void
ff_avg_pixels8_x2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
56
void
ff_avg_pixels8_y2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
57
void
ff_avg_pixels8_xy2_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
58
void
ff_avg_pixels16_x2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
59
void
ff_avg_pixels16_y2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
60
void
ff_avg_pixels16_xy2_no_rnd_neon
(
uint8_t
*,
const
uint8_t
*, ptrdiff_t,
int
);
61
62
void
ff_add_pixels_clamped_neon
(
const
int16_t *,
uint8_t
*,
int
);
63
void
ff_put_pixels_clamped_neon
(
const
int16_t *,
uint8_t
*,
int
);
64
void
ff_put_signed_pixels_clamped_neon
(
const
int16_t *,
uint8_t
*,
int
);
65
66
void
ff_vector_clipf_neon
(
float
*
dst
,
const
float
*src,
float
min
,
float
max,
67
int
len
);
68
void
ff_vector_clip_int32_neon
(
int32_t
*
dst
,
const
int32_t
*src,
int32_t
min
,
69
int32_t
max,
unsigned
int
len
);
70
71
int32_t
ff_scalarproduct_int16_neon
(
const
int16_t *v1,
const
int16_t *v2,
int
len
);
72
int32_t
ff_scalarproduct_and_madd_int16_neon
(int16_t *v1,
const
int16_t *v2,
73
const
int16_t *v3,
int
len
,
int
mul);
74
75
void
ff_apply_window_int16_neon
(int16_t *
dst
,
const
int16_t *src,
76
const
int16_t *window,
unsigned
n);
77
78
av_cold
void
ff_dsputil_init_neon
(
DSPContext
*
c
,
AVCodecContext
*avctx)
79
{
80
const
int
high_bit_depth = avctx->
bits_per_raw_sample
> 8;
81
82
if
(!avctx->
lowres
&& avctx->
bits_per_raw_sample
<= 8) {
83
if
(avctx->
idct_algo
==
FF_IDCT_AUTO
||
84
avctx->
idct_algo
==
FF_IDCT_SIMPLENEON
) {
85
c->
idct_put
=
ff_simple_idct_put_neon
;
86
c->
idct_add
=
ff_simple_idct_add_neon
;
87
c->
idct
=
ff_simple_idct_neon
;
88
c->
idct_permutation_type
=
FF_PARTTRANS_IDCT_PERM
;
89
}
90
}
91
92
if
(!high_bit_depth) {
93
c->
clear_block
=
ff_clear_block_neon
;
94
c->
clear_blocks
=
ff_clear_blocks_neon
;
95
96
c->
put_pixels_tab
[0][0] =
ff_put_pixels16_neon
;
97
c->
put_pixels_tab
[0][1] =
ff_put_pixels16_x2_neon
;
98
c->
put_pixels_tab
[0][2] =
ff_put_pixels16_y2_neon
;
99
c->
put_pixels_tab
[0][3] =
ff_put_pixels16_xy2_neon
;
100
c->
put_pixels_tab
[1][0] =
ff_put_pixels8_neon
;
101
c->
put_pixels_tab
[1][1] =
ff_put_pixels8_x2_neon
;
102
c->
put_pixels_tab
[1][2] =
ff_put_pixels8_y2_neon
;
103
c->
put_pixels_tab
[1][3] =
ff_put_pixels8_xy2_neon
;
104
105
c->
put_no_rnd_pixels_tab
[0][0] =
ff_put_pixels16_neon
;
106
c->
put_no_rnd_pixels_tab
[0][1] =
ff_put_pixels16_x2_no_rnd_neon
;
107
c->
put_no_rnd_pixels_tab
[0][2] =
ff_put_pixels16_y2_no_rnd_neon
;
108
c->
put_no_rnd_pixels_tab
[0][3] =
ff_put_pixels16_xy2_no_rnd_neon
;
109
c->
put_no_rnd_pixels_tab
[1][0] =
ff_put_pixels8_neon
;
110
c->
put_no_rnd_pixels_tab
[1][1] =
ff_put_pixels8_x2_no_rnd_neon
;
111
c->
put_no_rnd_pixels_tab
[1][2] =
ff_put_pixels8_y2_no_rnd_neon
;
112
c->
put_no_rnd_pixels_tab
[1][3] =
ff_put_pixels8_xy2_no_rnd_neon
;
113
114
c->
avg_pixels_tab
[0][0] =
ff_avg_pixels16_neon
;
115
c->
avg_pixels_tab
[0][1] =
ff_avg_pixels16_x2_neon
;
116
c->
avg_pixels_tab
[0][2] =
ff_avg_pixels16_y2_neon
;
117
c->
avg_pixels_tab
[0][3] =
ff_avg_pixels16_xy2_neon
;
118
c->
avg_pixels_tab
[1][0] =
ff_avg_pixels8_neon
;
119
c->
avg_pixels_tab
[1][1] =
ff_avg_pixels8_x2_neon
;
120
c->
avg_pixels_tab
[1][2] =
ff_avg_pixels8_y2_neon
;
121
c->
avg_pixels_tab
[1][3] =
ff_avg_pixels8_xy2_neon
;
122
123
c->
avg_no_rnd_pixels_tab
[0] =
ff_avg_pixels16_neon
;
124
c->
avg_no_rnd_pixels_tab
[1] =
ff_avg_pixels16_x2_no_rnd_neon
;
125
c->
avg_no_rnd_pixels_tab
[2] =
ff_avg_pixels16_y2_no_rnd_neon
;
126
c->
avg_no_rnd_pixels_tab
[3] =
ff_avg_pixels16_xy2_no_rnd_neon
;
127
}
128
129
c->
add_pixels_clamped
=
ff_add_pixels_clamped_neon
;
130
c->
put_pixels_clamped
=
ff_put_pixels_clamped_neon
;
131
c->
put_signed_pixels_clamped
=
ff_put_signed_pixels_clamped_neon
;
132
133
c->
vector_clipf
=
ff_vector_clipf_neon
;
134
c->
vector_clip_int32
=
ff_vector_clip_int32_neon
;
135
136
c->
scalarproduct_int16
=
ff_scalarproduct_int16_neon
;
137
c->
scalarproduct_and_madd_int16
=
ff_scalarproduct_and_madd_int16_neon
;
138
139
c->
apply_window_int16
=
ff_apply_window_int16_neon
;
140
}
Generated on Sat May 25 2013 04:01:01 for FFmpeg by
1.8.2