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