1/* 2 * audio conversion 3 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 4 * Copyright (c) 2008 Peter Ross 5 * 6 * This file is part of Libav. 7 * 8 * Libav is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * Libav is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with Libav; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 */ 22 23#ifndef AVCODEC_AUDIOCONVERT_H 24#define AVCODEC_AUDIOCONVERT_H 25 26/** 27 * @file 28 * Audio format conversion routines 29 */ 30 31 32#include "libavutil/cpu.h" 33#include "avcodec.h" 34#include "libavutil/audioconvert.h" 35 36#if FF_API_OLD_SAMPLE_FMT 37/** 38 * @deprecated Use av_get_sample_fmt_string() instead. 39 */ 40attribute_deprecated 41void avcodec_sample_fmt_string(char *buf, int buf_size, int sample_fmt); 42 43/** 44 * @deprecated Use av_get_sample_fmt_name() instead. 45 */ 46attribute_deprecated 47const char *avcodec_get_sample_fmt_name(int sample_fmt); 48 49/** 50 * @deprecated Use av_get_sample_fmt() instead. 51 */ 52attribute_deprecated 53enum AVSampleFormat avcodec_get_sample_fmt(const char* name); 54#endif 55 56#if FF_API_OLD_AUDIOCONVERT 57/** 58 * @deprecated Use av_get_channel_layout() instead. 59 */ 60attribute_deprecated 61int64_t avcodec_get_channel_layout(const char *name); 62 63/** 64 * @deprecated Use av_get_channel_layout_string() instead. 65 */ 66attribute_deprecated 67void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout); 68 69/** 70 * @deprecated Use av_get_channel_layout_nb_channels() instead. 71 */ 72attribute_deprecated 73int avcodec_channel_layout_num_channels(int64_t channel_layout); 74#endif 75 76/** 77 * Guess the channel layout 78 * @param nb_channels 79 * @param codec_id Codec identifier, or CODEC_ID_NONE if unknown 80 * @param fmt_name Format name, or NULL if unknown 81 * @return Channel layout mask 82 */ 83uint64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name); 84 85struct AVAudioConvert; 86typedef struct AVAudioConvert AVAudioConvert; 87 88/** 89 * Create an audio sample format converter context 90 * @param out_fmt Output sample format 91 * @param out_channels Number of output channels 92 * @param in_fmt Input sample format 93 * @param in_channels Number of input channels 94 * @param[in] matrix Channel mixing matrix (of dimension in_channel*out_channels). Set to NULL to ignore. 95 * @param flags See AV_CPU_FLAG_xx 96 * @return NULL on error 97 */ 98AVAudioConvert *av_audio_convert_alloc(enum AVSampleFormat out_fmt, int out_channels, 99 enum AVSampleFormat in_fmt, int in_channels, 100 const float *matrix, int flags); 101 102/** 103 * Free audio sample format converter context 104 */ 105void av_audio_convert_free(AVAudioConvert *ctx); 106 107/** 108 * Convert between audio sample formats 109 * @param[in] out array of output buffers for each channel. set to NULL to ignore processing of the given channel. 110 * @param[in] out_stride distance between consecutive output samples (measured in bytes) 111 * @param[in] in array of input buffers for each channel 112 * @param[in] in_stride distance between consecutive input samples (measured in bytes) 113 * @param len length of audio frame size (measured in samples) 114 */ 115int av_audio_convert(AVAudioConvert *ctx, 116 void * const out[6], const int out_stride[6], 117 const void * const in[6], const int in_stride[6], int len); 118 119#endif /* AVCODEC_AUDIOCONVERT_H */ 120