Commit 176a6157 authored by Stefano Sabatini's avatar Stefano Sabatini

Move audio channel API from libavcodec to libavcore.

Originally committed as revision 25787 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 7df22143
...@@ -13,6 +13,15 @@ libavutil: 2009-03-08 ...@@ -13,6 +13,15 @@ libavutil: 2009-03-08
API changes, most recent first: API changes, most recent first:
2010-11-21 - r25787 - lavcore 0.14.0 - audioconvert.h
Add a public audio channel API in audioconvert.h, and deprecate the
corresponding functions in libavcodec:
avcodec_get_channel_name()
avcodec_get_channel_layout()
avcodec_get_channel_layout_string()
avcodec_channel_layout_num_channels()
and the CH_* macros defined in libavcodec/avcodec.h.
2010-11-21 - r25777 - lavf 52.85.0 - avformat.h 2010-11-21 - r25777 - lavf 52.85.0 - avformat.h
Add av_append_packet(). Add av_append_packet().
......
...@@ -48,21 +48,6 @@ void avcodec_sample_fmt_string (char *buf, int buf_size, int sample_fmt) ...@@ -48,21 +48,6 @@ void avcodec_sample_fmt_string (char *buf, int buf_size, int sample_fmt)
} }
#endif #endif
static const char* const channel_names[]={
"FL", "FR", "FC", "LFE", "BL", "BR", "FLC", "FRC",
"BC", "SL", "SR", "TC", "TFL", "TFC", "TFR", "TBL",
"TBC", "TBR",
[29] = "DL",
[30] = "DR",
};
static const char *get_channel_name(int channel_id)
{
if (channel_id<0 || channel_id>=FF_ARRAY_ELEMS(channel_names))
return NULL;
return channel_names[channel_id];
}
int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name) int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name)
{ {
switch(nb_channels) { switch(nb_channels) {
...@@ -77,75 +62,22 @@ int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, con ...@@ -77,75 +62,22 @@ int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, con
} }
} }
static const struct { #if FF_API_OLD_AUDIOCONVERT
const char *name;
int nb_channels;
int64_t layout;
} channel_layout_map[] = {
{ "mono", 1, CH_LAYOUT_MONO },
{ "stereo", 2, CH_LAYOUT_STEREO },
{ "4.0", 4, CH_LAYOUT_4POINT0 },
{ "quad", 4, CH_LAYOUT_QUAD },
{ "5.0", 5, CH_LAYOUT_5POINT0 },
{ "5.0", 5, CH_LAYOUT_5POINT0_BACK },
{ "5.1", 6, CH_LAYOUT_5POINT1 },
{ "5.1", 6, CH_LAYOUT_5POINT1_BACK },
{ "5.1+downmix", 8, CH_LAYOUT_5POINT1|CH_LAYOUT_STEREO_DOWNMIX, },
{ "7.1", 8, CH_LAYOUT_7POINT1 },
{ "7.1(wide)", 8, CH_LAYOUT_7POINT1_WIDE },
{ "7.1+downmix", 10, CH_LAYOUT_7POINT1|CH_LAYOUT_STEREO_DOWNMIX, },
{ 0 }
};
int64_t avcodec_get_channel_layout(const char *name) int64_t avcodec_get_channel_layout(const char *name)
{ {
int i = 0; return av_get_channel_layout(name);
do {
if (!strcmp(channel_layout_map[i].name, name))
return channel_layout_map[i].layout;
i++;
} while (channel_layout_map[i].name);
return 0;
} }
void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout) void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout)
{ {
int i; av_get_channel_layout_string(buf, buf_size, nb_channels, channel_layout);
for (i=0; channel_layout_map[i].name; i++)
if (nb_channels == channel_layout_map[i].nb_channels &&
channel_layout == channel_layout_map[i].layout) {
av_strlcpy(buf, channel_layout_map[i].name, buf_size);
return;
}
snprintf(buf, buf_size, "%d channels", nb_channels);
if (channel_layout) {
int i,ch;
av_strlcat(buf, " (", buf_size);
for(i=0,ch=0; i<64; i++) {
if ((channel_layout & (1L<<i))) {
const char *name = get_channel_name(i);
if (name) {
if (ch>0) av_strlcat(buf, "|", buf_size);
av_strlcat(buf, name, buf_size);
}
ch++;
}
}
av_strlcat(buf, ")", buf_size);
}
} }
int avcodec_channel_layout_num_channels(int64_t channel_layout) int avcodec_channel_layout_num_channels(int64_t channel_layout)
{ {
int count; return av_get_channel_layout_nb_channels(channel_layout);
uint64_t x = channel_layout;
for (count = 0; x; count++)
x &= x-1; // unset lowest set bit
return count;
} }
#endif
struct AVAudioConvert { struct AVAudioConvert {
int in_channels, out_channels; int in_channels, out_channels;
......
...@@ -52,21 +52,29 @@ attribute_deprecated ...@@ -52,21 +52,29 @@ attribute_deprecated
enum AVSampleFormat avcodec_get_sample_fmt(const char* name); enum AVSampleFormat avcodec_get_sample_fmt(const char* name);
#endif #endif
/** #if FF_API_OLD_AUDIOCONVERT
* @return NULL on error attribute_deprecated
*/
const char *avcodec_get_channel_name(int channel_id); const char *avcodec_get_channel_name(int channel_id);
/** /**
* @return channel layout that matches name, 0 if no match * @deprecated Use av_get_channel_layout() instead.
*/ */
attribute_deprecated
int64_t avcodec_get_channel_layout(const char *name); int64_t avcodec_get_channel_layout(const char *name);
/** /**
* Return description of channel layout * @deprecated Use av_get_channel_layout_string() instead.
*/ */
attribute_deprecated
void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout); void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout);
/**
* @deprecated Use av_get_channel_layout_nb_channels() instead.
*/
attribute_deprecated
int avcodec_channel_layout_num_channels(int64_t channel_layout);
#endif
/** /**
* Guess the channel layout * Guess the channel layout
* @param nb_channels * @param nb_channels
...@@ -76,11 +84,6 @@ void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels, ...@@ -76,11 +84,6 @@ void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels,
*/ */
int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name); int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name);
/**
* @return the number of channels in the channel layout.
*/
int avcodec_channel_layout_num_channels(int64_t channel_layout);
struct AVAudioConvert; struct AVAudioConvert;
typedef struct AVAudioConvert AVAudioConvert; typedef struct AVAudioConvert AVAudioConvert;
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#define LIBAVCODEC_VERSION_MAJOR 52 #define LIBAVCODEC_VERSION_MAJOR 52
#define LIBAVCODEC_VERSION_MINOR 97 #define LIBAVCODEC_VERSION_MINOR 97
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 1
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
...@@ -79,6 +79,9 @@ ...@@ -79,6 +79,9 @@
#ifndef FF_API_OLD_SAMPLE_FMT #ifndef FF_API_OLD_SAMPLE_FMT
#define FF_API_OLD_SAMPLE_FMT (LIBAVCODEC_VERSION_MAJOR < 53) #define FF_API_OLD_SAMPLE_FMT (LIBAVCODEC_VERSION_MAJOR < 53)
#endif #endif
#ifndef FF_API_OLD_AUDIOCONVERT
#define FF_API_OLD_AUDIOCONVERT (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#define AV_NOPTS_VALUE INT64_C(0x8000000000000000) #define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
#define AV_TIME_BASE 1000000 #define AV_TIME_BASE 1000000
...@@ -426,50 +429,53 @@ enum CodecID { ...@@ -426,50 +429,53 @@ enum CodecID {
#define SAMPLE_FMT_NB AV_SAMPLE_FMT_NB #define SAMPLE_FMT_NB AV_SAMPLE_FMT_NB
#endif #endif
#if FF_API_OLD_AUDIOCONVERT
#include "libavcore/audioconvert.h"
/* Audio channel masks */ /* Audio channel masks */
#define CH_FRONT_LEFT 0x00000001 #define CH_FRONT_LEFT AV_CH_FRONT_LEFT
#define CH_FRONT_RIGHT 0x00000002 #define CH_FRONT_RIGHT AV_CH_FRONT_RIGHT
#define CH_FRONT_CENTER 0x00000004 #define CH_FRONT_CENTER AV_CH_FRONT_CENTER
#define CH_LOW_FREQUENCY 0x00000008 #define CH_LOW_FREQUENCY AV_CH_LOW_FREQUENCY
#define CH_BACK_LEFT 0x00000010 #define CH_BACK_LEFT AV_CH_BACK_LEFT
#define CH_BACK_RIGHT 0x00000020 #define CH_BACK_RIGHT AV_CH_BACK_RIGHT
#define CH_FRONT_LEFT_OF_CENTER 0x00000040 #define CH_FRONT_LEFT_OF_CENTER AV_CH_FRONT_LEFT_OF_CENTER
#define CH_FRONT_RIGHT_OF_CENTER 0x00000080 #define CH_FRONT_RIGHT_OF_CENTER AV_CH_FRONT_RIGHT_OF_CENTER
#define CH_BACK_CENTER 0x00000100 #define CH_BACK_CENTER AV_CH_BACK_CENTER
#define CH_SIDE_LEFT 0x00000200 #define CH_SIDE_LEFT AV_CH_SIDE_LEFT
#define CH_SIDE_RIGHT 0x00000400 #define CH_SIDE_RIGHT AV_CH_SIDE_RIGHT
#define CH_TOP_CENTER 0x00000800 #define CH_TOP_CENTER AV_CH_TOP_CENTER
#define CH_TOP_FRONT_LEFT 0x00001000 #define CH_TOP_FRONT_LEFT AV_CH_TOP_FRONT_LEFT
#define CH_TOP_FRONT_CENTER 0x00002000 #define CH_TOP_FRONT_CENTER AV_CH_TOP_FRONT_CENTER
#define CH_TOP_FRONT_RIGHT 0x00004000 #define CH_TOP_FRONT_RIGHT AV_CH_TOP_FRONT_RIGHT
#define CH_TOP_BACK_LEFT 0x00008000 #define CH_TOP_BACK_LEFT AV_CH_TOP_BACK_LEFT
#define CH_TOP_BACK_CENTER 0x00010000 #define CH_TOP_BACK_CENTER AV_CH_TOP_BACK_CENTER
#define CH_TOP_BACK_RIGHT 0x00020000 #define CH_TOP_BACK_RIGHT AV_CH_TOP_BACK_RIGHT
#define CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. #define CH_STEREO_LEFT AV_CH_STEREO_LEFT
#define CH_STEREO_RIGHT 0x40000000 ///< See CH_STEREO_LEFT. #define CH_STEREO_RIGHT AV_CH_STEREO_RIGHT
/** Channel mask value used for AVCodecContext.request_channel_layout /** Channel mask value used for AVCodecContext.request_channel_layout
to indicate that the user requests the channel order of the decoder output to indicate that the user requests the channel order of the decoder output
to be the native codec channel order. */ to be the native codec channel order. */
#define CH_LAYOUT_NATIVE 0x8000000000000000LL #define CH_LAYOUT_NATIVE AV_CH_LAYOUT_NATIVE
/* Audio channel convenience macros */ /* Audio channel convenience macros */
#define CH_LAYOUT_MONO (CH_FRONT_CENTER) #define CH_LAYOUT_MONO AV_CH_LAYOUT_MONO
#define CH_LAYOUT_STEREO (CH_FRONT_LEFT|CH_FRONT_RIGHT) #define CH_LAYOUT_STEREO AV_CH_LAYOUT_STEREO
#define CH_LAYOUT_2_1 (CH_LAYOUT_STEREO|CH_BACK_CENTER) #define CH_LAYOUT_2_1 AV_CH_LAYOUT_2_1
#define CH_LAYOUT_SURROUND (CH_LAYOUT_STEREO|CH_FRONT_CENTER) #define CH_LAYOUT_SURROUND AV_CH_LAYOUT_SURROUND
#define CH_LAYOUT_4POINT0 (CH_LAYOUT_SURROUND|CH_BACK_CENTER) #define CH_LAYOUT_4POINT0 AV_CH_LAYOUT_4POINT0
#define CH_LAYOUT_2_2 (CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT) #define CH_LAYOUT_2_2 AV_CH_LAYOUT_2_2
#define CH_LAYOUT_QUAD (CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT) #define CH_LAYOUT_QUAD AV_CH_LAYOUT_QUAD
#define CH_LAYOUT_5POINT0 (CH_LAYOUT_SURROUND|CH_SIDE_LEFT|CH_SIDE_RIGHT) #define CH_LAYOUT_5POINT0 AV_CH_LAYOUT_5POINT0
#define CH_LAYOUT_5POINT1 (CH_LAYOUT_5POINT0|CH_LOW_FREQUENCY) #define CH_LAYOUT_5POINT1 AV_CH_LAYOUT_5POINT1
#define CH_LAYOUT_5POINT0_BACK (CH_LAYOUT_SURROUND|CH_BACK_LEFT|CH_BACK_RIGHT) #define CH_LAYOUT_5POINT0_BACK AV_CH_LAYOUT_5POINT0_BACK
#define CH_LAYOUT_5POINT1_BACK (CH_LAYOUT_5POINT0_BACK|CH_LOW_FREQUENCY) #define CH_LAYOUT_5POINT1_BACK AV_CH_LAYOUT_5POINT1_BACK
#define CH_LAYOUT_7POINT0 (CH_LAYOUT_5POINT0|CH_BACK_LEFT|CH_BACK_RIGHT) #define CH_LAYOUT_7POINT0 AV_CH_LAYOUT_7POINT0
#define CH_LAYOUT_7POINT1 (CH_LAYOUT_5POINT1|CH_BACK_LEFT|CH_BACK_RIGHT) #define CH_LAYOUT_7POINT1 AV_CH_LAYOUT_7POINT1
#define CH_LAYOUT_7POINT1_WIDE (CH_LAYOUT_5POINT1_BACK|\ #define CH_LAYOUT_7POINT1_WIDE AV_CH_LAYOUT_7POINT1_WIDE
CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER) #define CH_LAYOUT_STEREO_DOWNMIX AV_CH_LAYOUT_STEREO_DOWNMIX
#define CH_LAYOUT_STEREO_DOWNMIX (CH_STEREO_LEFT|CH_STEREO_RIGHT) #endif
/* in bytes */ /* in bytes */
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio #define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
......
...@@ -3,12 +3,16 @@ include $(SUBDIR)../config.mak ...@@ -3,12 +3,16 @@ include $(SUBDIR)../config.mak
NAME = avcore NAME = avcore
FFLIBS = avutil FFLIBS = avutil
HEADERS = avcore.h \ HEADERS = \
audioconvert.h \
avcore.h \
imgutils.h \ imgutils.h \
parseutils.h \ parseutils.h \
samplefmt.h \ samplefmt.h \
OBJS = imgutils.o \ OBJS = \
audioconvert.o \
imgutils.o \
parseutils.o \ parseutils.o \
samplefmt.o \ samplefmt.o \
utils.o \ utils.o \
......
/*
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
*
* 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
*/
/**
* @file
* audio conversion routines
*/
#include "libavutil/avstring.h"
#include "audioconvert.h"
static const char * const channel_names[] = {
"FL", "FR", "FC", "LFE", "BL", "BR", "FLC", "FRC",
"BC", "SL", "SR", "TC", "TFL", "TFC", "TFR", "TBL",
"TBC", "TBR",
[29] = "DL",
[30] = "DR",
};
static const char *get_channel_name(int channel_id)
{
if (channel_id < 0 || channel_id >= FF_ARRAY_ELEMS(channel_names))
return NULL;
return channel_names[channel_id];
}
static const struct {
const char *name;
int nb_channels;
int64_t layout;
} channel_layout_map[] = {
{ "mono", 1, AV_CH_LAYOUT_MONO },
{ "stereo", 2, AV_CH_LAYOUT_STEREO },
{ "4.0", 4, AV_CH_LAYOUT_4POINT0 },
{ "quad", 4, AV_CH_LAYOUT_QUAD },
{ "5.0", 5, AV_CH_LAYOUT_5POINT0 },
{ "5.0", 5, AV_CH_LAYOUT_5POINT0_BACK },
{ "5.1", 6, AV_CH_LAYOUT_5POINT1 },
{ "5.1", 6, AV_CH_LAYOUT_5POINT1_BACK },
{ "5.1+downmix", 8, AV_CH_LAYOUT_5POINT1|AV_CH_LAYOUT_STEREO_DOWNMIX, },
{ "7.1", 8, AV_CH_LAYOUT_7POINT1 },
{ "7.1(wide)", 8, AV_CH_LAYOUT_7POINT1_WIDE },
{ "7.1+downmix", 10, AV_CH_LAYOUT_7POINT1|AV_CH_LAYOUT_STEREO_DOWNMIX, },
{ 0 }
};
int64_t av_get_channel_layout(const char *name)
{
int i = 0;
do {
if (!strcmp(channel_layout_map[i].name, name))
return channel_layout_map[i].layout;
i++;
} while (channel_layout_map[i].name);
return 0;
}
void av_get_channel_layout_string(char *buf, int buf_size,
int nb_channels, int64_t channel_layout)
{
int i;
for (i = 0; channel_layout_map[i].name; i++)
if (nb_channels == channel_layout_map[i].nb_channels &&
channel_layout == channel_layout_map[i].layout) {
av_strlcpy(buf, channel_layout_map[i].name, buf_size);
return;
}
snprintf(buf, buf_size, "%d channels", nb_channels);
if (channel_layout) {
int i,ch;
av_strlcat(buf, " (", buf_size);
for(i=0,ch=0; i<64; i++) {
if ((channel_layout & (1L<<i))) {
const char *name = get_channel_name(i);
if (name) {
if (ch>0) av_strlcat(buf, "|", buf_size);
av_strlcat(buf, name, buf_size);
}
ch++;
}
}
av_strlcat(buf, ")", buf_size);
}
}
int av_get_channel_layout_nb_channels(int64_t channel_layout)
{
int count;
uint64_t x = channel_layout;
for (count = 0; x; count++)
x &= x-1; // unset lowest set bit
return count;
}
/*
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
* 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 AVCORE_AUDIOCONVERT_H
#define AVCORE_AUDIOCONVERT_H
/**
* @file
* audio conversion routines
*/
#include "avcore.h"
/* Audio channel masks */
#define AV_CH_FRONT_LEFT 0x00000001
#define AV_CH_FRONT_RIGHT 0x00000002
#define AV_CH_FRONT_CENTER 0x00000004
#define AV_CH_LOW_FREQUENCY 0x00000008
#define AV_CH_BACK_LEFT 0x00000010
#define AV_CH_BACK_RIGHT 0x00000020
#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
#define AV_CH_BACK_CENTER 0x00000100
#define AV_CH_SIDE_LEFT 0x00000200
#define AV_CH_SIDE_RIGHT 0x00000400
#define AV_CH_TOP_CENTER 0x00000800
#define AV_CH_TOP_FRONT_LEFT 0x00001000
#define AV_CH_TOP_FRONT_CENTER 0x00002000
#define AV_CH_TOP_FRONT_RIGHT 0x00004000
#define AV_CH_TOP_BACK_LEFT 0x00008000
#define AV_CH_TOP_BACK_CENTER 0x00010000
#define AV_CH_TOP_BACK_RIGHT 0x00020000
#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
/** Channel mask value used for AVCodecContext.request_channel_layout
to indicate that the user requests the channel order of the decoder output
to be the native codec channel order. */
#define AV_CH_LAYOUT_NATIVE 0x8000000000000000LL
/* Audio channel convenience macros */
#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
/**
* Return a channel layout id that matches name, 0 if no match.
*/
int64_t av_get_channel_layout(const char *name);
/**
* Return a description of a channel layout.
*
* @param buf put here the string containing the channel layout
* @param buf_size size in bytes of the buffer
*/
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, int64_t channel_layout);
/**
* Return the number of channels in the channel layout.
*/
int av_get_channel_layout_nb_channels(int64_t channel_layout);
#endif /* AVCORE_AUDIOCONVERT_H */
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBAVCORE_VERSION_MAJOR 0 #define LIBAVCORE_VERSION_MAJOR 0
#define LIBAVCORE_VERSION_MINOR 13 #define LIBAVCORE_VERSION_MINOR 14
#define LIBAVCORE_VERSION_MICRO 0 #define LIBAVCORE_VERSION_MICRO 0
#define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \ #define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment