Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 26 Nov 2011 00:12:08 +0000 (01:12 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 26 Nov 2011 00:12:08 +0000 (01:12 +0100)
* qatar/master:
  swscale: Readd #define _SVID_SOURCE
  Fix av_get_channel_layout_string() for positions >31
  configure: Store vda lib flags in extralibs instead of ldflags
  Make channel layout masks unsigned
  dca: ARMv6 optimised decode_blockcode()
  nullenc: drop AVFMT_RAWPICTURE from the flags
  frame-mt: return consumed packet size in ff_thread_decode_frame
  aacdec: add more fate tests covering SBR and PS
  MK(BE)TAG: avoid undefined shifts

Conflicts:
configure
libavcodec/arm/dca.h
libavcodec/dca.c
libavcodec/mlp_parser.c
libavcodec/version.h
libavfilter/asrc_anullsrc.c
libavfilter/avfilter.c
libavfilter/avfilter.h
libavfilter/defaults.c
libavutil/audioconvert.c
libavutil/avutil.h
libswscale/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
26 files changed:
1  2 
configure
libavcodec/aac_ac3_parser.h
libavcodec/aacdectab.h
libavcodec/ac3.h
libavcodec/ac3enc.c
libavcodec/audioconvert.c
libavcodec/audioconvert.h
libavcodec/avcodec.h
libavcodec/dca.c
libavcodec/mlp_parser.c
libavcodec/mlp_parser.h
libavcodec/pthread.c
libavcodec/thread.h
libavcodec/version.h
libavcodec/vorbis.h
libavcodec/vorbis_data.c
libavdevice/alsa-audio-common.c
libavfilter/asrc_anullsrc.c
libavfilter/avfilter.c
libavfilter/avfilter.h
libavformat/nullenc.c
libavutil/audioconvert.c
libavutil/audioconvert.h
libavutil/avutil.h
libavutil/common.h
tests/fate/aac.mak

diff --cc configure
+++ b/configure
@@@ -2995,14 -2854,8 +2995,14 @@@ check_header X11/extensions/XvMClib.
  disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
  disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
  
-         add_ldflags -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
 +# check for VDA header
 +if ! disabled vda; then
 +    if check_header VideoDecodeAcceleration/VDADecoder.h; then
 +        enable vda
++        add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
 +    fi
 +fi
 +
  if ! disabled w32threads && ! enabled pthreads; then
      check_func _beginthreadex && enable w32threads
  fi
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -2756,9 -2694,9 +2756,9 @@@ typedef struct AVCodecContext 
      /**
       * Audio channel layout.
       * - encoding: set by user.
 -     * - decoding: set by libavcodec.
 +     * - decoding: set by user, may be overwritten by libavcodec.
       */
-     int64_t channel_layout;
+     uint64_t channel_layout;
  
      /**
       * Request decoder to use this channel layout if it can (0 for default)
Simple merge
@@@ -107,7 -107,7 +107,7 @@@ static int truehd_channels(int chanmap
      return channels;
  }
  
- int64_t ff_truehd_layout(int chanmap)
 -static uint64_t truehd_layout(int chanmap)
++uint64_t ff_truehd_layout(int chanmap)
  {
      int layout = 0, i;
  
@@@ -54,9 -54,6 +54,9 @@@ typedef struct MLPHeaderInf
  
  
  int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb);
- int64_t ff_truehd_layout(int chanmap);
++uint64_t ff_truehd_layout(int chanmap);
 +
 +extern const uint64_t ff_mlp_layout[32];
  
  #endif /* AVCODEC_MLP_PARSER_H */
  
Simple merge
Simple merge
@@@ -21,8 -21,8 +21,8 @@@
  #define AVCODEC_VERSION_H
  
  #define LIBAVCODEC_VERSION_MAJOR 53
 -#define LIBAVCODEC_VERSION_MINOR 22
 +#define LIBAVCODEC_VERSION_MINOR 37
- #define LIBAVCODEC_VERSION_MICRO  0
+ #define LIBAVCODEC_VERSION_MICRO  1
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
Simple merge
Simple merge
Simple merge
   * null audio source
   */
  
 -#include "avfilter.h"
  #include "libavutil/audioconvert.h"
 +#include "libavutil/opt.h"
 +
 +#include "avfilter.h"
 +#include "internal.h"
  
  typedef struct {
-     int64_t channel_layout;
 +    const AVClass *class;
 +    char   *channel_layout_str;
 -    int64_t sample_rate;
+     uint64_t channel_layout;
 +    char   *sample_rate_str;
 +    int     sample_rate;
 +    int nb_samples;             ///< number of samples per requested frame
 +    int64_t pts;
  } ANullContext;
  
 -static int init(AVFilterContext *ctx, const char *args, void *opaque)
 +#define OFFSET(x) offsetof(ANullContext, x)
 +
 +static const AVOption anullsrc_options[]= {
 +    { "channel_layout", "set channel_layout", OFFSET(channel_layout_str), AV_OPT_TYPE_STRING, {.str = "stereo"}, 0, 0 },
 +    { "cl",             "set channel_layout", OFFSET(channel_layout_str), AV_OPT_TYPE_STRING, {.str = "stereo"}, 0, 0 },
 +    { "sample_rate",    "set sample rate",    OFFSET(sample_rate_str)   , AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0 },
 +    { "r",              "set sample rate",    OFFSET(sample_rate_str)   , AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0 },
 +    { "nb_samples",     "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.dbl = 1024}, 0, INT_MAX },
 +    { "n",              "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.dbl = 1024}, 0, INT_MAX },
 +    { NULL },
 +};
 +
 +static const char *anullsrc_get_name(void *ctx)
  {
 -    ANullContext *priv = ctx->priv;
 -    char channel_layout_str[128] = "";
 +    return "anullsrc";
 +}
  
 -    priv->sample_rate = 44100;
 -    priv->channel_layout = AV_CH_LAYOUT_STEREO;
 +static const AVClass anullsrc_class = {
 +    "ANullSrcContext",
 +    anullsrc_get_name,
 +    anullsrc_options
 +};
  
 -    if (args)
 -        sscanf(args, "%"PRId64":%s", &priv->sample_rate, channel_layout_str);
 +static int init(AVFilterContext *ctx, const char *args, void *opaque)
 +{
 +    ANullContext *null = ctx->priv;
 +    int ret;
  
 -    if (priv->sample_rate < 0) {
 -        av_log(ctx, AV_LOG_ERROR, "Invalid negative sample rate: %"PRId64"\n", priv->sample_rate);
 -        return AVERROR(EINVAL);
 +    null->class = &anullsrc_class;
 +    av_opt_set_defaults(null);
 +
 +    if ((ret = (av_set_options_string(null, args, "=", ":"))) < 0) {
 +        av_log(ctx, AV_LOG_ERROR, "Error parsing options string: '%s'\n", args);
 +        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_sample_rate(&null->sample_rate,
 +                                     null->sample_rate_str, ctx)) < 0)
 +        return ret;
 +
 +    if ((ret = ff_parse_channel_layout(&null->channel_layout,
 +                                        null->channel_layout_str, ctx)) < 0)
 +        return ret;
  
      return 0;
  }
@@@ -470,48 -365,6 +470,48 @@@ AVFilterBufferRef *avfilter_get_audio_b
      return ret;
  }
  
-                                           int64_t channel_layout, int planar)
 +AVFilterBufferRef *
 +avfilter_get_audio_buffer_ref_from_arrays(uint8_t *data[8], int linesize[8], int perms,
 +                                          int nb_samples, enum AVSampleFormat sample_fmt,
++                                          uint64_t channel_layout, int planar)
 +{
 +    AVFilterBuffer *samples = av_mallocz(sizeof(AVFilterBuffer));
 +    AVFilterBufferRef *samplesref = av_mallocz(sizeof(AVFilterBufferRef));
 +
 +    if (!samples || !samplesref)
 +        goto fail;
 +
 +    samplesref->buf = samples;
 +    samplesref->buf->free = ff_avfilter_default_free_buffer;
 +    if (!(samplesref->audio = av_mallocz(sizeof(AVFilterBufferRefAudioProps))))
 +        goto fail;
 +
 +    samplesref->audio->nb_samples     = nb_samples;
 +    samplesref->audio->channel_layout = channel_layout;
 +    samplesref->audio->planar         = planar;
 +
 +    /* make sure the buffer gets read permission or it's useless for output */
 +    samplesref->perms = perms | AV_PERM_READ;
 +
 +    samples->refcount = 1;
 +    samplesref->type = AVMEDIA_TYPE_AUDIO;
 +    samplesref->format = sample_fmt;
 +
 +    memcpy(samples->data,        data,     sizeof(samples->data));
 +    memcpy(samples->linesize,    linesize, sizeof(samples->linesize));
 +    memcpy(samplesref->data,     data,     sizeof(samplesref->data));
 +    memcpy(samplesref->linesize, linesize, sizeof(samplesref->linesize));
 +
 +    return samplesref;
 +
 +fail:
 +    if (samplesref && samplesref->audio)
 +        av_freep(&samplesref->audio);
 +    av_freep(&samplesref);
 +    av_freep(&samples);
 +    return NULL;
 +}
 +
  int avfilter_request_frame(AVFilterLink *link)
  {
      FF_DPRINTF_START(NULL, request_frame); ff_dlog_link(NULL, link, 1);
@@@ -29,8 -29,8 +29,8 @@@
  #include "libavutil/rational.h"
  
  #define LIBAVFILTER_VERSION_MAJOR  2
 -#define LIBAVFILTER_VERSION_MINOR  13
 +#define LIBAVFILTER_VERSION_MINOR 49
- #define LIBAVFILTER_VERSION_MICRO  0
+ #define LIBAVFILTER_VERSION_MICRO  1
  
  #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                 LIBAVFILTER_VERSION_MINOR, \
@@@ -110,9 -100,10 +110,9 @@@ typedef struct AVFilterBuffer 
   * per reference properties must be separated out.
   */
  typedef struct AVFilterBufferRefAudioProps {
-     int64_t channel_layout;     ///< channel layout of audio buffer
+     uint64_t channel_layout;    ///< channel layout of audio buffer
 -    int nb_samples;             ///< number of audio samples
 -    int size;                   ///< audio buffer size
 -    uint32_t sample_rate;       ///< audio buffer sample rate
 +    int nb_samples;             ///< number of audio samples per channel
 +    int sample_rate;            ///< audio buffer sample rate
      int planar;                 ///< audio buffer - planar or packed
  } AVFilterBufferRefAudioProps;
  
@@@ -640,14 -588,9 +640,14 @@@ 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 */
-     int64_t channel_layout;     ///< channel layout of current buffer (see libavutil/audioconvert.h)
+     uint64_t channel_layout;    ///< channel layout of current buffer (see libavutil/audioconvert.h)
 +#if LIBAVFILTER_VERSION_MAJOR < 3
      int64_t sample_rate;        ///< samples per second
 +#else
 +    int sample_rate;            ///< samples per second
 +#endif
 +    int planar;                 ///< agreed upon packing mode of audio buffers. true if planar.
  
      int format;                 ///< agreed upon media format
  
@@@ -755,26 -687,10 +755,25 @@@ avfilter_get_video_buffer_ref_from_arra
   *                       avfilter_unref_buffer when you are finished with it.
   */
  AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
 -                                             enum AVSampleFormat sample_fmt, int size,
 -                                             uint64_t channel_layout, int planar);
 +                                             int nb_samples);
  
  /**
-                                           int64_t channel_layout, int planar);
 + * Create an audio buffer reference wrapped around an already
 + * allocated samples buffer.
 + *
 + * @param data           pointers to the samples plane buffers
 + * @param linesize       linesize for the samples plane buffers
 + * @param perms          the required access permissions
 + * @param nb_samples     number of samples per channel
 + * @param sample_fmt     the format of each sample in the buffer to allocate
 + * @param channel_layout the channel layout of the buffer
 + * @param planar         audio data layout - planar or packed
 + */
 +AVFilterBufferRef *
 +avfilter_get_audio_buffer_ref_from_arrays(uint8_t *data[8], int linesize[8], int perms,
 +                                          int nb_samples, enum AVSampleFormat sample_fmt,
++                                          uint64_t channel_layout, int planar);
 +/**
   * Request an input frame from the filter at the other end of the link.
   *
   * @param link the input link
Simple merge
@@@ -76,50 -77,20 +76,50 @@@ static const struct 
      { 0 }
  };
  
- static int64_t get_channel_layout_single(const char *name, int name_len)
 -uint64_t av_get_channel_layout(const char *name)
++static uint64_t get_channel_layout_single(const char *name, int name_len)
  {
 -    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);
 +    int i;
 +    char *end;
 +    int64_t layout;
  
 +    for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map) - 1; i++) {
 +        if (strlen(channel_layout_map[i].name) == name_len &&
 +            !memcmp(channel_layout_map[i].name, name, name_len))
 +            return channel_layout_map[i].layout;
 +    }
 +    for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++)
 +        if (channel_names[i] &&
 +            strlen(channel_names[i]) == name_len &&
 +            !memcmp(channel_names[i], name, name_len))
 +            return (int64_t)1 << i;
 +    i = strtol(name, &end, 10);
 +    if (end - name == name_len ||
 +        (end + 1 - name == name_len && *end  == 'c'))
 +        return av_get_default_channel_layout(i);
 +    layout = strtoll(name, &end, 0);
 +    if (end - name == name_len)
 +        return FFMAX(layout, 0);
      return 0;
  }
  
- int64_t av_get_channel_layout(const char *name)
++uint64_t av_get_channel_layout(const char *name)
 +{
 +    const char *n, *e;
 +    const char *name_end = name + strlen(name);
 +    int64_t layout = 0, layout_single;
 +
 +    for (n = name; n < name_end; n = e + 1) {
 +        for (e = n; e < name_end && *e != '+' && *e != '|'; e++);
 +        layout_single = get_channel_layout_single(n, e - n);
 +        if (!layout_single)
 +            return 0;
 +        layout |= layout_single;
 +    }
 +    return layout;
 +}
 +
  void av_get_channel_layout_string(char *buf, int buf_size,
-                                   int nb_channels, int64_t channel_layout)
+                                   int nb_channels, uint64_t channel_layout)
  {
      int i;
  
  
  /**
   * Return a channel layout id that matches name, 0 if no match.
 + * 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, optionnally 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"
   */
