Merge commit '197ae68e78784524a7ccf97a3c301092715305d3'
authorClément Bœsch <clement@stupeflix.com>
Wed, 29 Jun 2016 09:52:34 +0000 (11:52 +0200)
committerClément Bœsch <clement@stupeflix.com>
Wed, 29 Jun 2016 09:52:34 +0000 (11:52 +0200)
* commit '197ae68e78784524a7ccf97a3c301092715305d3':
  Drop unnecessary unary.h #includes

Merged-by: Clément Bœsch <clement@stupeflix.com>
1  2 
libavcodec/h263.c
libavcodec/ituh263enc.c
libavcodec/on2avc.c

diff --combined libavcodec/h263.c
@@@ -5,20 -5,20 +5,20 @@@
   * Copyright (c) 2001 Juan J. Sierralta P
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
@@@ -35,7 -35,6 +35,6 @@@
  #include "h263data.h"
  #include "mathops.h"
  #include "mpegutils.h"
- #include "unary.h"
  #include "flv.h"
  #include "mpeg4video.h"
  
diff --combined libavcodec/ituh263enc.c
@@@ -5,20 -5,20 +5,20 @@@
   * Copyright (c) 2001 Juan J. Sierralta P
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
@@@ -37,7 -37,6 +37,6 @@@
  #include "h263data.h"
  #include "mathops.h"
  #include "mpegutils.h"
- #include "unary.h"
  #include "flv.h"
  #include "mpeg4video.h"
  #include "internal.h"
@@@ -45,7 -44,7 +44,7 @@@
  /**
   * Table of number of bits a motion vector component needs.
   */
 -static uint8_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
 +static uint8_t mv_penalty[MAX_FCODE+1][MAX_DMV*2+1];
  
  /**
   * Minimal fcode that a motion vector component would need.
@@@ -90,7 -89,7 +89,7 @@@ static const uint8_t wrong_run[102] = 
  av_const int ff_h263_aspect_to_info(AVRational aspect){
      int i;
  
 -    if(aspect.num==0) aspect= (AVRational){1,1};
 +    if(aspect.num==0 || aspect.den==0) aspect= (AVRational){1,1};
  
      for(i=1; i<6; i++){
          if(av_cmp_q(ff_h263_pixel_aspect[i], aspect) == 0){
@@@ -228,11 -227,19 +227,11 @@@ void ff_h263_encode_picture_header(Mpeg
      if(s->h263_slice_structured){
          put_bits(&s->pb, 1, 1);
  
 -        assert(s->mb_x == 0 && s->mb_y == 0);
 +        av_assert1(s->mb_x == 0 && s->mb_y == 0);
          ff_h263_encode_mba(s);
  
          put_bits(&s->pb, 1, 1);
      }
 -
 -    if(s->h263_aic){
 -         s->y_dc_scale_table=
 -         s->c_dc_scale_table= ff_aic_dc_scale_table;
 -    }else{
 -        s->y_dc_scale_table=
 -        s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
 -    }
  }
  
  /**
@@@ -387,7 -394,7 +386,7 @@@ static void h263_encode_block(MpegEncCo
                  put_bits(&s->pb, 1, last);
                  put_bits(&s->pb, 6, run);
  
 -                assert(slevel != 0);
 +                av_assert2(slevel != 0);
  
                  if(level < 128)
                      put_sbits(&s->pb, 8, slevel);
  }
  
  /* Encode MV differences on H.263+ with Unrestricted MV mode */
 -static void h263p_encode_umotion(MpegEncContext * s, int val)
 +static void h263p_encode_umotion(PutBitContext *pb, int val)
  {
      short sval = 0;
      short i = 0;
      int tcode;
  
      if ( val == 0)
 -        put_bits(&s->pb, 1, 1);
 +        put_bits(pb, 1, 1);
      else if (val == 1)
 -        put_bits(&s->pb, 3, 0);
 +        put_bits(pb, 3, 0);
      else if (val == -1)
 -        put_bits(&s->pb, 3, 2);
 +        put_bits(pb, 3, 2);
      else {
  
          sval = ((val < 0) ? (short)(-val):(short)val);
              i--;
          }
          code = ((code << 1) | (val < 0)) << 1;
 -        put_bits(&s->pb, (2*n_bits)+1, code);
 +        put_bits(pb, (2*n_bits)+1, code);
      }
  }
  
