Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004 Michael Niedermayer <michaelni@gmx.at>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg 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  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
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 FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
24 #include "avresample.h"
25 #include "internal.h"
26 #include "audio_data.h"
28 struct ResampleContext {
34  int dst_incr;
35  unsigned int index;
36  int frac;
37  int src_incr;
41  int linear;
44  void (*set_filter)(void *filter, double *tab, int phase, int tap_count);
45  void (*resample_one)(struct ResampleContext *c, void *dst0,
46  int dst_index, const void *src0,
47  unsigned int index, int frac);
48  void (*resample_nearest)(void *dst0, int dst_index,
49  const void *src0, unsigned int index);
55 };
57 /**
58  * Allocate and initialize a ResampleContext.
59  *
60  * The parameters in the AVAudioResampleContext are used to initialize the
61  * ResampleContext.
62  *
63  * @param avr AVAudioResampleContext
64  * @return newly-allocated ResampleContext
65  */
68 /**
69  * Free a ResampleContext.
70  *
71  * @param c ResampleContext
72  */
75 /**
76  * Resample audio data.
77  *
78  * Changes the sample rate.
79  *
80  * @par
81  * All samples in the source data may not be consumed depending on the
82  * resampling parameters and the size of the output buffer. The unconsumed
83  * samples are automatically added to the start of the source in the next call.
84  * If the destination data can be reallocated, that may be done in this function
85  * in order to fit all available output. If it cannot be reallocated, fewer
86  * input samples will be consumed in order to have the output fit in the
87  * destination data buffers.
88  *
89  * @param c ResampleContext
90  * @param dst destination audio data
91  * @param src source audio data
92  * @return 0 on success, negative AVERROR code on failure
93  */
int initial_padding_filled
Definition: resample.h:51
int initial_padding_samples
Definition: resample.h:52
int padding_size
Definition: resample.h:50
ResampleContext * ff_audio_resample_init(AVAudioResampleContext *avr)
Allocate and initialize a ResampleContext.
Definition: resample.c:120
Audio buffer used for intermediate storage between conversion phases.
Definition: audio_data.h:37
enum attribute_deprecated AVResampleFilterType
Definition: avresample.h:123
void ff_audio_resample_free(ResampleContext **c)
Free a ResampleContext.
Definition: resample.c:224
AudioData * buffer
Definition: resample.h:30
AVAudioResampleContext * avr
Definition: af_resample.c:40
int ff_audio_resample(ResampleContext *c, AudioData *dst, AudioData *src)
Resample audio data.
Definition: resample.c:334
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
int compensation_distance
Definition: resample.h:38
enum AVResampleFilterType filter_type
Definition: resample.h:42
#define src
Definition: vp8dsp.c:254
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
unsigned int index
Definition: resample.h:35
external API header
void(* set_filter)(void *filter, double *tab, int phase, int tap_count)
Definition: resample.h:44
void(* resample_nearest)(void *dst0, int dst_index, const void *src0, unsigned int index)
Definition: resample.h:48
int filter_length
Definition: resample.h:32
#define src0
Definition: h264pred.c:138
int final_padding_filled
Definition: resample.h:53
int ideal_dst_incr
Definition: resample.h:33
void(* resample_one)(struct ResampleContext *c, void *dst0, int dst_index, const void *src0, unsigned int index, int frac)
Definition: resample.h:45
int final_padding_samples
Definition: resample.h:54
uint8_t * filter_bank
Definition: resample.h:31
static const struct twinvq_data tab