Merge commit '97bf7c03b1338a867da52c159a2afecbdedcfa88'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 12 Nov 2012 10:32:11 +0000 (11:32 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 12 Nov 2012 10:32:11 +0000 (11:32 +0100)
* commit '97bf7c03b1338a867da52c159a2afecbdedcfa88':
  doc: git-howto: Leave reviewers time to react before pushing patches
  Include libavutil/channel_layout.h instead of libavutil/audioconvert.h
  lavu: rename audioconvert.* to channel_layout.* and deprecate audioconvert.h

Conflicts:
doc/APIchanges
doc/examples/decoding_encoding.c
doc/git-howto.texi
ffmpeg_filter.c
libavcodec/flacdec.c
libavcodec/imc.c
libavcodec/mpegaudiodec.c
libavcodec/utils.c
libavfilter/asrc_anullsrc.c
libavfilter/audio.c
libavfilter/avfilter.c
libavfilter/avfilter.h
libavfilter/avfiltergraph.c
libavfilter/buffer.c
libavutil/Makefile
libavutil/audioconvert.h
libavutil/channel_layout.c
libavutil/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
81 files changed:
1  2 
doc/APIchanges
doc/examples/decoding_encoding.c
doc/filters.texi
ffmpeg.c
ffmpeg_filter.c
ffmpeg_opt.c
libavcodec/aacdectab.h
libavcodec/ac3_parser.c
libavcodec/ac3enc.c
libavcodec/ac3tab.c
libavcodec/alac.c
libavcodec/amrnbdec.c
libavcodec/amrwbdec.c
libavcodec/apedec.c
libavcodec/audioconvert.h
libavcodec/bmv.c
libavcodec/cook.c
libavcodec/dcadec.c
libavcodec/dsicinav.c
libavcodec/flac.c
libavcodec/flacdec.c
libavcodec/g722dec.c
libavcodec/g723_1.c
libavcodec/g726.c
libavcodec/gsmdec.c
libavcodec/imc.c
libavcodec/libfaac.c
libavcodec/libfdk-aacenc.c
libavcodec/libgsm.c
libavcodec/libilbc.c
libavcodec/libmp3lame.c
libavcodec/libopencore-amr.c
libavcodec/libspeexdec.c
libavcodec/libspeexenc.c
libavcodec/mlp_parser.c
libavcodec/mpc7.c
libavcodec/mpc8.c
libavcodec/mpegaudiodec.c
libavcodec/mpegaudioenc.c
libavcodec/nellymoserdec.c
libavcodec/pcm-mpeg.c
libavcodec/qcelpdec.c
libavcodec/qdm2.c
libavcodec/ra144dec.c
libavcodec/ra288.c
libavcodec/sipr.c
libavcodec/smacker.c
libavcodec/truespeech.c
libavcodec/twinvq.c
libavcodec/utils.c
libavcodec/vmdav.c
libavcodec/vorbis_data.c
libavcodec/wavpack.c
libavcodec/wmavoice.c
libavcodec/ws-snd1.c
libavdevice/alsa-audio-common.c
libavfilter/af_aformat.c
libavfilter/af_amix.c
libavfilter/af_ashowinfo.c
libavfilter/af_channelmap.c
libavfilter/af_channelsplit.c
libavfilter/af_join.c
libavfilter/asrc_anullsrc.c
libavfilter/audio.c
libavfilter/avfilter.c
libavfilter/avfilter.h
libavfilter/avfiltergraph.c
libavfilter/buffer.c
libavfilter/buffersink.c
libavfilter/buffersrc.c
libavfilter/fifo.c
libavformat/aea.c
libavformat/flic.c
libavformat/g723_1.c
libavformat/mov.c
libavformat/mov_chan.c
libavformat/wv.c
libavutil/Makefile
libavutil/channel_layout.c
libavutil/channel_layout.h
libavutil/version.h

diff --cc doc/APIchanges
@@@ -15,101 -13,9 +15,104 @@@ libavutil:     2012-10-2
  
  API changes, most recent first:
  
 +2012-11-02 - xxxxxxx - lavu 52.4.100 - opt.h
 +  Add av_opt_get_key_value().
 +
 +2012-11-03 - xxxxxxx - lavu 52.3.100 - opt.h
 +  Add AV_OPT_TYPE_SAMPLE_FMT value to AVOptionType enum.
 +
 +2012-10-21 - xxxxxxx - lavc  54.68.100 - avcodec.h
 +                       lavfi  3.20.100 - avfilter.h
 +  Add AV_PKT_DATA_STRINGS_METADATA side data type, used to transmit key/value
 +  strings between AVPacket and AVFrame, and add metadata field to
 +  AVCodecContext (which shall not be accessed by users; see AVFrame metadata
 +  instead).
 +
 +2012-09-27 - a70b493 - lavd 54.3.100 - version.h
 +  Add LIBAVDEVICE_IDENT symbol.
 +
 +2012-09-27 - a70b493 - lavfi 3.18.100 - version.h
 +  Add LIBAVFILTER_IDENT symbol.
 +
 +2012-09-27 - a70b493 - libswr 0.16.100 - version.h
 +  Add LIBSWRESAMPLE_VERSION, LIBSWRESAMPLE_BUILD
 +  and LIBSWRESAMPLE_IDENT symbols.
 +
 +2012-09-06 - 29e972f - lavu 51.72.100 - parseutils.h
 +  Add av_small_strptime() time parsing function.
 +
 +  Can be used as a stripped-down replacement for strptime(), on
 +  systems which do not support it.
 +
 +2012-08-25 - 2626cc4 - lavf 54.28.100
 +  Matroska demuxer now identifies SRT subtitles as AV_CODEC_ID_SUBRIP instead
 +  of AV_CODEC_ID_TEXT.
 +
 +2012-08-13 - 5c0d8bc - lavfi 3.8.100 - avfilter.h
 +  Add avfilter_get_class() function, and priv_class field to AVFilter
 +  struct.
 +
 +2012-08-12 - a25346e - lavu 51.69.100 - opt.h
 +  Add AV_OPT_FLAG_FILTERING_PARAM symbol in opt.h.
 +
 +2012-07-31 - 23fc4dd - lavc 54.46.100
 +  Add channels field to AVFrame.
 +
 +2012-07-30 - f893904 - lavu 51.66.100
 +  Add av_get_channel_description()
 +  and av_get_standard_channel_layout() functions.
 +
 +2012-07-21 - 016a472 - lavc 54.43.100
 +  Add decode_error_flags field to AVFrame.
 +
 +2012-07-20 - b062936 - lavf 54.18.100
 +  Add avformat_match_stream_specifier() function.
 +
 +2012-07-14 - f49ec1b - lavc 54.38.100 - avcodec.h
 +  Add metadata to AVFrame, and the accessor functions
 +  av_frame_get_metadata() and av_frame_set_metadata().
 +
 +2012-07-10 - 0e003d8 - lavc 54.33.100
 +  Add av_fast_padded_mallocz().
 +
 +2012-07-10 - 21d5609 - lavfi 3.2.0 - avfilter.h
 +  Add init_opaque() callback to AVFilter struct.
 +
 +2012-06-26 - e6674e4 - lavu 51.63.100 - imgutils.h
 +  Add functions to libavutil/imgutils.h:
 +  av_image_get_buffer_size()
 +  av_image_fill_arrays()
 +  av_image_copy_to_buffer()
 +
 +2012-06-24 - c41899a - lavu 51.62.100 - version.h
 +  version moved from avutil.h to version.h
 +
 +2012-04-11 - 359abb1 - lavu 51.58.100 - error.h
 +  Add av_make_error_string() and av_err2str() utilities to
 +  libavutil/error.h.
 +
 +2012-06-05 - 62b39d4 - lavc 54.24.100
 +  Add pkt_duration field to AVFrame.
 +
 +2012-05-24 - f2ee065 - lavu 51.54.100
 +  Move AVPALETTE_SIZE and AVPALETTE_COUNT macros from
 +  libavcodec/avcodec.h to libavutil/pixfmt.h.
 +
 +2012-05-14 - 94a9ac1 - lavf 54.5.100
 +  Add av_guess_sample_aspect_ratio() function.
 +
 +2012-04-20 - 65fa7bc - lavfi 2.70.100
 +  Add avfilter_unref_bufferp() to avfilter.h.
 +
 +2012-04-13 - 162e400 - lavfi 2.68.100
 +  Install libavfilter/asrc_abuffer.h public header.
 +
 +2012-03-26 - a67d9cf - lavfi 2.66.100
 +  Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
 +
+ 2012-xx-xx - xxxxxxx - lavu 52.2.0 - audioconvert.h
+   Rename audioconvert.h to channel_layout.h. audioconvert.h is now deprecated.
  2012-xx-xx - xxxxxxx - lavu 52.1.0 - intmath.h
    Add av_ctz() for trailing zero bit count
  
   * @file
   * libavcodec API use example.
   *
 - * @example libavcodec/api-example.c
 - * Note that this library only handles codecs (mpeg, mpeg4, etc...),
 - * not file formats (avi, vob, etc...). See library 'libavformat' for the
 + * Note that libavcodec only handles codecs (mpeg, mpeg4, etc...),
 + * not file formats (avi, vob, mp4, mov, mkv, mxf, flv, mpegts, mpegps, etc...). See library 'libavformat' for the
   * format handling
 + * @example doc/examples/decoding_encoding.c
   */
  
 -#include <stdlib.h>
 -#include <stdio.h>
 -#include <string.h>
 -
 -#ifdef HAVE_AV_CONFIG_H
 -#undef HAVE_AV_CONFIG_H
 -#endif
 +#include <math.h>
  
 -#include "libavcodec/avcodec.h"
 -#include "libavutil/channel_layout.h"
 -#include "libavutil/common.h"
 -#include "libavutil/imgutils.h"
 -#include "libavutil/mathematics.h"
 -#include "libavutil/samplefmt.h"
 +#include <libavutil/opt.h>
 +#include <libavcodec/avcodec.h>
- #include <libavutil/audioconvert.h>
++#include <libavutil/channel_layout.h>
 +#include <libavutil/common.h>
 +#include <libavutil/imgutils.h>
 +#include <libavutil/mathematics.h>
 +#include <libavutil/samplefmt.h>
  
  #define INBUF_SIZE 4096
  #define AUDIO_INBUF_SIZE 20480
@@@ -926,188 -366,31 +926,188 @@@ not meant to be used directly
  
  Below is a description of the currently available audio sources.
  
 -@section anullsrc
 +@section abuffer
  
 -Null audio source, never return audio frames. It is mainly useful as a
 -template and to be employed in analysis / debugging tools.
 +Buffer audio frames, and make them available to the filter chain.
  
 -It accepts as optional parameter a string of the form
 -@var{sample_rate}:@var{channel_layout}.
 +This source is mainly intended for a programmatic use, in particular
 +through the interface defined in @file{libavfilter/asrc_abuffer.h}.
  
 -@var{sample_rate} specify the sample rate, and defaults to 44100.
 +It accepts the following mandatory parameters:
 +@var{sample_rate}:@var{sample_fmt}:@var{channel_layout}
  
 -@var{channel_layout} specify the channel layout, and can be either an
 -integer or a string representing a channel layout. The default value
 -of @var{channel_layout} is 3, which corresponds to CH_LAYOUT_STEREO.
 +@table @option
  
 -Check the channel_layout_map definition in
 -@file{libavutil/channel_layout.c} for the mapping between strings and
 -channel layout values.
 +@item sample_rate
 +The sample rate of the incoming audio buffers.
  
 -Follow some examples:
 -@example
 -#  set the sample rate to 48000 Hz and the channel layout to CH_LAYOUT_MONO.
 -anullsrc=48000:4
 +@item sample_fmt
 +The sample format of the incoming audio buffers.
 +Either a sample format name or its corresponging integer representation from
 +the enum AVSampleFormat in @file{libavutil/samplefmt.h}
  
 -# same as
 -anullsrc=48000:mono
 +@item channel_layout
 +The channel layout of the incoming audio buffers.
 +Either a channel layout name from channel_layout_map in
 +@file{libavutil/audioconvert.c} or its corresponding integer representation
 +from the AV_CH_LAYOUT_* macros in @file{libavutil/audioconvert.h}
 +
 +@end table
 +
 +For example:
 +@example
 +abuffer=44100:s16p:stereo
 +@end example
 +
 +will instruct the source to accept planar 16bit signed stereo at 44100Hz.
 +Since the sample format with name "s16p" corresponds to the number
 +6 and the "stereo" channel layout corresponds to the value 0x3, this is
 +equivalent to:
 +@example
 +abuffer=44100:6:0x3
 +@end example
 +
 +@section aevalsrc
 +
 +Generate an audio signal specified by an expression.
 +
 +This source accepts in input one or more expressions (one for each
 +channel), which are evaluated and used to generate a corresponding
 +audio signal.
 +
 +It accepts the syntax: @var{exprs}[::@var{options}].
 +@var{exprs} is a list of expressions separated by ":", one for each
 +separate channel. In case the @var{channel_layout} is not
 +specified, the selected channel layout depends on the number of
 +provided expressions.
 +
 +@var{options} is an optional sequence of @var{key}=@var{value} pairs,
 +separated by ":".
 +
 +The description of the accepted options follows.
 +
 +@table @option
 +
 +@item channel_layout, c
 +Set the channel layout. The number of channels in the specified layout
 +must be equal to the number of specified expressions.
 +
 +@item duration, d
 +Set the minimum duration of the sourced audio. See the function
 +@code{av_parse_time()} for the accepted format.
 +Note that the resulting duration may be greater than the specified
 +duration, as the generated audio is always cut at the end of a
 +complete frame.
 +
 +If not specified, or the expressed duration is negative, the audio is
 +supposed to be generated forever.
 +
 +@item nb_samples, n
 +Set the number of samples per channel per each output frame,
 +default to 1024.
 +
 +@item sample_rate, s
 +Specify the sample rate, default to 44100.
 +@end table
 +
 +Each expression in @var{exprs} can contain the following constants:
 +
 +@table @option
 +@item n
 +number of the evaluated sample, starting from 0
 +
 +@item t
 +time of the evaluated sample expressed in seconds, starting from 0
 +
 +@item s
 +sample rate
 +
 +@end table
 +
 +@subsection Examples
 +
 +@itemize
 +
 +@item
 +Generate silence:
 +@example
 +aevalsrc=0
 +@end example
 +
 +@item
 +
 +Generate a sin signal with frequency of 440 Hz, set sample rate to
 +8000 Hz:
 +@example
 +aevalsrc="sin(440*2*PI*t)::s=8000"
 +@end example
 +
 +@item
 +Generate a two channels signal, specify the channel layout (Front
 +Center + Back Center) explicitly:
 +@example
 +aevalsrc="sin(420*2*PI*t):cos(430*2*PI*t)::c=FC|BC"
 +@end example
 +
 +@item
 +Generate white noise:
 +@example
 +aevalsrc="-2+random(0)"
 +@end example
 +
 +@item
 +Generate an amplitude modulated signal:
 +@example
 +aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
 +@end example
 +
 +@item
 +Generate 2.5 Hz binaural beats on a 360 Hz carrier:
 +@example
 +aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)"
 +@end example
 +
 +@end itemize
 +
 +@section anullsrc
 +
 +Null audio source, return unprocessed audio frames. It is mainly useful
 +as a template and to be employed in analysis / debugging tools, or as
 +the source for filters which ignore the input data (for example the sox
 +synth filter).
 +
 +It accepts an optional sequence of @var{key}=@var{value} pairs,
 +separated by ":".
 +
 +The description of the accepted options follows.
 +
 +@table @option
 +
 +@item sample_rate, s
 +Specify the sample rate, and defaults to 44100.
 +
 +@item channel_layout, cl
 +
 +Specify the channel layout, and can be either an integer or a string
 +representing a channel layout. The default value of @var{channel_layout}
 +is "stereo".
 +
 +Check the channel_layout_map definition in
