From c2b28bb9756403d54b8be8c4556354f378c815b4 Mon Sep 17 00:00:00 2001 From: Peter Ross Date: Thu, 31 Jul 2008 12:55:06 +0000 Subject: [PATCH] Add sample format support functions: avcodec_get_sample_fmt_name(), avcodec_get_sample_fmt(), avcodec_sample_fmt_string() Originally committed as revision 14484 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/audioconvert.c | 44 +++++++++++++++++++++++++++++++++++- libavcodec/audioconvert.h | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 libavcodec/audioconvert.h diff --git a/libavcodec/audioconvert.c b/libavcodec/audioconvert.c index 4c02121..6f00af4 100644 --- a/libavcodec/audioconvert.c +++ b/libavcodec/audioconvert.c @@ -25,7 +25,49 @@ * @author Michael Niedermayer */ -#include "avcodec.h" +#include "audioconvert.h" + +typedef struct SampleFmtInfo { + const char *name; + int bits; +} SampleFmtInfo; + +/** this table gives more information about formats */ +static const SampleFmtInfo sample_fmt_info[SAMPLE_FMT_NB] = { + [SAMPLE_FMT_U8] = { .name = "u8", .bits = 8 }, + [SAMPLE_FMT_S16] = { .name = "s16", .bits = 16 }, + [SAMPLE_FMT_S24] = { .name = "s24", .bits = 24 }, + [SAMPLE_FMT_S32] = { .name = "s32", .bits = 32 }, + [SAMPLE_FMT_FLT] = { .name = "flt", .bits = 32 } +}; + +const char *avcodec_get_sample_fmt_name(int sample_fmt) +{ + if (sample_fmt < 0 || sample_fmt >= SAMPLE_FMT_NB) + return NULL; + return sample_fmt_info[sample_fmt].name; +} + +enum SampleFormat avcodec_get_sample_fmt(const char* name) +{ + int i; + + for (i=0; i < SAMPLE_FMT_NB; i++) + if (!strcmp(sample_fmt_info[i].name, name)) + return i; + return SAMPLE_FMT_NONE; +} + +void avcodec_sample_fmt_string (char *buf, int buf_size, int sample_fmt) +{ + /* print header */ + if (sample_fmt < 0) + snprintf (buf, buf_size, "name " " depth"); + else if (sample_fmt < SAMPLE_FMT_NB) { + SampleFmtInfo info= sample_fmt_info[sample_fmt]; + snprintf (buf, buf_size, "%-6s" " %2d ", info.name, info.bits); + } +} int av_audio_convert(void *maybe_dspcontext_or_something_av_convert_specific, void *out[6], int out_stride[6], enum SampleFormat out_fmt, diff --git a/libavcodec/audioconvert.h b/libavcodec/audioconvert.h new file mode 100644 index 0000000..210cc87 --- /dev/null +++ b/libavcodec/audioconvert.h @@ -0,0 +1,57 @@ +/* + * audio conversion + * Copyright (c) 2006 Michael Niedermayer + * Copyright (c) 2008 Peter Ross + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef FFMPEG_AUDIOCONVERT_H +#define FFMPEG_AUDIOCONVERT_H + +/** + * @file audioconvert.h + * Audio format conversion routines + */ + + +#include "avcodec.h" + + +/** + * Generate string corresponding to the sample format with + * number sample_fmt, or a header if sample_fmt is negative. + * + * @param[in] buf the buffer where to write the string + * @param[in] buf_size the size of buf + * @param[in] sample_fmt the number of the sample format to print the corresponding info string, or + * a negative value to print the corresponding header. + * Meaningful values for obtaining a sample format info vary from 0 to SAMPLE_FMT_NB -1. + */ +void avcodec_sample_fmt_string(char *buf, int buf_size, int sample_fmt); + +/** + * @return NULL on error + */ +const char *avcodec_get_sample_fmt_name(int sample_fmt); + +/** + * @return SAMPLE_FMT_NONE on error + */ +enum SampleFormat avcodec_get_sample_fmt(const char* name); + +#endif /* FFMPEG_AUDIOCONVERT_H */ -- 2.7.4