@@@ -498,8 -505,8 +497,8 @@@ void ff_h263_encode_mb(MpegEncContext 
                                                  motion_y - pred_y, 1);
              }
              else {
 -                h263p_encode_umotion(s, motion_x - pred_x);
 -                h263p_encode_umotion(s, motion_y - pred_y);
 +                h263p_encode_umotion(&s->pb, motion_x - pred_x);
 +                h263p_encode_umotion(&s->pb, motion_y - pred_y);
                  if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
                      /* To prevent Start Code emulation */
                      put_bits(&s->pb,1,1);
                                                      motion_y - pred_y, 1);
                  }
                  else {
 -                    h263p_encode_umotion(s, motion_x - pred_x);
 -                    h263p_encode_umotion(s, motion_y - pred_y);
 +                    h263p_encode_umotion(&s->pb, motion_x - pred_x);
 +                    h263p_encode_umotion(&s->pb, motion_y - pred_y);
                      if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
                          /* To prevent Start Code emulation */
                          put_bits(&s->pb,1,1);
              s->mv_bits+= get_bits_diff(s);
          }
      } else {
 -        assert(s->mb_intra);
 +        av_assert2(s->mb_intra);
  
          cbp = 0;
          if (s->h263_aic) {
      }
  }
  
 -void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code)
 +void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code)
  {
      int range, bit_size, sign, code, bits;
  
      if (val == 0) {
          /* zero vector */
          code = 0;
 -        put_bits(&s->pb, ff_mvtab[code][1], ff_mvtab[code][0]);
 +        put_bits(pb, ff_mvtab[code][1], ff_mvtab[code][0]);
      } else {
          bit_size = f_code - 1;
          range = 1 << bit_size;
          code = (val >> bit_size) + 1;
          bits = val & (range - 1);
  
 -        put_bits(&s->pb, ff_mvtab[code][1] + 1, (ff_mvtab[code][0] << 1) | sign);
 +        put_bits(pb, ff_mvtab[code][1] + 1, (ff_mvtab[code][0] << 1) | sign);
          if (bit_size > 0) {
 -            put_bits(&s->pb, bit_size, bits);
 +            put_bits(pb, bit_size, bits);
          }
      }
  }
@@@ -678,7 -685,7 +677,7 @@@ static av_cold void init_mv_penalty_and
      int mv;
  
      for(f_code=1; f_code<=MAX_FCODE; f_code++){
 -        for(mv=-MAX_MV; mv<=MAX_MV; mv++){
 +        for(mv=-MAX_DMV; mv<=MAX_DMV; mv++){
              int len;
  
              if(mv==0) len= ff_mvtab[0][1];
                  }
              }
  
 -            mv_penalty[f_code][mv+MAX_MV]= len;
 +            mv_penalty[f_code][mv+MAX_DMV]= len;
          }
      }
  
