Go to the documentation of this file.
36 soxr_datatype_t
type =
46 soxr_io_spec_t io_spec = soxr_io_spec(
type,
type);
48 soxr_quality_spec_t q_spec = soxr_quality_spec((
int)((precision-2)/4), (SOXR_HI_PREC_CLOCK|SOXR_ROLLOFF_NONE)*!!cheby);
49 q_spec.precision = precision;
50 #if !defined SOXR_VERSION
51 q_spec.bw_pc = cutoff?
FFMAX(
FFMIN(cutoff,.995),.8)*100 : q_spec.bw_pc;
53 q_spec.passband_end = cutoff?
FFMAX(
FFMIN(cutoff,.995),.8) : q_spec.passband_end;
56 soxr_delete((soxr_t)
c);
58 soxr_create(in_rate, out_rate, 0, &
error, &io_spec, &q_spec, 0);
65 soxr_delete((soxr_t)*
c);
70 s->delayed_samples_fixup = soxr_delay((soxr_t)
s->resample);
77 soxr_process((soxr_t)
s->resample, &
f, 0, &idone, &
f, 0, &odone);
78 s->delayed_samples_fixup -= soxr_delay((soxr_t)
s->resample);
88 soxr_error_t
error = soxr_set_error((soxr_t)
c, soxr_set_num_channels((soxr_t)
c,
src->ch_count));
90 error = soxr_process((soxr_t)
c,
src->ch, (
size_t)src_size,
91 &idone,
dst->ch, (
size_t)dst_size, &odone);
95 *consumed = (int)idone;
96 return error? -1 : odone;
100 double delayed_samples = soxr_delay((soxr_t)
s->resample);
104 delayed_samples +=
s->delayed_samples_fixup;
106 delay_s = delayed_samples /
s->out_sample_rate;
112 int in_count,
int *out_idx,
int *out_sz){
117 double out_samples = (
double)
s->out_sample_rate /
s->in_sample_rate * in_samples;
118 double delayed_samples = soxr_delay((soxr_t)
s->resample);
121 delayed_samples +=
s->delayed_samples_fixup;
123 return (
int64_t)(out_samples + delayed_samples + 1 + .5);
static void error(const char *err)
static int64_t get_delay(struct SwrContext *s, int64_t base)
@ AV_SAMPLE_FMT_FLTP
float, planar
static void destroy(struct ResampleContext **c)
static float kaiser_beta(float att, float tr_bw)
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
static int linear(InterplayACMContext *s, unsigned ind, unsigned col)
static int flush(struct SwrContext *s)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
static int64_t get_out_samples(struct SwrContext *s, int in_samples)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
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
enum SwrFilterType filter_type
The libswresample context.
SwrFilterType
Resampling Filter Types.
static struct ResampleContext * create(struct ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, double kaiser_beta, double precision, int cheby, int exact_rational)
struct Resampler const swri_soxr_resampler
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
static int process(struct ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed)
static int invert_initial_buffer(struct ResampleContext *c, AudioData *dst, const AudioData *src, int in_count, int *out_idx, int *out_sz)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
AVSampleFormat
Audio sample formats.
@ AV_SAMPLE_FMT_S16
signed 16 bits
@ AV_SAMPLE_FMT_DBLP
double, planar
@ AV_SAMPLE_FMT_DBL
double
@ AV_SAMPLE_FMT_S32
signed 32 bits