- @file{libavcodec/audioconvert.c} for the mapping between strings and
++@file{libavutil/channel_layout.c} for the mapping between strings and
 +channel layout values.
 +
 +@item nb_samples, n
 +Set the number of samples per requested frames.
 +
 +@end table
 +
 +Follow some examples:
 +@example
 +#  set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
 +anullsrc=r=48000:cl=4
 +
 +# same as
 +anullsrc=r=48000:cl=mono
  @end example
  
  @section abuffer
diff --cc ffmpeg.c
+++ b/ffmpeg.c
@@@ -41,9 -30,9 +41,9 @@@
  #include "libavformat/avformat.h"
  #include "libavdevice/avdevice.h"
  #include "libswscale/swscale.h"
 -#include "libavresample/avresample.h"
 +#include "libswresample/swresample.h"
  #include "libavutil/opt.h"
- #include "libavutil/audioconvert.h"
+ #include "libavutil/channel_layout.h"
  #include "libavutil/parseutils.h"
  #include "libavutil/samplefmt.h"
  #include "libavutil/colorspace.h"
diff --cc ffmpeg_filter.c
  
  #include "libavfilter/avfilter.h"
  #include "libavfilter/avfiltergraph.h"
 +#include "libavfilter/buffersink.h"
  
- #include "libavutil/audioconvert.h"
  #include "libavutil/avassert.h"
 +#include "libavutil/avstring.h"
 +#include "libavutil/bprint.h"