@@@ -719,8 -726,8 +718,8 @@@ static av_cold void init_uni_h263_rl_ta
  {
      int slevel, run, last;
  
 -    assert(MAX_LEVEL >= 64);
 -    assert(MAX_RUN   >= 63);
 +    av_assert0(MAX_LEVEL >= 64);
 +    av_assert0(MAX_RUN   >= 63);
  
      for(slevel=-64; slevel<64; slevel++){
          if(slevel==0) continue;
@@@ -809,15 -816,12 +808,15 @@@ av_cold void ff_h263_encode_init(MpegEn
              s->min_qcoeff= -127;
              s->max_qcoeff=  127;
          }
 -        s->y_dc_scale_table=
 -        s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
          break;
      default: //nothing needed - default table already set in mpegvideo.c
          s->min_qcoeff= -127;
          s->max_qcoeff=  127;
 +    }
 +    if(s->h263_aic){
 +         s->y_dc_scale_table=
 +         s->c_dc_scale_table= ff_aic_dc_scale_table;
 +    }else{
          s->y_dc_scale_table=
          s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
      }
diff --combined libavcodec/on2avc.c
@@@ -3,25 -3,24 +3,25 @@@
   *
   * Copyright (c) 2013 Konstantin Shishkov
   *
 - * 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
   */
  
  #include "libavutil/channel_layout.h"
 +#include "libavutil/ffmath.h"
  #include "libavutil/float_dsp.h"
  #include "avcodec.h"
  #include "bytestream.h"
@@@ -29,7 -28,6 +29,6 @@@
  #include "get_bits.h"
  #include "golomb.h"
  #include "internal.h"
- #include "unary.h"
  
  #include "on2avcdata.h"
  
@@@ -48,7 -46,7 +47,7 @@@ enum WindowTypes 
  
  typedef struct On2AVCContext {
      AVCodecContext *avctx;
 -    AVFloatDSPContext fdsp;
 +    AVFloatDSPContext *fdsp;
      FFTContext mdct, mdct_half, mdct_small;
      FFTContext fft128, fft256, fft512, fft1024;
      void (*wtf)(struct On2AVCContext *ctx, float *out, float *in, int size);
@@@ -120,12 -118,12 +119,12 @@@ static int on2avc_decode_band_types(On2
          run_len   = 1;
          do {
              run = get_bits(gb, bits_per_sect);
 +            if (run > num_bands - band - run_len) {
 +                av_log(c->avctx, AV_LOG_ERROR, "Invalid band type run\n");
 +                return AVERROR_INVALIDDATA;
 +            }
              run_len += run;
          } while (run == esc_val);
 -        if (band + run_len > num_bands) {
 -            av_log(c->avctx, AV_LOG_ERROR, "Invalid band type run\n");
 -            return AVERROR_INVALIDDATA;
 -        }
          for (i = band; i < band + run_len; i++) {
              c->band_type[i]    = band_type;
              c->band_run_end[i] = band + run_len;
@@@ -321,7 -319,7 +320,7 @@@ static void zero_head_and_tail(float *s
  }
  
  static void pretwiddle(float *src, float *dst, int dst_len, int tab_step,
 -                       int step, int order0, int order1, const double **tabs)
 +                       int step, int order0, int order1, const double * const *tabs)
  {
      float *src2, *out;
      const double *tab;
  
  static void twiddle(float *src1, float *src2, int src2_len,
                      const double *tab, int tab_len, int step,
 -                    int order0, int order1, const double **tabs)
 +                    int order0, int order1, const double * const *tabs)
  {
      int steps;
      int mask;
@@@ -722,7 -720,7 +721,7 @@@ static int on2avc_reconstruct_stereo(On
          }
  
          memcpy(out, saved, 448 * sizeof(float));
 -        c->fdsp.vector_fmul_window(wout, saved + 448, buf, c->short_win, 64);
 +        c->fdsp->vector_fmul_window(wout, saved + 448, buf, c->short_win, 64);
          memcpy(wout + 128,  buf + 64,         448 * sizeof(float));
          memcpy(saved,       buf + 512,        448 * sizeof(float));
          memcpy(saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
@@@ -758,20 -756,20 +757,20 @@@ static int on2avc_reconstruct_channel(O
           c->prev_window_type == WINDOW_TYPE_LONG_STOP) &&
          (c->window_type == WINDOW_TYPE_LONG ||
           c->window_type == WINDOW_TYPE_LONG_START)) {
 -        c->fdsp.vector_fmul_window(out, saved, buf, c->long_win, 512);
 +        c->fdsp->vector_fmul_window(out, saved, buf, c->long_win, 512);
      } else {
          float *wout = out + 448;
          memcpy(out, saved, 448 * sizeof(float));
  
          if (c->window_type == WINDOW_TYPE_8SHORT) {
 -            c->fdsp.vector_fmul_window(wout + 0*128, saved + 448,      buf + 0*128, c->short_win, 64);
 -            c->fdsp.vector_fmul_window(wout + 1*128, buf + 0*128 + 64, buf + 1*128, c->short_win, 64);
 -            c->fdsp.vector_fmul_window(wout + 2*128, buf + 1*128 + 64, buf + 2*128, c->short_win, 64);
 -            c->fdsp.vector_fmul_window(wout + 3*128, buf + 2*128 + 64, buf + 3*128, c->short_win, 64);
 -            c->fdsp.vector_fmul_window(temp,         buf + 3*128 + 64, buf + 4*128, c->short_win, 64);
 +            c->fdsp->vector_fmul_window(wout + 0*128, saved + 448,      buf + 0*128, c->short_win, 64);
 +            c->fdsp->vector_fmul_window(wout + 1*128, buf + 0*128 + 64, buf + 1*128, c->short_win, 64);
 +            c->fdsp->vector_fmul_window(wout + 2*128, buf + 1*128 + 64, buf + 2*128, c->short_win, 64);
 +            c->fdsp->vector_fmul_window(wout + 3*128, buf + 2*128 + 64, buf + 3*128, c->short_win, 64);
 +            c->fdsp->vector_fmul_window(temp,         buf + 3*128 + 64, buf + 4*128, c->short_win, 64);
              memcpy(wout + 4*128, temp, 64 * sizeof(float));
          } else {
 -            c->fdsp.vector_fmul_window(wout, saved + 448, buf, c->short_win, 64);
 +            c->fdsp->vector_fmul_window(wout, saved + 448, buf, c->short_win, 64);
              memcpy(wout + 128, buf + 64, 448 * sizeof(float));
          }
      }
      switch (c->window_type) {
      case WINDOW_TYPE_8SHORT:
          memcpy(saved,       temp + 64,         64 * sizeof(float));
 -        c->fdsp.vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, c->short_win, 64);
 -        c->fdsp.vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, c->short_win, 64);
 -        c->fdsp.vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, c->short_win, 64);
 +        c->fdsp->vector_fmul_window(saved + 64,  buf + 4*128 + 64, buf + 5*128, c->short_win, 64);
 +        c->fdsp->vector_fmul_window(saved + 192, buf + 5*128 + 64, buf + 6*128, c->short_win, 64);
 +        c->fdsp->vector_fmul_window(saved + 320, buf + 6*128 + 64, buf + 7*128, c->short_win, 64);
          memcpy(saved + 448, buf + 7*128 + 64,  64 * sizeof(float));
          break;
      case WINDOW_TYPE_LONG_START:
@@@ -803,9 -801,7 +802,9 @@@ static int on2avc_decode_subframe(On2AV
      GetBitContext gb;
      int i, ret;
  
 -    init_get_bits(&gb, buf, buf_size * 8);
 +    if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0)
 +        return ret;
 +
      if (get_bits1(&gb)) {
          av_log(c->avctx, AV_LOG_ERROR, "enh bit set\n");
          return AVERROR_INVALIDDATA;
@@@ -856,8 -852,10 +855,8 @@@ static int on2avc_decode_frame(AVCodecC
      if (c->is_av500) {
          /* get output buffer */
          frame->nb_samples = ON2AVC_SUBFRAME_SIZE;
 -        if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
 -            av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 +        if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
              return ret;
 -        }
  
          if ((ret = on2avc_decode_subframe(c, buf, buf_size, frame, 0)) < 0)
              return ret;
  
          /* get output buffer */
          frame->nb_samples = ON2AVC_SUBFRAME_SIZE * num_frames;
 -        if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
 -            av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 +        if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
              return ret;
 -        }
  
          audio_off = 0;
          bytestream2_init(&gb, buf, buf_size);
@@@ -914,11 -914,6 +913,11 @@@ static av_cold int on2avc_decode_init(A
      On2AVCContext *c = avctx->priv_data;
      int i;
  
 +    if (avctx->channels > 2U) {
 +        avpriv_request_sample(avctx, "Decoding more than 2 channels");
 +        return AVERROR_PATCHWELCOME;
 +    }
 +
      c->avctx = avctx;
      avctx->sample_fmt     = AV_SAMPLE_FMT_FLTP;
      avctx->channel_layout = (avctx->channels == 2) ? AV_CH_LAYOUT_STEREO
          av_log(avctx, AV_LOG_ERROR, "0x500 version should be mono\n");
          return AVERROR_INVALIDDATA;
      }
 -    if (avctx->channels > 2) {
 -        av_log(avctx, AV_LOG_ERROR, "Only 1 or 2 channels are supported.\n");
 -        return AVERROR(EINVAL);
 -    }
 +
      if (avctx->channels == 2)
          av_log(avctx, AV_LOG_WARNING,
                 "Stereo mode support is not good, patch is welcome\n");
  
 +    // We add -0.01 before ceil() to avoid any values to fall at exactly the
 +    // midpoint between different ceil values. The results are identical to
 +    // using pow(10, i / 10.0) without such bias
      for (i = 0; i < 20; i++)
 -        c->scale_tab[i] = ceil(pow(10.0, i * 0.1) * 16) / 32;
 +        c->scale_tab[i] = ceil(ff_exp10(i * 0.1) * 16 - 0.01) / 32;
      for (; i < 128; i++)
 -        c->scale_tab[i] = ceil(pow(10.0, i * 0.1) * 0.5);
 +        c->scale_tab[i] = ceil(ff_exp10(i * 0.1) * 0.5 - 0.01);
  
      if (avctx->sample_rate < 32000 || avctx->channels == 1)
          memcpy(c->long_win, ff_on2avc_window_long_24000,
      ff_fft_init(&c->fft256,  7, 0);
      ff_fft_init(&c->fft512,  8, 1);
      ff_fft_init(&c->fft1024, 9, 1);
 -    avpriv_float_dsp_init(&c->fdsp, avctx->flags & AV_CODEC_FLAG_BITEXACT);
 +    c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
 +    if (!c->fdsp)
 +        return AVERROR(ENOMEM);
  
      if (init_vlc(&c->scale_diff, 9, ON2AVC_SCALE_DIFFS,
                   ff_on2avc_scale_diff_bits,  1, 1,
                   ff_on2avc_scale_diff_codes, 4, 4, 0)) {
 -        av_log(avctx, AV_LOG_ERROR, "Cannot init VLC\n");
 -        return AVERROR(ENOMEM);
 +        goto vlc_fail;
      }
      for (i = 1; i < 9; i++) {
          int idx = i - 1;
                                 ff_on2avc_quad_cb_bits[idx],  1, 1,
                                 ff_on2avc_quad_cb_codes[idx], 4, 4,
                                 ff_on2avc_quad_cb_syms[idx],  2, 2, 0)) {
 -            av_log(avctx, AV_LOG_ERROR, "Cannot init VLC\n");
 -            on2avc_free_vlcs(c);
 -            return AVERROR(ENOMEM);
 +            goto vlc_fail;
          }
      }
      for (i = 9; i < 16; i++) {
                                 ff_on2avc_pair_cb_bits[idx],  1, 1,
                                 ff_on2avc_pair_cb_codes[idx], 2, 2,
                                 ff_on2avc_pair_cb_syms[idx],  2, 2, 0)) {
 -            av_log(avctx, AV_LOG_ERROR, "Cannot init VLC\n");
 -            on2avc_free_vlcs(c);
 -            return AVERROR(ENOMEM);
 +            goto vlc_fail;
          }
      }
  
      return 0;
 +vlc_fail:
 +    av_log(avctx, AV_LOG_ERROR, "Cannot init VLC\n");
 +    on2avc_free_vlcs(c);
 +    av_freep(&c->fdsp);
 +    return AVERROR(ENOMEM);
  }
  
  static av_cold int on2avc_decode_close(AVCodecContext *avctx)
      ff_fft_end(&c->fft512);
      ff_fft_end(&c->fft1024);
  
 +    av_freep(&c->fdsp);
 +
      on2avc_free_vlcs(c);
  
      return 0;