FFmpeg
1.2.4
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libswresample
swresample_internal.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)
3
*
4
* This file is part of libswresample
5
*
6
* libswresample is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* libswresample is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with libswresample; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef SWR_INTERNAL_H
22
#define SWR_INTERNAL_H
23
24
#include "
swresample.h
"
25
#include "libavutil/channel_layout.h"
26
#include "
config.h
"
27
28
#define SQRT3_2 1.22474487139158904909
/* sqrt(3/2) */
29
30
#define NS_TAPS 20
31
32
#if ARCH_X86_64
33
typedef
int64_t
integer
;
34
#else
35
typedef
int
integer
;
36
#endif
37
38
typedef
void
(
mix_1_1_func_type
)(
void
*
out
,
const
void
*
in
,
void
*coeffp,
integer
index
,
integer
len
);
39
typedef
void
(
mix_2_1_func_type
)(
void
*
out
,
const
void
*in1,
const
void
*in2,
void
*coeffp,
integer
index1,
integer
index2,
integer
len
);
40
41
typedef
void
(
mix_any_func_type
)(
uint8_t
**
out
,
const
uint8_t
**in1,
void
*coeffp,
integer
len
);
42
43
typedef
struct
AudioData
{
44
uint8_t
*
ch
[
SWR_CH_MAX
];
45
uint8_t
*
data
;
46
int
ch_count
;
47
int
bps
;
48
int
count
;
49
int
planar
;
50
enum
AVSampleFormat
fmt
;
51
}
AudioData
;
52
53
struct
DitherContext
{
54
enum
SwrDitherType
method
;
55
int
noise_pos
;
56
float
scale
;
57
float
noise_scale
;
58
int
ns_taps
;
59
float
ns_scale
;
60
float
ns_scale_1
;
61
int
ns_pos
;
62
float
ns_coeffs
[
NS_TAPS
];
63
float
ns_errors
[
SWR_CH_MAX
][2*
NS_TAPS
];
64
AudioData
noise
;
65
AudioData
temp
;
66
int
output_sample_bits
;
67
};
68
69
struct
SwrContext
{
70
const
AVClass
*
av_class
;
71
int
log_level_offset
;
72
void
*
log_ctx
;
73
enum
AVSampleFormat
in_sample_fmt
;
74
enum
AVSampleFormat
int_sample_fmt
;
75
enum
AVSampleFormat
out_sample_fmt
;
76
int64_t
in_ch_layout
;
77
int64_t
out_ch_layout
;
78
int
in_sample_rate
;
79
int
out_sample_rate
;
80
int
flags
;
81
float
slev
;
82
float
clev
;
83
float
lfe_mix_level
;
84
float
rematrix_volume
;
85
enum
AVMatrixEncoding
matrix_encoding
;
86
const
int
*
channel_map
;
87
int
used_ch_count
;
88
enum
SwrEngine
engine
;
89
90
struct
DitherContext
dither
;
91
92
int
filter_size
;
93
int
phase_shift
;
94
int
linear_interp
;
95
double
cutoff
;
96
enum
SwrFilterType
filter_type
;
97
int
kaiser_beta
;
98
double
precision
;
99
int
cheby
;
101
float
min_compensation
;
102
float
min_hard_compensation
;
103
float
soft_compensation_duration
;
104
float
max_soft_compensation
;
105
float
async
;
106
int64_t
firstpts_in_samples
;
107
108
int
resample_first
;
109
int
rematrix
;
110
int
rematrix_custom
;
111
112
AudioData
in
;
113
AudioData
postin
;
114
AudioData
midbuf
;
115
AudioData
preout
;
116
AudioData
out
;
117
AudioData
in_buffer
;
118
AudioData
silence
;
119
AudioData
drop_temp
;
120
int
in_buffer_index
;
121
int
in_buffer_count
;
122
int
resample_in_constraint
;
123
int
flushed
;
124
int64_t
outpts
;
125
int64_t
firstpts
;
126
int
drop_output
;
127
128
struct
AudioConvert
*
in_convert
;
129
struct
AudioConvert
*
out_convert
;
130
struct
AudioConvert
*
full_convert
;
131
struct
ResampleContext
*
resample
;
132
struct
Resampler
const *
resampler
;
133
134
float
matrix
[
SWR_CH_MAX
][
SWR_CH_MAX
];
135
uint8_t
*
native_matrix
;
136
uint8_t
*
native_one
;
137
uint8_t
*
native_simd_matrix
;
138
int32_t
matrix32
[
SWR_CH_MAX
][
SWR_CH_MAX
];
139
uint8_t
matrix_ch
[
SWR_CH_MAX
][
SWR_CH_MAX
+1];
140
mix_1_1_func_type
*
mix_1_1_f
;
141
mix_1_1_func_type
*
mix_1_1_simd
;
142
143
mix_2_1_func_type
*
mix_2_1_f
;
144
mix_2_1_func_type
*
mix_2_1_simd
;
145
146
mix_any_func_type
*
mix_any_f
;
147
148
/* TODO: callbacks for ASM optimizations */
149
};
150
151
typedef
struct
ResampleContext
* (* resample_init_func)(
struct
ResampleContext
*
c
,
int
out_rate,
int
in_rate,
int
filter_size,
int
phase_shift
,
int
linear
,
152
double
cutoff,
enum
AVSampleFormat
format
,
enum
SwrFilterType
filter_type
,
int
kaiser_beta
,
double
precision,
int
cheby);
153
typedef
void
(*
resample_free_func
)(
struct
ResampleContext
**
c
);
154
typedef
int (*
multiple_resample_func
)(
struct
ResampleContext
*
c
,
AudioData
*
dst
,
int
dst_size,
AudioData
*src,
int
src_size,
int
*consumed);
155
typedef
int (*
resample_flush_func
)(
struct
SwrContext
*
c
);
156
typedef
int (*
set_compensation_func
)(
struct
ResampleContext
*
c
,
int
sample_delta,
int
compensation_distance
);
157
typedef
int64_t (*
get_delay_func
)(
struct
SwrContext
*s, int64_t base);
158
159
struct
Resampler
{
160
resample_init_func
init
;
161
resample_free_func
free
;
162
multiple_resample_func
multiple_resample
;
163
resample_flush_func
flush
;
164
set_compensation_func
set_compensation
;
165
get_delay_func
get_delay
;
166
};
167
168
extern
struct
Resampler
const
swri_resampler
;
169
170
int
swri_realloc_audio
(
AudioData
*
a
,
int
count);
171
int
swri_resample_int16
(
struct
ResampleContext
*c, int16_t *
dst
,
const
int16_t *src,
int
*consumed,
int
src_size,
int
dst_size,
int
update_ctx);
172
int
swri_resample_int32
(
struct
ResampleContext
*c,
int32_t
*
dst
,
const
int32_t
*src,
int
*consumed,
int
src_size,
int
dst_size,
int
update_ctx);
173
int
swri_resample_float
(
struct
ResampleContext
*c,
float
*
dst
,
const
float
*src,
int
*consumed,
int
src_size,
int
dst_size,
int
update_ctx);
174
int
swri_resample_double
(
struct
ResampleContext
*c,
double
*
dst
,
const
double
*src,
int
*consumed,
int
src_size,
int
dst_size,
int
update_ctx);
175
176
void
swri_noise_shaping_int16
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count);
177
void
swri_noise_shaping_int32
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count);
178
void
swri_noise_shaping_float
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count);
179
void
swri_noise_shaping_double
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count);
180
181
int
swri_rematrix_init
(
SwrContext
*s);
182
void
swri_rematrix_free
(
SwrContext
*s);
183
int
swri_rematrix
(
SwrContext
*s,
AudioData
*
out
,
AudioData
*
in
,
int
len
,
int
mustcopy);
184
void
swri_rematrix_init_x86
(
struct
SwrContext
*s);
185
186
void
swri_get_dither
(
SwrContext
*s,
void
*
dst
,
int
len
,
unsigned
seed
,
enum
AVSampleFormat
noise_fmt);
187
int
swri_dither_init
(
SwrContext
*s,
enum
AVSampleFormat
out_fmt,
enum
AVSampleFormat
in_fmt);
188
189
void
swri_audio_convert_init_arm
(
struct
AudioConvert
*ac,
190
enum
AVSampleFormat
out_fmt,
191
enum
AVSampleFormat
in_fmt,
192
int
channels);
193
void
swri_audio_convert_init_x86
(
struct
AudioConvert
*ac,
194
enum
AVSampleFormat
out_fmt,
195
enum
AVSampleFormat
in_fmt,
196
int
channels);
197
#endif
Generated on Fri Nov 29 2013 19:15:22 for FFmpeg by
1.8.1.2