+ #include "libavutil/channel_layout.h"
  #include "libavutil/pixdesc.h"
  #include "libavutil/pixfmt.h"
 +#include "libavutil/imgutils.h"
  #include "libavutil/samplefmt.h"
  
 +enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodec *codec, enum AVPixelFormat target)
 +{
 +    if (codec && codec->pix_fmts) {
 +        const enum AVPixelFormat *p = codec->pix_fmts;
 +        const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(target);
 +        int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
 +        enum AVPixelFormat best= AV_PIX_FMT_NONE;
 +        if (st->codec->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) {
 +            if (st->codec->codec_id == AV_CODEC_ID_MJPEG) {
 +                p = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE };
 +            } else if (st->codec->codec_id == AV_CODEC_ID_LJPEG) {
 +                p = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUV420P,
 +                                                 AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_BGRA, AV_PIX_FMT_NONE };
 +            }
 +        }
 +        for (; *p != AV_PIX_FMT_NONE; p++) {
 +            best= avcodec_find_best_pix_fmt_of_2(best, *p, target, has_alpha, NULL);
 +            if (*p == target)
 +                break;
 +        }
 +        if (*p == AV_PIX_FMT_NONE) {
 +            if (target != AV_PIX_FMT_NONE)
 +                av_log(NULL, AV_LOG_WARNING,
 +                       "Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n",
 +                       av_get_pix_fmt_name(target),
 +                       codec->name,
 +                       av_get_pix_fmt_name(best));
 +            return best;
 +        }
 +    }
 +    return target;
 +}
 +
 +void choose_sample_fmt(AVStream *st, AVCodec *codec)
 +{
 +    if (codec && codec->sample_fmts) {
 +        const enum AVSampleFormat *p = codec->sample_fmts;
 +        for (; *p != -1; p++) {
 +            if (*p == st->codec->sample_fmt)
 +                break;
 +        }
 +        if (*p == -1) {
 +            if((codec->capabilities & CODEC_CAP_LOSSLESS) && av_get_sample_fmt_name(st->codec->sample_fmt) > av_get_sample_fmt_name(codec->sample_fmts[0]))
 +                av_log(NULL, AV_LOG_ERROR, "Conversion will not be lossless.\n");
 +            if(av_get_sample_fmt_name(st->codec->sample_fmt))
 +            av_log(NULL, AV_LOG_WARNING,
 +                   "Incompatible sample format '%s' for codec '%s', auto-selecting format '%s'\n",
 +                   av_get_sample_fmt_name(st->codec->sample_fmt),
 +                   codec->name,
 +                   av_get_sample_fmt_name(codec->sample_fmts[0]));
 +            st->codec->sample_fmt = codec->sample_fmts[0];
 +        }
 +    }
 +}
 +
 +static char *choose_pix_fmts(OutputStream *ost)
 +{
 +     if (ost->keep_pix_fmt) {
 +        if (ost->filter)
 +            avfilter_graph_set_auto_convert(ost->filter->graph->graph,
 +                                            AVFILTER_AUTO_CONVERT_NONE);
 +        if (ost->st->codec->pix_fmt == AV_PIX_FMT_NONE)
 +            return NULL;
 +        return av_strdup(av_get_pix_fmt_name(ost->st->codec->pix_fmt));
 +    }
 +    if (ost->st->codec->pix_fmt != AV_PIX_FMT_NONE) {
 +        return av_strdup(av_get_pix_fmt_name(choose_pixel_fmt(ost->st, ost->enc, ost->st->codec->pix_fmt)));
 +    } else if (ost->enc && ost->enc->pix_fmts) {
 +        const enum AVPixelFormat *p;
 +        AVIOContext *s = NULL;
 +        uint8_t *ret;
 +        int len;
 +
 +        if (avio_open_dyn_buf(&s) < 0)
 +            exit(1);
 +
 +        p = ost->enc->pix_fmts;
 +        if (ost->st->codec->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) {
 +            if (ost->st->codec->codec_id == AV_CODEC_ID_MJPEG) {
 +                p = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE };
 +            } else if (ost->st->codec->codec_id == AV_CODEC_ID_LJPEG) {
 +                p = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUV420P,
 +                                                    AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_BGRA, AV_PIX_FMT_NONE };
 +            }
 +        }
 +
 +        for (; *p != AV_PIX_FMT_NONE; p++) {
 +            const char *name = av_get_pix_fmt_name(*p);
 +            avio_printf(s, "%s:", name);
 +        }
 +        len = avio_close_dyn_buf(s, &ret);
 +        ret[len - 1] = 0;
 +        return ret;
 +    } else
 +        return NULL;
 +}
 +
  /* Define a function for building a string containing a list of
   * allowed formats. */
  #define DEF_CHOOSE_FORMAT(type, var, supported_list, none, get_name, separator)\
