Merge commit '56632fef65c0cb6946ed3648ded3d7b82e5c5c17'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 18 Feb 2013 11:10:46 +0000 (12:10 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 18 Feb 2013 11:10:57 +0000 (12:10 +0100)
* commit '56632fef65c0cb6946ed3648ded3d7b82e5c5c17':
  libopencore-amrnb: cosmetics: Group all encoder-related code together

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

@@@ -2,20 -2,20 +2,20 @@@
   * AMR Audio decoder stub
   * Copyright (c) 2003 the ffmpeg project
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -31,8 -31,7 +31,8 @@@ static int amr_decode_fix_avctx(AVCodec
  {
      const int is_amr_wb = 1 + (avctx->codec_id == AV_CODEC_ID_AMR_WB);
  
 -    avctx->sample_rate = 8000 * is_amr_wb;
 +    if (!avctx->sample_rate)
 +        avctx->sample_rate = 8000 * is_amr_wb;
  
      if (avctx->channels > 1) {
          av_log_missing_feature(avctx, "multi-channel AMR", 0);
  #include <opencore-amrnb/interf_dec.h>
  #include <opencore-amrnb/interf_enc.h>
  
- /* Common code for fixed and float version*/
- typedef struct AMR_bitrates {
-     int       rate;
-     enum Mode mode;
- } AMR_bitrates;
- /* Match desired bitrate */
- static int get_bitrate_mode(int bitrate, void *log_ctx)
- {
-     /* make the correspondance between bitrate and mode */
-     static const AMR_bitrates rates[] = {
-         { 4750, MR475 }, { 5150, MR515 }, {  5900, MR59  }, {  6700, MR67  },
-         { 7400, MR74 },  { 7950, MR795 }, { 10200, MR102 }, { 12200, MR122 }
-     };
-     int i, best = -1, min_diff = 0;
-     char log_buf[200];
-     for (i = 0; i < 8; i++) {
-         if (rates[i].rate == bitrate)
-             return rates[i].mode;
-         if (best < 0 || abs(rates[i].rate - bitrate) < min_diff) {
-             best     = i;
-             min_diff = abs(rates[i].rate - bitrate);
-         }
-     }
-     /* no bitrate matching exactly, log a warning */
-     snprintf(log_buf, sizeof(log_buf), "bitrate not supported: use one of ");
-     for (i = 0; i < 8; i++)
-         av_strlcatf(log_buf, sizeof(log_buf), "%.2fk, ", rates[i].rate    / 1000.f);
-     av_strlcatf(log_buf, sizeof(log_buf), "using %.2fk", rates[best].rate / 1000.f);
-     av_log(log_ctx, AV_LOG_WARNING, "%s\n", log_buf);
-     return best;
- }
  typedef struct AMRContext {
      AVClass *av_class;
      void *dec_state;
      AudioFrameQueue afq;
  } AMRContext;
  
- static const AVOption options[] = {
-     { "dtx", "Allow DTX (generate comfort noise)", offsetof(AMRContext, enc_dtx), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
-     { NULL }
- };
- static const AVClass class = {
-     "libopencore_amrnb", av_default_item_name, options, LIBAVUTIL_VERSION_INT
- };
  static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
  {
      AMRContext *s  = avctx->priv_data;
@@@ -183,11 -138,55 +139,55 @@@ AVCodec ff_libopencore_amrnb_decoder = 
      .long_name      = NULL_IF_CONFIG_SMALL("OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band)"),
  };
  
+ /* Common code for fixed and float version*/
+ typedef struct AMR_bitrates {
+     int       rate;
+     enum Mode mode;
+ } AMR_bitrates;
+ /* Match desired bitrate */
+ static int get_bitrate_mode(int bitrate, void *log_ctx)
+ {
+     /* make the correspondance between bitrate and mode */
+     static const AMR_bitrates rates[] = {
+         { 4750, MR475 }, { 5150, MR515 }, {  5900, MR59  }, {  6700, MR67  },
+         { 7400, MR74 },  { 7950, MR795 }, { 10200, MR102 }, { 12200, MR122 }
+     };
+     int i, best = -1, min_diff = 0;
+     char log_buf[200];
+     for (i = 0; i < 8; i++) {
+         if (rates[i].rate == bitrate)
+             return rates[i].mode;
+         if (best < 0 || abs(rates[i].rate - bitrate) < min_diff) {
+             best     = i;
+             min_diff = abs(rates[i].rate - bitrate);
+         }
+     }
+     /* no bitrate matching exactly, log a warning */
+     snprintf(log_buf, sizeof(log_buf), "bitrate not supported: use one of ");
+     for (i = 0; i < 8; i++)
+         av_strlcatf(log_buf, sizeof(log_buf), "%.2fk, ", rates[i].rate    / 1000.f);
+     av_strlcatf(log_buf, sizeof(log_buf), "using %.2fk", rates[best].rate / 1000.f);
+     av_log(log_ctx, AV_LOG_WARNING, "%s\n", log_buf);
+     return best;
+ }
+ static const AVOption options[] = {
+     { "dtx", "Allow DTX (generate comfort noise)", offsetof(AMRContext, enc_dtx), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
+     { NULL }
+ };
+ static const AVClass class = {
+     "libopencore_amrnb", av_default_item_name, options, LIBAVUTIL_VERSION_INT
+ };
  static av_cold int amr_nb_encode_init(AVCodecContext *avctx)
  {
      AMRContext *s = avctx->priv_data;
  
 -    if (avctx->sample_rate != 8000) {
 +    if (avctx->sample_rate != 8000 && avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
          av_log(avctx, AV_LOG_ERROR, "Only 8000Hz sample rate supported\n");
          return AVERROR(ENOSYS);
      }
@@@ -244,8 -243,10 +244,8 @@@ static int amr_nb_encode_frame(AVCodecC
          s->enc_bitrate = avctx->bit_rate;
      }
  
 -    if ((ret = ff_alloc_packet(avpkt, 32))) {
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 +    if ((ret = ff_alloc_packet2(avctx, avpkt, 32)))
          return ret;
 -    }
  
      if (frame) {
          if (frame->nb_samples < avctx->frame_size) {
      written = Encoder_Interface_Encode(s->enc_state, s->enc_mode, samples,
                                         avpkt->data, 0);
      av_dlog(avctx, "amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n",
 -            written, s->enc_mode, frame[0]);
 +            written, s->enc_mode, avpkt->data[0]);
  
      /* Get the next frame pts/duration */
      ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
@@@ -352,10 -353,6 +352,10 @@@ 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 *)frame->data[0], _good_frame);