FFmpeg
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 SWRESAMPLE_SWRESAMPLE_INTERNAL_H
22 #define SWRESAMPLE_SWRESAMPLE_INTERNAL_H
23 
24 #include "swresample.h"
26 #include "config.h"
27 
28 #define SWR_CH_MAX 64
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  int 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 typedef struct ResampleContext * (* resample_init_func)(struct ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear,
72  double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, double kaiser_beta, double precision, int cheby, int exact_rational);
73 typedef void (* resample_free_func)(struct ResampleContext **c);
74 typedef int (* multiple_resample_func)(struct ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed);
75 typedef int (* resample_flush_func)(struct SwrContext *c);
76 typedef int (* set_compensation_func)(struct ResampleContext *c, int sample_delta, int compensation_distance);
77 typedef int64_t (* get_delay_func)(struct SwrContext *s, int64_t base);
78 typedef int (* invert_initial_buffer_func)(struct ResampleContext *c, AudioData *dst, const AudioData *src, int src_size, int *dst_idx, int *dst_count);
79 typedef int64_t (* get_out_samples_func)(struct SwrContext *s, int in_samples);
80 
81 struct Resampler {
82  resample_init_func init;
90 };
91 
92 extern struct Resampler const swri_resampler;
93 extern struct Resampler const swri_soxr_resampler;
94 
95 struct SwrContext {
96  const AVClass *av_class; ///< AVClass used for AVOption and av_log()
97  int log_level_offset; ///< logging level offset
98  void *log_ctx; ///< parent logging context
99  enum AVSampleFormat in_sample_fmt; ///< input sample format
100  enum AVSampleFormat int_sample_fmt; ///< internal sample format (AV_SAMPLE_FMT_FLTP or AV_SAMPLE_FMT_S16P)
101  enum AVSampleFormat out_sample_fmt; ///< output sample format
102  int64_t in_ch_layout; ///< input channel layout
103  int64_t out_ch_layout; ///< output channel layout
104  int in_sample_rate; ///< input sample rate
105  int out_sample_rate; ///< output sample rate
106  int flags; ///< miscellaneous flags such as SWR_FLAG_RESAMPLE
107  float slev; ///< surround mixing level
108  float clev; ///< center mixing level
109  float lfe_mix_level; ///< LFE mixing level
110  float rematrix_volume; ///< rematrixing volume coefficient
111  float rematrix_maxval; ///< maximum value for rematrixing output
112  int matrix_encoding; /**< matrixed stereo encoding */
113  const int *channel_map; ///< channel index (or -1 if muted channel) map
114  int used_ch_count; ///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count)
115  int engine;
116 
117  int user_in_ch_count; ///< User set input channel count
118  int user_out_ch_count; ///< User set output channel count
119  int user_used_ch_count; ///< User set used channel count
120  int64_t user_in_ch_layout; ///< User set input channel layout
121  int64_t user_out_ch_layout; ///< User set output channel layout
122  enum AVSampleFormat user_int_sample_fmt; ///< User set internal sample format
123  int user_dither_method; ///< User set dither method
124 
126 
127  int filter_size; /**< length of each FIR filter in the resampling filterbank relative to the cutoff frequency */
128  int phase_shift; /**< log2 of the number of entries in the resampling polyphase filterbank */
129  int linear_interp; /**< if 1 then the resampling FIR filter will be linearly interpolated */
130  int exact_rational; /**< if 1 then enable non power of 2 phase_count */
131  double cutoff; /**< resampling cutoff frequency (swr: 6dB point; soxr: 0dB point). 1.0 corresponds to half the output sample rate */
132  int filter_type; /**< swr resampling filter type */
133  double kaiser_beta; /**< swr beta value for Kaiser window (only applicable if filter_type == AV_FILTER_TYPE_KAISER) */
134  double precision; /**< soxr resampling precision (in bits) */
135  int cheby; /**< soxr: if 1 then passband rolloff will be none (Chebyshev) & irrational ratio approximation precision will be higher */
136 
137  float min_compensation; ///< swr minimum below which no compensation will happen
138  float min_hard_compensation; ///< swr minimum below which no silence inject / sample drop will happen
139  float soft_compensation_duration; ///< swr duration over which soft compensation is applied
140  float max_soft_compensation; ///< swr maximum soft compensation in seconds over soft_compensation_duration
141  float async; ///< swr simple 1 parameter async, similar to ffmpegs -async
142  int64_t firstpts_in_samples; ///< swr first pts in samples
143 
144  int resample_first; ///< 1 if resampling must come first, 0 if rematrixing
145  int rematrix; ///< flag to indicate if rematrixing is needed (basically if input and output layouts mismatch)
146  int rematrix_custom; ///< flag to indicate that a custom matrix has been defined
147 
148  AudioData in; ///< input audio data
149  AudioData postin; ///< post-input audio data: used for rematrix/resample
150  AudioData midbuf; ///< intermediate audio data (postin/preout)
151  AudioData preout; ///< pre-output audio data: used for rematrix/resample
152  AudioData out; ///< converted output audio data
153  AudioData in_buffer; ///< cached audio data (convert and resample purpose)
154  AudioData silence; ///< temporary with silence
155  AudioData drop_temp; ///< temporary used to discard output
156  int in_buffer_index; ///< cached buffer position
157  int in_buffer_count; ///< cached buffer length
158  int resample_in_constraint; ///< 1 if the input end was reach before the output end, 0 otherwise
159  int flushed; ///< 1 if data is to be flushed and no further input is expected
160  int64_t outpts; ///< output PTS
161  int64_t firstpts; ///< first PTS
162  int drop_output; ///< number of output samples to drop
163  double delayed_samples_fixup; ///< soxr 0.1.1: needed to fixup delayed_samples after flush has been called.
164 
165  struct AudioConvert *in_convert; ///< input conversion context
166  struct AudioConvert *out_convert; ///< output conversion context
167  struct AudioConvert *full_convert; ///< full conversion context (single conversion for input and output)
168  struct ResampleContext *resample; ///< resampling context
169  struct Resampler const *resampler; ///< resampler virtual function table
170 
171  double matrix[SWR_CH_MAX][SWR_CH_MAX]; ///< floating point rematrixing coefficients
172  float matrix_flt[SWR_CH_MAX][SWR_CH_MAX]; ///< single precision floating point rematrixing coefficients
177  int32_t matrix32[SWR_CH_MAX][SWR_CH_MAX]; ///< 17.15 fixed point rematrixing coefficients
178  uint8_t matrix_ch[SWR_CH_MAX][SWR_CH_MAX+1]; ///< Lists of input channels per output channel that have non zero rematrixing coefficients
181 
184 
186 
187  /* TODO: callbacks for ASM optimizations */
188 };
189 
192 
193 void swri_noise_shaping_int16 (SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
194 void swri_noise_shaping_int32 (SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
195 void swri_noise_shaping_float (SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
196 void swri_noise_shaping_double(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
197 
201 int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy);
202 int swri_rematrix_init_x86(struct SwrContext *s);
203 
205 int swri_get_dither(SwrContext *s, void *dst, int len, unsigned seed, enum AVSampleFormat noise_fmt);
207 int swri_dither_init(SwrContext *s, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt);
208 
210  enum AVSampleFormat out_fmt,
211  enum AVSampleFormat in_fmt,
212  int channels);
214  enum AVSampleFormat out_fmt,
215  enum AVSampleFormat in_fmt,
216  int channels);
218  enum AVSampleFormat out_fmt,
219  enum AVSampleFormat in_fmt,
220  int channels);
221 
222 #endif
struct AudioConvert * in_convert
input conversion context
const AVClass * av_class
AVClass used for AVOption and av_log()
struct AudioConvert * full_convert
full conversion context (single conversion for input and output)
int64_t(* get_delay_func)(struct SwrContext *s, int64_t base)
int user_dither_method
User set dither method.
AudioData temp
temporary storage when writing into the input buffer isn&#39;t possible
int out_sample_rate
output sample rate
Audio buffer used for intermediate storage between conversion phases.
Definition: audio_data.h:37
multiple_resample_func multiple_resample
static int linear(InterplayACMContext *s, unsigned ind, unsigned col)
Definition: interplayacm.c:121
struct Resampler const swri_resampler
Definition: resample.c:613
int count
number of samples
int ch_count
number of channels
float soft_compensation_duration
swr duration over which soft compensation is applied
channels
Definition: aptx.c:30
int rematrix_custom
flag to indicate that a custom matrix has been defined
SwrFilterType
Resampling Filter Types.
Definition: swresample.h:166
double delayed_samples_fixup
soxr 0.1.1: needed to fixup delayed_samples after flush has been called.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:36
int in_buffer_index
cached buffer position
static float kaiser_beta(float att, float tr_bw)
Definition: asrc_sinc.c:140
int64_t(* get_out_samples_func)(struct SwrContext *s, int in_samples)
AudioData in_buffer
cached audio data (convert and resample purpose)
int resample_in_constraint
1 if the input end was reach before the output end, 0 otherwise
struct ResampleContext * resample
resampling context
#define src
Definition: vp8dsp.c:254
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
float ns_scale
Noise shaping dither scale.
float async
swr simple 1 parameter async, similar to ffmpegs -async
const int * channel_map
channel index (or -1 if muted channel) map
void( mix_2_1_func_type)(void *out, const void *in1, const void *in2, void *coeffp, integer index1, integer index2, integer len)
uint8_t base
Definition: vp3data.h:202
int log_level_offset
logging level offset
struct Resampler const * resampler
resampler virtual function table
void(* resample_free_func)(struct ResampleContext **c)
uint8_t
float max_soft_compensation
swr maximum soft compensation in seconds over soft_compensation_duration
int user_out_ch_count
User set output channel count.
enum AVSampleFormat fmt
sample format
#define NS_TAPS
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
void * log_ctx
parent logging context
void swri_rematrix_free(SwrContext *s)
Definition: rematrix.c:490
void swri_audio_convert_init_arm(struct AudioConvert *ac, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels)
AudioData out
converted output audio data
int phase_shift
log2 of the number of entries in the resampling polyphase filterbank
int compensation_distance
Definition: resample.h:38
AudioData in
input audio data
uint8_t * native_simd_one
invert_initial_buffer_func invert_initial_buffer
float min_hard_compensation
swr minimum below which no silence inject / sample drop will happen
enum AVResampleFilterType filter_type
Definition: resample.h:42
int in_buffer_count
cached buffer length
libswresample public header
AudioData postin
post-input audio data: used for rematrix/resample
int matrix_encoding
matrixed stereo encoding
float slev
surround mixing level
int output_sample_bits
the number of used output bits, needed to scale dither correctly
int64_t user_in_ch_layout
User set input channel layout.
av_warn_unused_result int swri_realloc_audio(AudioData *a, int count)
Definition: swresample.c:400
av_warn_unused_result int swri_get_dither(SwrContext *s, void *dst, int len, unsigned seed, enum AVSampleFormat noise_fmt)
Definition: dither.c:26
The libswresample context.
int swri_rematrix_init_x86(struct SwrContext *s)
double cutoff
resampling cutoff frequency (swr: 6dB point; soxr: 0dB point).
static const uint8_t dither[8][8]
Definition: vf_fspp.c:57
float clev
center mixing level
void swri_audio_convert_init_x86(struct AudioConvert *ac, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels)
void( mix_any_func_type)(uint8_t **out, const uint8_t **in1, void *coeffp, integer len)
mix_2_1_func_type * mix_2_1_simd
GLsizei count
Definition: opengl_enc.c:108
resample_flush_func flush
int64_t firstpts
first PTS
AudioData preout
pre-output audio data: used for rematrix/resample
AudioData midbuf
intermediate audio data (postin/preout)
int(* multiple_resample_func)(struct ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed)
int(* resample_flush_func)(struct SwrContext *c)
resample_free_func free
audio channel layout utility functions
int flags
miscellaneous flags such as SWR_FLAG_RESAMPLE
int filter_type
swr resampling filter type
int drop_output
number of output samples to drop
int linear_interp
if 1 then the resampling FIR filter will be linearly interpolated
mix_1_1_func_type * mix_1_1_f
void swri_noise_shaping_int32(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count)
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
double precision
soxr resampling precision (in bits)
mix_1_1_func_type * mix_1_1_simd
AudioData noise
noise used for dithering
int32_t
int64_t out_ch_layout
output channel layout
int in_sample_rate
input sample rate
#define s(width, name)
Definition: cbs_vp9.c:257
int bps
bytes per sample
av_warn_unused_result int swri_dither_init(SwrContext *s, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt)
Definition: dither.c:79
int rematrix
flag to indicate if rematrixing is needed (basically if input and output layouts mismatch) ...
mix_any_func_type * mix_any_f
uint8_t * native_matrix
set_compensation_func set_compensation
float ns_scale_1
Noise shaping dither scale^-1.
float noise_scale
Noise scale.
void swri_noise_shaping_double(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count)
int user_in_ch_count
User set input channel count.
int64_t outpts
output PTS
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
int user_used_ch_count
User set used channel count.
int filter_size
length of each FIR filter in the resampling filterbank relative to the cutoff frequency ...
#define SWR_CH_MAX
uint8_t * data[AVRESAMPLE_MAX_CHANNELS]
data plane pointers
Definition: audio_data.h:39
double kaiser_beta
swr beta value for Kaiser window (only applicable if filter_type == AV_FILTER_TYPE_KAISER) ...
static unsigned int seed
Definition: videogen.c:78
float min_compensation
swr minimum below which no compensation will happen
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
int ns_pos
Noise shaping dither position.
Describe the class of an AVClass context structure.
Definition: log.h:67
int index
Definition: gxfenc.c:89
void swri_noise_shaping_float(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count)
get_out_samples_func get_out_samples
av_warn_unused_result int swri_rematrix_init(SwrContext *s)
Definition: rematrix.c:385
struct Resampler const swri_soxr_resampler
int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy)
Definition: rematrix.c:497
uint8_t * native_one
#define av_warn_unused_result
Definition: attributes.h:56
int flushed
1 if data is to be flushed and no further input is expected
void( mix_1_1_func_type)(void *out, const void *in, void *coeffp, integer index, integer len)
int64_t in_ch_layout
input channel layout
int
uint8_t * native_simd_matrix
int cheby
soxr: if 1 then passband rolloff will be none (Chebyshev) & irrational ratio approximation precision ...
get_delay_func get_delay
float lfe_mix_level
LFE mixing level.
void swri_noise_shaping_int16(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count)
int len
float rematrix_maxval
maximum value for rematrixing output
struct AudioConvert * out_convert
output conversion context
float rematrix_volume
rematrixing volume coefficient
int(* set_compensation_func)(struct ResampleContext *c, int sample_delta, int compensation_distance)
mix_2_1_func_type * mix_2_1_f
int64_t firstpts_in_samples
swr first pts in samples
FILE * out
Definition: movenc.c:54
int integer
int(* invert_initial_buffer_func)(struct ResampleContext *c, AudioData *dst, const AudioData *src, int src_size, int *dst_idx, int *dst_count)
int planar
1 if planar audio, 0 otherwise
AudioData drop_temp
temporary used to discard output
int exact_rational
if 1 then enable non power of 2 phase_count
uint8_t * ch[SWR_CH_MAX]
samples buffer per channel
int used_ch_count
number of used input channels (mapped channel count if channel_map, otherwise in.ch_count) ...
resample_init_func init
void swri_audio_convert_init_aarch64(struct AudioConvert *ac, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels)
int64_t user_out_ch_layout
User set output channel layout.
AudioData silence
temporary with silence
int resample_first
1 if resampling must come first, 0 if rematrixing
int ns_taps
Noise shaping dither taps.