FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libswresample
arm
audio_convert_init.c
Go to the documentation of this file.
1
/*
2
* This file is part of libswresample.
3
*
4
* libswresample 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
* libswresample 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 libswresample; 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"
22
#include "
libavutil/attributes.h
"
23
#include "
libavutil/cpu.h
"
24
#include "
libavutil/arm/cpu.h
"
25
#include "
libavutil/samplefmt.h
"
26
#include "
libswresample/swresample_internal.h
"
27
#include "
libswresample/audioconvert.h
"
28
29
void
swri_oldapi_conv_flt_to_s16_neon
(int16_t *dst,
const
float
*
src
,
int
len
);
30
void
swri_oldapi_conv_fltp_to_s16_2ch_neon
(int16_t *dst,
float
*
const
*
src
,
int
len
,
int
channels);
31
void
swri_oldapi_conv_fltp_to_s16_nch_neon
(int16_t *dst,
float
*
const
*
src
,
int
len
,
int
channels);
32
33
static
void
conv_flt_to_s16_neon
(
uint8_t
**dst,
const
uint8_t
**
src
,
int
len
){
34
swri_oldapi_conv_flt_to_s16_neon
((int16_t*)*dst, (
const
float
*)*src, len);
35
}
36
37
static
void
conv_fltp_to_s16_2ch_neon
(
uint8_t
**dst,
const
uint8_t
**
src
,
int
len
){
38
swri_oldapi_conv_fltp_to_s16_2ch_neon
((int16_t*)*dst, (
float
*
const
*)src, len, 2);
39
}
40
41
static
void
conv_fltp_to_s16_nch_neon
(
uint8_t
**dst,
const
uint8_t
**
src
,
int
len
){
42
int
channels;
43
for
(channels=3; channels<
SWR_CH_MAX
&& src[channels]; channels++)
44
;
45
swri_oldapi_conv_fltp_to_s16_nch_neon
((int16_t*)*dst, (
float
*
const
*)src, len, channels);
46
}
47
48
av_cold
void
swri_audio_convert_init_arm
(
struct
AudioConvert
*ac,
49
enum
AVSampleFormat
out_fmt,
50
enum
AVSampleFormat
in_fmt,
51
int
channels)
52
{
53
int
cpu_flags =
av_get_cpu_flags
();
54
55
ac->
simd_f
= NULL;
56
57
if
(
have_neon
(cpu_flags)) {
58
if
(out_fmt ==
AV_SAMPLE_FMT_S16
&& in_fmt ==
AV_SAMPLE_FMT_FLT
|| out_fmt ==
AV_SAMPLE_FMT_S16P
&& in_fmt ==
AV_SAMPLE_FMT_FLTP
)
59
ac->
simd_f
=
conv_flt_to_s16_neon
;
60
if
(out_fmt ==
AV_SAMPLE_FMT_S16
&& in_fmt ==
AV_SAMPLE_FMT_FLTP
&& channels == 2)
61
ac->
simd_f
=
conv_fltp_to_s16_2ch_neon
;
62
if
(out_fmt ==
AV_SAMPLE_FMT_S16
&& in_fmt ==
AV_SAMPLE_FMT_FLTP
&& channels > 2)
63
ac->
simd_f
=
conv_fltp_to_s16_nch_neon
;
64
if
(ac->
simd_f
)
65
ac->
in_simd_align_mask
= ac->
out_simd_align_mask
= 15;
66
}
67
}
Generated on Sun Sep 14 2014 18:56:16 for FFmpeg by
1.8.2