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