Merge commit '86bfcfcf2364bc837b7bb582c66a8a15a332414f'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Feb 2013 11:14:46 +0000 (12:14 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Feb 2013 11:14:46 +0000 (12:14 +0100)
* commit '86bfcfcf2364bc837b7bb582c66a8a15a332414f':
  mace: decode directly to the user-provided AVFrame
  libspeex: decode directly to the user-provided AVFrame
  libopus: decode directly to the user-provided AVFrame
  libopencore-amr: decode directly to the user-provided AVFrame
  libgsm: decode directly to the user-provided AVFrame

Conflicts:
libavcodec/libopusdec.c
libavcodec/mace.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/libgsm.c
libavcodec/libopencore-amr.c
libavcodec/libopusdec.c
libavcodec/libspeexdec.c
libavcodec/mace.c

@@@ -149,10 -146,8 +149,9 @@@ AVCodec ff_libgsm_ms_encoder = 
                                                       AV_SAMPLE_FMT_NONE },
      .long_name      = NULL_IF_CONFIG_SMALL("libgsm GSM Microsoft variant"),
  };
 +#endif
  
  typedef struct LibGSMDecodeContext {
-     AVFrame frame;
      struct gsm_state *state;
  } LibGSMDecodeContext;
  
@@@ -359,15 -353,10 +352,14 @@@ static int amr_wb_decode_frame(AVCodecC
                 buf_size, packet_size + 1);
          return AVERROR_INVALIDDATA;
      }
 +    if (!packet_size) {
 +        av_log(avctx, AV_LOG_ERROR, "amr packet_size invalid\n");
 +        return AVERROR_INVALIDDATA;
 +    }
  
-     D_IF_decode(s->state, buf, (short *)s->frame.data[0], _good_frame);
+     D_IF_decode(s->state, buf, (short *)frame->data[0], _good_frame);
  
-     *got_frame_ptr   = 1;
-     *(AVFrame *)data = s->frame;
+     *got_frame_ptr = 1;
  
      return packet_size;
  }
  
  struct libopus_context {
      OpusMSDecoder *dec;
-     AVFrame frame;
 +    int pre_skip;
 +#ifndef OPUS_SET_GAIN
 +    union { int i; double d; } gain;
 +#endif
  };
  
  #define OPUS_HEAD_SIZE 19
@@@ -99,20 -92,9 +98,19 @@@ static av_cold int libopus_decode_init(
      if (ret != OPUS_OK)
          av_log(avc, AV_LOG_WARNING, "Failed to set gain: %s\n",
                 opus_strerror(ret));
 +#else
 +    {
 +        double gain_lin = pow(10, gain_db / (20.0 * 256));
 +        if (avc->sample_fmt == AV_SAMPLE_FMT_FLT)
 +            opus->gain.d = gain_lin;
 +        else
 +            opus->gain.i = FFMIN(gain_lin * 65536, INT_MAX);
 +    }
 +#endif
  
 +    avc->internal->skip_samples = opus->pre_skip;
      avc->delay = 3840;  /* Decoder delay (in samples) at 48kHz */
-     avcodec_get_frame_defaults(&opus->frame);
-     avc->coded_frame = &opus->frame;
      return 0;
  }
  
@@@ -154,24 -137,9 +153,24 @@@ static int libopus_decode(AVCodecContex
          return ff_opus_error_to_averror(nb_samples);
      }
  
-             float *pcm = (float *)opus->frame.data[0];
 +#ifndef OPUS_SET_GAIN
 +    {
 +        int i = avc->channels * nb_samples;
 +        if (avc->sample_fmt == AV_SAMPLE_FMT_FLT) {
-             int16_t *pcm = (int16_t *)opus->frame.data[0];
++            float *pcm = (float *)frame->data[0];
 +            for (; i > 0; i--, pcm++)
 +                *pcm = av_clipf(*pcm * opus->gain.d, -1, 1);
 +        } else {
-     opus->frame.nb_samples = nb_samples;
-     *(AVFrame *)frame = opus->frame;
-     *got_frame_ptr = 1;
++            int16_t *pcm = (int16_t *)frame->data[0];
 +            for (; i > 0; i--, pcm++)
 +                *pcm = av_clip_int16(((int64_t)opus->gain.i * *pcm) >> 16);
 +        }
 +    }
 +#endif
 +
+     frame->nb_samples = nb_samples;
+     *got_frame_ptr    = 1;
      return pkt->size;
  }
  
Simple merge
@@@ -227,9 -226,7 +226,7 @@@ static void chomp6(ChannelData *chd, in
  
  static av_cold int mace_decode_init(AVCodecContext * avctx)
  {
-     MACEContext *ctx = avctx->priv_data;
 -    if (avctx->channels > 2)
 +    if (avctx->channels > 2 || avctx->channels <= 0)
          return -1;
      avctx->sample_fmt = AV_SAMPLE_FMT_S16P;