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
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 SWR_CH_MAX 32
29
30
#define SQRT3_2 1.22474487139158904909
/* sqrt(3/2) */
31
32
#define NS_TAPS 20
33
34
#if ARCH_X86_64
35
typedef
int64_t
integer
;
36
#else
37
typedef
int
integer
;
38
#endif
39
40
typedef
void
(
mix_1_1_func_type
)(
void
*
out
,
const
void
*
in
,
void
*coeffp,
integer
index
,
integer
len
);
41
typedef
void
(
mix_2_1_func_type
)(
void
*
out
,
const
void
*in1,
const
void
*in2,
void
*coeffp,
integer
index1,
integer
index2,
integer
len
);
42
43
typedef
void
(
mix_any_func_type
)(
uint8_t
**
out
,
const
uint8_t
**in1,
void
*coeffp,
integer
len
);
44
45
typedef
struct
AudioData
{
46
uint8_t
*
ch
[
SWR_CH_MAX
];
///< samples buffer per channel
47
uint8_t
*
data
;
///< samples buffer
48
int
ch_count
;
///< number of channels
49
int
bps
;
///< bytes per sample
50
int
count
;
///< number of samples
51
int
planar
;
///< 1 if planar audio, 0 otherwise
52
enum
AVSampleFormat
fmt
;
///< sample format
53
}
AudioData
;
54
55
struct
DitherContext
{
56
enum
SwrDitherType
method
;
57
int
noise_pos
;
58
float
scale
;
59
float
noise_scale
;
///< Noise scale
60
int
ns_taps
;
///< Noise shaping dither taps
61
float
ns_scale
;
///< Noise shaping dither scale
62
float
ns_scale_1
;
///< Noise shaping dither scale^-1
63
int
ns_pos
;
///< Noise shaping dither position
64
float
ns_coeffs
[
NS_TAPS
];
///< Noise shaping filter coefficients
65
float
ns_errors
[
SWR_CH_MAX
][2*
NS_TAPS
];
66
AudioData
noise
;
///< noise used for dithering
67
AudioData
temp
;
///< temporary storage when writing into the input buffer isn't possible
68
int
output_sample_bits
;
///< the number of used output bits, needed to scale dither correctly
69
};
70
71
struct
SwrContext
{
72
const
AVClass
*
av_class
;
///< AVClass used for AVOption and av_log()
73
int
log_level_offset
;
///< logging level offset
74
void
*
log_ctx
;
///< parent logging context
75
enum
AVSampleFormat
in_sample_fmt
;
///< input sample format
76
enum
AVSampleFormat
int_sample_fmt
;
///< internal sample format (AV_SAMPLE_FMT_FLTP or AV_SAMPLE_FMT_S16P)
77
enum
AVSampleFormat
out_sample_fmt
;
///< output sample format
78
int64_t
in_ch_layout
;
///< input channel layout
79
int64_t
out_ch_layout
;
///< output channel layout
80
int
in_sample_rate
;
///< input sample rate
81
int
out_sample_rate
;
///< output sample rate
82
int
flags
;
///< miscellaneous flags such as SWR_FLAG_RESAMPLE
83
float
slev
;
///< surround mixing level
84
float
clev
;
///< center mixing level
85
float
lfe_mix_level
;
///< LFE mixing level
86
float
rematrix_volume
;
///< rematrixing volume coefficient
87
float
rematrix_maxval
;
///< maximum value for rematrixing output
88
enum
AVMatrixEncoding
matrix_encoding
;
/**< matrixed stereo encoding */
89
const
int
*
channel_map
;
///< channel index (or -1 if muted channel) map
90
int
used_ch_count
;
///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count)
91
enum
SwrEngine
engine
;
92
93
struct
DitherContext
dither
;
94
95
int
filter_size
;
/**< length of each FIR filter in the resampling filterbank relative to the cutoff frequency */
96
int
phase_shift
;
/**< log2 of the number of entries in the resampling polyphase filterbank */
97
int
linear_interp
;
/**< if 1 then the resampling FIR filter will be linearly interpolated */
98
double
cutoff
;
/**< resampling cutoff frequency (swr: 6dB point; soxr: 0dB point). 1.0 corresponds to half the output sample rate */
99
enum
SwrFilterType
filter_type
;
/**< swr resampling filter type */
100
int
kaiser_beta
;
/**< swr beta value for Kaiser window (only applicable if filter_type == AV_FILTER_TYPE_KAISER) */
101
double
precision
;
/**< soxr resampling precision (in bits) */
102
int
cheby
;
/**< soxr: if 1 then passband rolloff will be none (Chebyshev) & irrational ratio approximation precision will be higher */
103
104
float
min_compensation
;
///< swr minimum below which no compensation will happen
105
float
min_hard_compensation
;
///< swr minimum below which no silence inject / sample drop will happen
106
float
soft_compensation_duration
;
///< swr duration over which soft compensation is applied
107
float
max_soft_compensation
;
///< swr maximum soft compensation in seconds over soft_compensation_duration
108
float
async
;
///< swr simple 1 parameter async, similar to ffmpegs -async
109
int64_t
firstpts_in_samples
;
///< swr first pts in samples
110
111
int
resample_first
;
///< 1 if resampling must come first, 0 if rematrixing
112
int
rematrix
;
///< flag to indicate if rematrixing is needed (basically if input and output layouts mismatch)
113
int
rematrix_custom
;
///< flag to indicate that a custom matrix has been defined
114
115
AudioData
in
;
///< input audio data
116
AudioData
postin
;
///< post-input audio data: used for rematrix/resample
117
AudioData
midbuf
;
///< intermediate audio data (postin/preout)
118
AudioData
preout
;
///< pre-output audio data: used for rematrix/resample
119
AudioData
out
;
///< converted output audio data
120
AudioData
in_buffer
;
///< cached audio data (convert and resample purpose)
121
AudioData
silence
;
///< temporary with silence
122
AudioData
drop_temp
;
///< temporary used to discard output
123
int
in_buffer_index
;
///< cached buffer position
124
int
in_buffer_count
;
///< cached buffer length
125
int
resample_in_constraint
;
///< 1 if the input end was reach before the output end, 0 otherwise
126
int
flushed
;
///< 1 if data is to be flushed and no further input is expected
127
int64_t
outpts
;
///< output PTS
128
int64_t
firstpts
;
///< first PTS
129
int
drop_output
;
///< number of output samples to drop
130
131
struct
AudioConvert
*
in_convert
;
///< input conversion context
132
struct
AudioConvert
*
out_convert
;
///< output conversion context
133
struct
AudioConvert
*
full_convert
;
///< full conversion context (single conversion for input and output)
134
struct
ResampleContext
*
resample
;
///< resampling context
135
struct
Resampler
const *
resampler
;
///< resampler virtual function table
136
137
float
matrix
[
SWR_CH_MAX
][
SWR_CH_MAX
];
///< floating point rematrixing coefficients
138
uint8_t
*
native_matrix
;
139
uint8_t
*
native_one
;
140
uint8_t
*
native_simd_one
;
141
uint8_t
*
native_simd_matrix
;
142
int32_t
matrix32
[
SWR_CH_MAX
][
SWR_CH_MAX
];
///< 17.15 fixed point rematrixing coefficients
143
uint8_t
matrix_ch
[
SWR_CH_MAX
][
SWR_CH_MAX
+1];
///< Lists of input channels per output channel that have non zero rematrixing coefficients
144
mix_1_1_func_type
*
mix_1_1_f
;
145
mix_1_1_func_type
*
mix_1_1_simd
;
146
147
mix_2_1_func_type
*
mix_2_1_f
;
148
mix_2_1_func_type
*
mix_2_1_simd
;
149
150
mix_any_func_type
*
mix_any_f
;
151
152
/* TODO: callbacks for ASM optimizations */
153
};
154
155
typedef
struct
ResampleContext
* (* resample_init_func)(
struct
ResampleContext
*
c
,
int
out_rate,
int
in_rate,
int
filter_size,
int
phase_shift
,
int
linear
,
156
double
cutoff,
enum
AVSampleFormat
format
,
enum
SwrFilterType
filter_type
,
int
kaiser_beta
,
double
precision,
int
cheby);
157
typedef
void
(*
resample_free_func
)(
struct
ResampleContext
**
c
);
158
typedef
int (*
multiple_resample_func
)(
struct
ResampleContext
*
c
,
AudioData
*dst,
int
dst_size,
AudioData
*
src
,
int
src_size,
int
*consumed);
159
typedef
int (*
resample_flush_func
)(
struct
SwrContext
*
c
);
160
typedef
int (*
set_compensation_func
)(
struct
ResampleContext
*
c
,
int
sample_delta,
int
compensation_distance
);
161
typedef
int64_t (*
get_delay_func
)(
struct
SwrContext
*
s
, int64_t base);
162
typedef
int (*
invert_initial_buffer_func
)(
struct
ResampleContext
*
c
,
AudioData
*dst,
const
AudioData
*
src
,
int
src_size,
int
*dst_idx,
int
*dst_count);
163
164
struct
Resampler
{
165
resample_init_func
init
;
166
resample_free_func
free
;
167
multiple_resample_func
multiple_resample
;
168
resample_flush_func
flush
;
169
set_compensation_func
set_compensation
;
170
get_delay_func
get_delay
;
171
invert_initial_buffer_func
invert_initial_buffer
;
172
};
173
174
extern
struct
Resampler
const
swri_resampler
;
175
176
int
swri_realloc_audio
(
AudioData
*
a
,
int
count
);
177
178
void
swri_noise_shaping_int16
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count
);
179
void
swri_noise_shaping_int32
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count
);
180
void
swri_noise_shaping_float
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count
);
181
void
swri_noise_shaping_double
(
SwrContext
*s,
AudioData
*dsts,
const
AudioData
*srcs,
const
AudioData
*noises,
int
count
);
182
183
int
swri_rematrix_init
(
SwrContext
*s);
184
void
swri_rematrix_free
(
SwrContext
*s);
185
int
swri_rematrix
(
SwrContext
*s,
AudioData
*
out
,
AudioData
*
in
,
int
len
,
int
mustcopy);
186
void
swri_rematrix_init_x86
(
struct
SwrContext
*s);
187
188
void
swri_get_dither
(
SwrContext
*s,
void
*dst,
int
len
,
unsigned
seed
,
enum
AVSampleFormat
noise_fmt);
189
int
swri_dither_init
(
SwrContext
*s,
enum
AVSampleFormat
out_fmt,
enum
AVSampleFormat
in_fmt);
190
191
void
swri_audio_convert_init_aarch64
(
struct
AudioConvert
*ac,
192
enum
AVSampleFormat
out_fmt,
193
enum
AVSampleFormat
in_fmt,
194
int
channels);
195
void
swri_audio_convert_init_arm
(
struct
AudioConvert
*ac,
196
enum
AVSampleFormat
out_fmt,
197
enum
AVSampleFormat
in_fmt,
198
int
channels);
199
void
swri_audio_convert_init_x86
(
struct
AudioConvert
*ac,
200
enum
AVSampleFormat
out_fmt,
201
enum
AVSampleFormat
in_fmt,
202
int
channels);
203
#endif
Generated on Sun Sep 14 2014 18:56:17 for FFmpeg by
1.8.2