Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 29 Oct 2011 23:33:41 +0000 (01:33 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 29 Oct 2011 23:33:41 +0000 (01:33 +0200)
* qatar/master: (51 commits)
  cin audio: use sign_extend() instead of casting to int16_t
  cin audio: restructure decoding loop to avoid a separate counter variable
  cin audio: use local variable for delta value
  cin audio: remove unneeded cast from void*
  cin audio: validate the channel count
  cin audio: remove unneeded AVCodecContext pointer from CinAudioContext
  dsicin: fix several audio-related fields in the CIN demuxer
  flacdec: use av_get_bytes_per_sample() to get sample size
  dca: handle errors from dca_decode_block()
  dca: return error if the frame header is invalid
  dca: return proper error codes instead of -1
  utvideo: handle empty Huffman trees
  binkaudio: change short to int16_t
  binkaudio: only decode one block at a time.
  binkaudio: store interleaved overlap samples in BinkAudioContext.
  binkaudio: pre-calculate quantization factors
  binkaudio: add some buffer overread checks.
  atrac3: support float or int16 output using request_sample_fmt
  atrac3: add CODEC_CAP_SUBFRAMES capability
  atrac3: return appropriate error codes instead of -1
  ...

Conflicts:
libavcodec/atrac1.c
libavcodec/dca.c
libavformat/mov.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
13 files changed:
1  2 
libavcodec/atrac1.c
libavcodec/atrac3.c
libavcodec/binkaudio.c
libavcodec/cook.c
libavcodec/dca.c
libavcodec/dsicinav.c
libavcodec/flacdec.c
libavcodec/h264.c
libavcodec/vp3.c
libavcodec/vp8.c
libavformat/avformat.h
libavformat/dsicin.c
libavformat/utils.c

@@@ -282,8 -284,15 +284,15 @@@ static int atrac1_decode_frame(AVCodecC
  
  
      if (buf_size < 212 * q->channels) {
-         av_log(avctx, AV_LOG_ERROR,"Not enought data to decode!\n");
-         return -1;
 -        av_log(q,AV_LOG_ERROR,"Not enough data to decode!\n");
++        av_log(avctx,AV_LOG_ERROR,"Not enough data to decode!\n");
+         return AVERROR_INVALIDDATA;
+     }
+     out_size = q->channels * AT1_SU_SAMPLES *
+                av_get_bytes_per_sample(avctx->sample_fmt);
+     if (*data_size < out_size) {
+         av_log(avctx, AV_LOG_ERROR, "Output buffer is too small\n");
+         return AVERROR(EINVAL);
      }
  
      for (ch = 0; ch < q->channels; ch++) {
Simple merge
Simple merge
Simple merge
@@@ -1055,10 -1055,9 +1055,10 @@@ static int decode_blockcode(int code, i
          return 0;
      else {
          av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n");
-         return -1;
+         return AVERROR_INVALIDDATA;
      }
  }
 +#endif
  
  static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 };
  static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 };
@@@ -1806,19 -1811,25 +1812,19 @@@ static int dca_decode_frame(AVCodecCont
              s->output = DCA_STEREO;
              avctx->channel_layout = AV_CH_LAYOUT_STEREO;
          }
 +        else if (avctx->request_channel_layout & AV_CH_LAYOUT_NATIVE) {
 +            static const int8_t dca_channel_order_native[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
 +            s->channel_order_tab = dca_channel_order_native;
 +        }
      } else {
          av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n",s->amode);
-         return -1;
+         return AVERROR_INVALIDDATA;
      }
  
 -
 -    /* There is nothing that prevents a dts frame to change channel configuration
 -       but Libav doesn't support that so only set the channels if it is previously
 -       unset. Ideally during the first probe for channels the crc should be checked
 -       and only set avctx->channels when the crc is ok. Right now the decoder could
 -       set the channels based on a broken first frame.*/
 -    if (s->is_channels_set == 0) {
 -        s->is_channels_set = 1;
 -        avctx->channels = channels;
 -    }
      if (avctx->channels != channels) {
 -        av_log(avctx, AV_LOG_ERROR, "DCA decoder does not support number of "
 -               "channels changing in stream. Skipping frame.\n");
 -        return AVERROR_PATCHWELCOME;
 +        if (avctx->channels)
 +            av_log(avctx, AV_LOG_INFO, "Number of channels changed in DCA decoder (%d -> %d)\n", avctx->channels, channels);
 +        avctx->channels = channels;
      }
  
      out_size = 256 / 8 * s->sample_blocks * channels *
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -674,15 -655,10 +674,16 @@@ typedef struct AVStream 
          int64_t last_dts;
          int64_t duration_gcd;
          int duration_count;
 -        double duration_error[MAX_STD_TIMEBASES];
 +        double duration_error[2][2][MAX_STD_TIMEBASES];
          int64_t codec_info_duration;
+         int nb_decoded_frames;
      } *info;
 +
 +    /**
 +     * flag to indicate that probing is requested
 +     * NOT PART OF PUBLIC API
 +     */
 +    int request_probe;
  #if !FF_API_REORDER_PRIVATE
      const uint8_t *cur_ptr;
      int cur_len;
Simple merge
Simple merge