- int64_t av_get_channel_layout(const char *name);
uint64_t av_get_channel_layout(const char *name);
  
  /**
   * Return a description of a channel layout.
@@@ -118,14 -106,9 +118,14 @@@ void av_get_channel_layout_string(char 
  /**
   * Return the number of channels in the channel layout.
   */
- int av_get_channel_layout_nb_channels(int64_t 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);
 +
 +/**
   * @}
   */
  
   */
  
  #define LIBAVUTIL_VERSION_MAJOR 51
 -#define LIBAVUTIL_VERSION_MINOR 19
 +#define LIBAVUTIL_VERSION_MINOR 29
- #define LIBAVUTIL_VERSION_MICRO  0
+ #define LIBAVUTIL_VERSION_MICRO  1
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \
Simple merge
@@@ -38,6 -38,19 +38,19 @@@ FATE_AAC += fate-aac-ap05_4
  fate-aac-ap05_48: CMD = pcm -i $(SAMPLES)/aac/ap05_48.mp4
  fate-aac-ap05_48: REF = $(SAMPLES)/aac/ap05_48.s16
  
 -FATE_AAC += $(FATE_AAC_CT:%=fate-aac-ct-%)
+ fate-aac-ct%: CMD = pcm -i $(SAMPLES)/aac/CT_DecoderCheck/$(@:fate-aac-ct-%=%)
+ fate-aac-ct%: REF = $(SAMPLES)/aac/CT_DecoderCheck/aacPlusv2.wav
+ FATE_AAC_CT = sbr_bc-ps_i.3gp  \
+               sbr_bic-ps_i.3gp \
+               sbr_i-ps_i.aac   \
+               sbr_bc-ps_bc.mp4 \
+               sbr_bc-ps_i.mp4  \
+               sbr_i-ps_bic.mp4 \
+               sbr_i-ps_i.mp4
++#FATE_AAC += $(FATE_AAC_CT:%=fate-aac-ct-%)
  FATE_TESTS += $(FATE_AAC)
  fate-aac: $(FATE_AAC)
  $(FATE_AAC): CMP = oneoff