diff --cc ffmpeg_opt.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
- #include "libavutil/audioconvert.h"
+ #include "libavutil/channel_layout.h"
  #include "avcodec.h"
  #include "bytestream.h"
 +#include "libavutil/avassert.h"
  
  enum BMVFlags{
      BMV_NOP = 0,
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -33,8 -33,7 +33,8 @@@
  
  #include <limits.h>
  
- #include "libavutil/audioconvert.h"
 +#include "libavutil/avassert.h"
+ #include "libavutil/channel_layout.h"
  #include "libavutil/crc.h"
  #include "avcodec.h"
  #include "internal.h"
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -35,6 -35,7 +35,8 @@@
  #include <stddef.h>
  #include <stdio.h>
  
+ #include "libavutil/channel_layout.h"
++#include "libavutil/libm.h"
  #include "avcodec.h"
  #include "get_bits.h"
  #include "dsputil.h"
Simple merge
Simple merge
  #include "avcodec.h"
  #include "internal.h"
  #include "gsm.h"
- #include "libavutil/common.h"
  
 +static av_cold int libgsm_encode_close(AVCodecContext *avctx) {
 +#if FF_API_OLD_ENCODE_AUDIO
 +    av_freep(&avctx->coded_frame);
 +#endif
 +    gsm_destroy(avctx->priv_data);
 +    avctx->priv_data = NULL;
 +    return 0;
 +}
 +
  static av_cold int libgsm_encode_init(AVCodecContext *avctx) {
      if (avctx->channels > 1) {
          av_log(avctx, AV_LOG_ERROR, "Mono required for GSM, got %d channels\n",
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -24,9 -24,7 +24,9 @@@
   * MPEG Audio decoder
   */
  
- #include "libavutil/audioconvert.h"
 +#include "libavutil/avassert.h"
+ #include "libavutil/channel_layout.h"
 +#include "libavutil/libm.h"
  #include "avcodec.h"
  #include "get_bits.h"
  #include "mathops.h"
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -39,8 -38,6 +39,7 @@@
  #include "dsputil.h"
  #include "libavutil/opt.h"
  #include "thread.h"
- #include "audioconvert.h"
 +#include "frame_thread_encoder.h"
  #include "internal.h"
  #include "bytestream.h"
  #include <stdlib.h>
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -29,9 -29,9 +29,9 @@@
   */
  
  #include <alsa/asoundlib.h>
 -#include "libavformat/avformat.h"
 +#include "avdevice.h"
  #include "libavutil/avassert.h"
- #include "libavutil/audioconvert.h"
+ #include "libavutil/channel_layout.h"
  
  #include "alsa-audio.h"
  
Simple merge
Simple merge
  #include <stddef.h>
  
  #include "libavutil/adler32.h"
- #include "libavutil/audioconvert.h"
+ #include "libavutil/channel_layout.h"
  #include "libavutil/common.h"
  #include "libavutil/mem.h"
 +#include "libavutil/timestamp.h"
  #include "libavutil/samplefmt.h"
  
  #include "audio.h"
Simple merge
Simple merge
Simple merge
  #include <inttypes.h>
  #include <stdio.h>
  
+ #include "libavutil/channel_layout.h"
+ #include "libavutil/internal.h"
++#include "libavutil/opt.h"
 +#include "audio.h"
  #include "avfilter.h"
  #include "internal.h"
  
- #include "libavutil/audioconvert.h"
- #include "libavutil/internal.h"
- #include "libavutil/opt.h"
  typedef struct {
 +    const AVClass *class;
 +    char   *channel_layout_str;
      uint64_t channel_layout;
 -    int64_t sample_rate;
 +    char   *sample_rate_str;
 +    int     sample_rate;
 +    int nb_samples;             ///< number of samples per requested frame
 +    int64_t pts;
  } ANullContext;
  
 +#define OFFSET(x) offsetof(ANullContext, x)
 +#define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
 +
 +static const AVOption anullsrc_options[]= {
 +    { "channel_layout", "set channel_layout", OFFSET(channel_layout_str), AV_OPT_TYPE_STRING, {.str = "stereo"}, 0, 0, FLAGS },
 +    { "cl",             "set channel_layout", OFFSET(channel_layout_str), AV_OPT_TYPE_STRING, {.str = "stereo"}, 0, 0, FLAGS },
 +    { "sample_rate",    "set sample rate",    OFFSET(sample_rate_str)   , AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0, FLAGS },
 +    { "r",              "set sample rate",    OFFSET(sample_rate_str)   , AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0, FLAGS },
 +    { "nb_samples",     "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX, FLAGS },
 +    { "n",              "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX, FLAGS },
 +    { NULL },
 +};
 +
 +AVFILTER_DEFINE_CLASS(anullsrc);
 +
  static int init(AVFilterContext *ctx, const char *args)
  {
 -    ANullContext *priv = ctx->priv;
 -    char channel_layout_str[128] = "";
 +    ANullContext *null = ctx->priv;
 +    int ret;
  
 -    priv->sample_rate = 44100;
 -    priv->channel_layout = AV_CH_LAYOUT_STEREO;
 +    null->class = &anullsrc_class;
 +    av_opt_set_defaults(null);
  
 -    if (args)
 -        sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str);
 +    if ((ret = (av_set_options_string(null, args, "=", ":"))) < 0)
 +        return ret;
  
 -    if (priv->sample_rate < 0) {
 -        av_log(ctx, AV_LOG_ERROR, "Invalid negative sample rate: %"PRId64"\n", priv->sample_rate);
 -        return AVERROR(EINVAL);
 -    }
 +    if ((ret = ff_parse_sample_rate(&null->sample_rate,
 +                                     null->sample_rate_str, ctx)) < 0)
 +        return ret;
  
 -    if (*channel_layout_str)
 -        if (!(priv->channel_layout = av_get_channel_layout(channel_layout_str))
 -            && sscanf(channel_layout_str, "%"PRId64, &priv->channel_layout) != 1) {
 -            av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for channel layout\n",
 -                   channel_layout_str);
 -            return AVERROR(EINVAL);
 -        }
 +    if ((ret = ff_parse_channel_layout(&null->channel_layout,
 +                                        null->channel_layout_str, ctx)) < 0)
 +        return ret;
  
      return 0;
  }
@@@ -19,8 -16,7 +19,8 @@@
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
- #include "libavutil/audioconvert.h"
 +#include "libavutil/avassert.h"
+ #include "libavutil/channel_layout.h"
  #include "libavutil/common.h"
  
  #include "audio.h"
@@@ -19,6 -19,9 +19,9 @@@
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
 -/* #define DEBUG */
 -
++#include "libavutil/avassert.h"
++#include "libavutil/avstring.h"
+ #include "libavutil/channel_layout.h"
  #include "libavutil/common.h"
  #include "libavutil/pixdesc.h"
  #include "libavutil/rational.h"
@@@ -533,8 -477,8 +533,8 @@@ struct AVFilterLink 
      int w;                      ///< agreed upon image width
      int h;                      ///< agreed upon image height
      AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
 -    /* These two parameters apply only to audio */
 +    /* These parameters apply only to audio */
-     uint64_t channel_layout;    ///< channel layout of current buffer (see libavutil/audioconvert.h)
+     uint64_t channel_layout;    ///< channel layout of current buffer (see libavutil/channel_layout.h)
      int sample_rate;            ///< samples per second
  
      int format;                 ///< agreed upon media format
  #include <ctype.h>
  #include <string.h>
  
- #include "libavutil/audioconvert.h"
  #include "libavutil/avassert.h"
 -#include "libavutil/common.h"
 -#include "libavutil/log.h"
+ #include "libavutil/channel_layout.h"
 +#include "libavutil/pixdesc.h"
 +#include "libavcodec/avcodec.h" // avcodec_find_best_pix_fmt_of_2()
  #include "avfilter.h"
  #include "avfiltergraph.h"
  #include "formats.h"
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
- #include "libavutil/audioconvert.h"
+ #include "libavutil/channel_layout.h"
 +#include "libavutil/avassert.h"
  #include "libavutil/common.h"
 +#include "libavutil/imgutils.h"
  #include "libavcodec/avcodec.h"
  
  #include "avfilter.h"
Simple merge
  #include "formats.h"
  #include "internal.h"
  #include "video.h"
 +#include "avcodec.h"
  
- #include "libavutil/audioconvert.h"
- #include "libavutil/common.h"
- #include "libavutil/fifo.h"
- #include "libavutil/imgutils.h"
- #include "libavutil/opt.h"
- #include "libavutil/samplefmt.h"
  typedef struct {
      const AVClass    *class;
      AVFifoBuffer     *fifo;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -12,8 -10,8 +12,9 @@@ HEADERS = adler32.
            avutil.h                                                      \
            base64.h                                                      \
            blowfish.h                                                    \
 +          bprint.h                                                      \
            bswap.h                                                       \
+           channel_layout.h                                              \
            common.h                                                      \
            cpu.h                                                         \
            crc.h                                                         \
@@@ -61,8 -57,7 +62,8 @@@ OBJS = adler32.
         avstring.o                                                       \
         base64.o                                                         \
         blowfish.o                                                       \
 +       bprint.o                                                         \
+        channel_layout.o                                                 \
         cpu.o                                                            \
         crc.o                                                            \
         des.o                                                            \
  
  #include "avstring.h"
  #include "avutil.h"
- #include "audioconvert.h"
+ #include "channel_layout.h"
 +#include "bprint.h"
  #include "common.h"
  
 -static const char * const channel_names[] = {
 -    [0]  = "FL",        /* front left */
 -    [1]  = "FR",        /* front right */
 -    [2]  = "FC",        /* front center */
 -    [3]  = "LFE",       /* low frequency */
 -    [4]  = "BL",        /* back left */
 -    [5]  = "BR",        /* back right */
 -    [6]  = "FLC",       /* front left-of-center  */
 -    [7]  = "FRC",       /* front right-of-center */
 -    [8]  = "BC",        /* back-center */
 -    [9]  = "SL",        /* side left */
 -    [10] = "SR",        /* side right */
 -    [11] = "TC",        /* top center */
 -    [12] = "TFL",       /* top front left */
 -    [13] = "TFC",       /* top front center */
 -    [14] = "TFR",       /* top front right */
 -    [15] = "TBL",       /* top back left */
 -    [16] = "TBC",       /* top back center */
 -    [17] = "TBR",       /* top back right */
 -    [29] = "DL",        /* downmix left */
 -    [30] = "DR",        /* downmix right */
 -    [31] = "WL",        /* wide left */
 -    [32] = "WR",        /* wide right */
 -    [33] = "SDL",       /* surround direct left */
 -    [34] = "SDR",       /* surround direct right */
 -    [35] = "LFE2",      /* low frequency 2 */
 +struct channel_name {
 +    const char *name;
 +    const char *description;
 +};
 +
 +static const struct channel_name channel_names[] = {
 +     [0] = { "FL",        "front left"            },
 +     [1] = { "FR",        "front right"           },
 +     [2] = { "FC",        "front center"          },
 +     [3] = { "LFE",       "low frequency"         },
 +     [4] = { "BL",        "back left"             },
 +     [5] = { "BR",        "back right"            },
 +     [6] = { "FLC",       "front left-of-center"  },
 +     [7] = { "FRC",       "front right-of-center" },
 +     [8] = { "BC",        "back center"           },
 +     [9] = { "SL",        "side left"             },
 +    [10] = { "SR",        "side right"            },
 +    [11] = { "TC",        "top center"            },
 +    [12] = { "TFL",       "top front left"        },
 +    [13] = { "TFC",       "top front center"      },
 +    [14] = { "TFR",       "top front right"       },
 +    [15] = { "TBL",       "top back left"         },
 +    [16] = { "TBC",       "top back center"       },
 +    [17] = { "TBR",       "top back right"        },
 +    [29] = { "DL",        "downmix left"          },
 +    [30] = { "DR",        "downmix right"         },
 +    [31] = { "WL",        "wide left"             },
 +    [32] = { "WR",        "wide right"            },
 +    [33] = { "SDL",       "surround direct left"  },
 +    [34] = { "SDR",       "surround direct right" },
 +    [35] = { "LFE2",      "low frequency 2"       },
  };
  
  static const char *get_channel_name(int channel_id)
index 0000000,15b6887..e1a6d28
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,182 +1,208 @@@
 - * This file is part of Libav.
+ /*
+  * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
+  * Copyright (c) 2008 Peter Ross
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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
 -uint64_t av_get_default_channel_layout(int nb_channels);
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #ifndef AVUTIL_CHANNEL_LAYOUT_H
+ #define AVUTIL_CHANNEL_LAYOUT_H
+ #include <stdint.h>
+ /**
+  * @file
+  * audio channel layout utility functions
+  */
+ /**
+  * @addtogroup lavu_audio
+  * @{
+  */
+ /**
+  * @defgroup channel_masks 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.
+ #define AV_CH_WIDE_LEFT              0x0000000080000000ULL
+ #define AV_CH_WIDE_RIGHT             0x0000000100000000ULL
+ #define AV_CH_SURROUND_DIRECT_LEFT   0x0000000200000000ULL
+ #define AV_CH_SURROUND_DIRECT_RIGHT  0x0000000400000000ULL
+ #define AV_CH_LOW_FREQUENCY_2        0x0000000800000000ULL
+ /** 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          0x8000000000000000ULL
+ /**
+  * @}
+  * @defgroup channel_mask_c 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_2POINT1           (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
+ #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_3POINT1           (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
+ #define AV_CH_LAYOUT_4POINT0           (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
+ #define AV_CH_LAYOUT_4POINT1           (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
+ #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_6POINT0           (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
+ #define AV_CH_LAYOUT_6POINT0_FRONT     (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
+ #define AV_CH_LAYOUT_HEXAGONAL         (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
+ #define AV_CH_LAYOUT_6POINT1           (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
+ #define AV_CH_LAYOUT_6POINT1_BACK      (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
+ #define AV_CH_LAYOUT_6POINT1_FRONT     (AV_CH_LAYOUT_6POINT0_FRONT|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_7POINT0_FRONT     (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
+ #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|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
+ #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
+ #define AV_CH_LAYOUT_OCTAGONAL         (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
+ #define AV_CH_LAYOUT_STEREO_DOWNMIX    (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
+ enum AVMatrixEncoding {
+     AV_MATRIX_ENCODING_NONE,
+     AV_MATRIX_ENCODING_DOLBY,
+     AV_MATRIX_ENCODING_DPLII,
+     AV_MATRIX_ENCODING_NB
+ };
+ /**
+  * @}
+  */
+ /**
+  * Return a channel layout id that matches name, or 0 if no match is found.
+  *
+  * name can be one or several of the following notations,
+  * separated by '+' or '|':
+  * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0,
+  *   5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix);
+  * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC,
+  *   SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR);
+  * - a number of channels, in decimal, optionally followed by 'c', yielding
+  *   the default channel layout for that number of channels (@see
+  *   av_get_default_channel_layout);
+  * - a channel layout mask, in hexadecimal starting with "0x" (see the
+  *   AV_CH_* macros).
+  *
+  * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7"
+  */
+ uint64_t av_get_channel_layout(const char *name);
+ /**
+  * Return a description of a channel layout.
+  * If nb_channels is <= 0, it is guessed from the 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, uint64_t channel_layout);
++struct AVBPrint;
++/**
++ * Append a description of a channel layout to a bprint buffer.
++ */
++void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
++
+ /**
+  * Return the number of channels in the channel layout.
+  */
+ int av_get_channel_layout_nb_channels(uint64_t channel_layout);
+ /**
+  * Return default channel layout for a given number of channels.
+  */
++int64_t av_get_default_channel_layout(int nb_channels);
+ /**
+  * Get the index of a channel in channel_layout.
+  *
+  * @param channel a channel layout describing exactly one channel which must be
+  *                present in channel_layout.
+  *
+  * @return index of channel in channel_layout on success, a negative AVERROR
+  *         on error.
+  */
+ int av_get_channel_layout_channel_index(uint64_t channel_layout,
+                                         uint64_t channel);
+ /**
+  * Get the channel with the given index in channel_layout.
+  */
+ uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
+ /**
+  * Get the name of a given channel.
+  *
+  * @return channel name on success, NULL on error.
+  */
+ const char *av_get_channel_name(uint64_t channel);
+ /**
++ * Get the description of a given channel.
++ *
++ * @param channel  a channel layout with a single channel
++ * @return  channel description on success, NULL on error
++ */
++const char *av_get_channel_description(uint64_t channel);
++
++/**
++ * Get the value and name of a standard channel layout.
++ *
++ * @param[in]  index   index in an internal list, starting at 0
++ * @param[out] layout  channel layout mask
++ * @param[out] name    name of the layout
++ * @return  0  if the layout exists,
++ *          <0 if index is beyond the limits
++ */
++int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
++                                   const char **name);
++
++/**
+  * @}
+  */
+ #endif /* AVUTIL_CHANNEL_LAYOUT_H */
@@@ -74,9 -36,9 +74,9 @@@
   * @{
   */
  
 -#define LIBAVUTIL_VERSION_MAJOR 52
 -#define LIBAVUTIL_VERSION_MINOR  2
 -#define LIBAVUTIL_VERSION_MICRO  0
 +#define LIBAVUTIL_VERSION_MAJOR  52
- #define LIBAVUTIL_VERSION_MINOR   5
++#define LIBAVUTIL_VERSION_MINOR   6
 +#define LIBAVUTIL_VERSION_MICRO 100
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \