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 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 FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVRESAMPLE_RESAMPLE_H 22 #define AVRESAMPLE_RESAMPLE_H 23 24 #include "avresample.h" 25 #include "internal.h" 26 #include "audio_data.h" 27 28 struct ResampleContext { 29 AVAudioResampleContext *avr; 30 AudioData *buffer; 31 uint8_t *filter_bank; 32 int filter_length; 33 int ideal_dst_incr; 34 int dst_incr; 35 unsigned int index; 36 int frac; 37 int src_incr; 38 int compensation_distance; 39 int phase_shift; 40 int phase_mask; 41 int linear; 42 enum AVResampleFilterType filter_type; 43 int kaiser_beta; 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); 50 int padding_size; 51 int initial_padding_filled; 52 int initial_padding_samples; 53 int final_padding_filled; 54 int final_padding_samples; 55 }; 56 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 */ 66 ResampleContext *ff_audio_resample_init(AVAudioResampleContext *avr); 67 68 /** 69 * Free a ResampleContext. 70 * 71 * @param c ResampleContext 72 */ 73 void ff_audio_resample_free(ResampleContext **c); 74 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 */ 94 int ff_audio_resample(ResampleContext *c, AudioData *dst, AudioData *src); 95 96 #endif /* AVRESAMPLE_RESAMPLE_H */ 97