Merge commit '41578f70cf8aec8e7565fba1ca7e07f3dc46c3d2'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 30 Jun 2013 09:22:15 +0000 (11:22 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 30 Jun 2013 09:23:43 +0000 (11:23 +0200)
* commit '41578f70cf8aec8e7565fba1ca7e07f3dc46c3d2':
  lpc: use function pointers, in preparation for asm

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/lpc.c
libavcodec/version.h
libavutil/lls.c
libavutil/lls.h
libavutil/version.h

diff --combined libavcodec/lpc.c
@@@ -2,20 -2,20 +2,20 @@@
   * LPC utility code
   * Copyright (c) 2006  Justin Ruggles <justin.ruggles@gmail.com>
   *
 - * 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
   */
  
@@@ -24,7 -24,6 +24,7 @@@
  
  #define LPC_USE_DOUBLE
  #include "lpc.h"
 +#include "libavutil/avassert.h"
  
  
  /**
@@@ -39,7 -38,7 +39,7 @@@ static void lpc_apply_welch_window_c(co
  
      /* The optimization in commit fa4ed8c does not support odd len.
       * If someone wants odd len extend that change. */
 -    assert(!(len & 1));
 +    av_assert2(!(len & 1));
  
      n2 = (len >> 1);
      c = 2.0 / (len - 1.0);
@@@ -180,7 -179,7 +180,7 @@@ int ff_lpc_calc_coefs(LPCContext *s
      int i, j, pass;
      int opt_order;
  
 -    assert(max_order >= MIN_LPC_ORDER && max_order <= MAX_LPC_ORDER &&
 +    av_assert2(max_order >= MIN_LPC_ORDER && max_order <= MAX_LPC_ORDER &&
             lpc_type > FF_LPC_TYPE_FIXED);
  
      /* reinit LPC context if parameters have changed */
          LLSModel m[2];
          double var[MAX_LPC_ORDER+1], av_uninit(weight);
  
 +        if(lpc_passes <= 0)
 +            lpc_passes = 2;
 +
          for(pass=0; pass<lpc_passes; pass++){
              avpriv_init_lls(&m[pass&1], max_order);
  
  
                  if(pass){
                      double eval, inv, rinv;
-                     eval= avpriv_evaluate_lls(&m[(pass-1)&1], var+1, max_order-1);
+                     eval= m[(pass-1)&1].evaluate_lls(&m[(pass-1)&1], var+1, max_order-1);
                      eval= (512>>pass) + fabs(eval - var[0]);
                      inv = 1/eval;
                      rinv = sqrt(inv);
                  }else
                      weight++;
  
-                 avpriv_update_lls(&m[pass&1], var);
+                 m[pass&1].update_lls(&m[pass&1], var);
              }
              avpriv_solve_lls(&m[pass&1], 0.001, 0);
          }
          }
          for(i=max_order-1; i>0; i--)
              ref[i] = ref[i-1] - ref[i];
 -    }
 +    } else
 +        av_assert0(0);
      opt_order = max_order;
  
      if(omethod == ORDER_METHOD_EST) {
diff --combined libavcodec/version.h
@@@ -1,19 -1,19 +1,19 @@@
  /*
   *
 - * 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
   */
  
   * Libavcodec version macros.
   */
  
 +#include "libavutil/avutil.h"
 +
  #define LIBAVCODEC_VERSION_MAJOR 55
 -#define LIBAVCODEC_VERSION_MINOR 10
 -#define LIBAVCODEC_VERSION_MICRO  0
 +#define LIBAVCODEC_VERSION_MINOR  17
- #define LIBAVCODEC_VERSION_MICRO 100
++#define LIBAVCODEC_VERSION_MICRO 101
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
  #ifndef FF_API_REQUEST_CHANNELS
  #define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 56)
  #endif
 +#ifndef FF_API_ALLOC_CONTEXT
 +#define FF_API_ALLOC_CONTEXT    (LIBAVCODEC_VERSION_MAJOR < 55)
 +#endif
 +#ifndef FF_API_AVCODEC_OPEN
 +#define FF_API_AVCODEC_OPEN     (LIBAVCODEC_VERSION_MAJOR < 55)
 +#endif
 +#ifndef FF_API_OLD_DECODE_AUDIO
 +#define FF_API_OLD_DECODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_OLD_TIMECODE
 +#define FF_API_OLD_TIMECODE (LIBAVCODEC_VERSION_MAJOR < 55)
 +#endif
 +
 +#ifndef FF_API_OLD_ENCODE_AUDIO
 +#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_OLD_ENCODE_VIDEO
 +#define FF_API_OLD_ENCODE_VIDEO (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_CODEC_ID
 +#define FF_API_CODEC_ID          (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
 +#ifndef FF_API_AVCODEC_RESAMPLE
 +#define FF_API_AVCODEC_RESAMPLE  (LIBAVCODEC_VERSION_MAJOR < 56)
 +#endif
  #ifndef FF_API_DEINTERLACE
  #define FF_API_DEINTERLACE       (LIBAVCODEC_VERSION_MAJOR < 56)
  #endif
diff --combined libavutil/lls.c
@@@ -3,20 -3,20 +3,20 @@@
   *
   * Copyright (c) 2006 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
   */
  
  #include "version.h"
  #include "lls.h"
  
- av_cold void avpriv_init_lls(LLSModel *m, int indep_count)
- {
-     memset(m, 0, sizeof(LLSModel));
-     m->indep_count = indep_count;
- }
- void avpriv_update_lls(LLSModel *m, double *var)
+ static void update_lls(LLSModel *m, double *var)
  {
      int i, j;
  
@@@ -106,7 -100,7 +100,7 @@@ void avpriv_solve_lls(LLSModel *m, doub
      }
  }
  
double avpriv_evaluate_lls(LLSModel *m, double *param, int order)
static double evaluate_lls(LLSModel *m, double *param, int order)
  {
      int i;
      double out = 0;
      return out;
  }
  
+ av_cold void avpriv_init_lls(LLSModel *m, int indep_count)
+ {
+     memset(m, 0, sizeof(LLSModel));
+     m->indep_count = indep_count;
+     m->update_lls = update_lls;
+     m->evaluate_lls = evaluate_lls;
+ }
  #if FF_API_LLS_PRIVATE
  av_cold void av_init_lls(LLSModel *m, int indep_count)
  {
  }
  void av_update_lls(LLSModel *m, double *param, double decay)
  {
-     avpriv_update_lls(m, param);
+     m->update_lls(m, param);
  }
  void av_solve_lls(LLSModel *m, double threshold, int min_order)
  {
  }
  double av_evaluate_lls(LLSModel *m, double *param, int order)
  {
-     return avpriv_evaluate_lls(m, param, order);
+     return m->evaluate_lls(m, param, order);
  }
  #endif /* FF_API_LLS_PRIVATE */
  
@@@ -159,10 -161,10 +161,10 @@@ int main(void
          var[1] = var[0] + av_lfg_get(&lfg) / (double) UINT_MAX - 0.5;
          var[2] = var[1] + av_lfg_get(&lfg) / (double) UINT_MAX - 0.5;
          var[3] = var[2] + av_lfg_get(&lfg) / (double) UINT_MAX - 0.5;
-         avpriv_update_lls(&m, var);
+         m.update_lls(&m, var);
          avpriv_solve_lls(&m, 0.001, 0);
          for (order = 0; order < 3; order++) {
-             eval = avpriv_evaluate_lls(&m, var + 1, order);
+             eval = m.evaluate_lls(&m, var + 1, order);
              printf("real:%9f order:%d pred:%9f var:%f coeffs:%f %9f %9f\n",
                     var[0], order, eval, sqrt(m.variance[order] / (i + 1)),
                     m.coeff[order][0], m.coeff[order][1],
diff --combined libavutil/lls.h
@@@ -3,20 -3,20 +3,20 @@@
   *
   * Copyright (c) 2006 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,12 -37,23 +37,23 @@@ typedef struct LLSModel 
      double coeff[MAX_VARS][MAX_VARS];
      double variance[MAX_VARS];
      int indep_count;
+     /**
+      * Take the outer-product of var[] with itself, and add to the covariance matrix.
+      * @param m this context
+      * @param var training samples, starting with the value to be predicted
+      */
+     void (*update_lls)(struct LLSModel *m, double *var);
+     /**
+      * Inner product of var[] and the LPC coefs.
+      * @param m this context
+      * @param var training samples, excluding the value to be predicted
+      * @param order lpc order
+      */
+     double (*evaluate_lls)(struct LLSModel *m, double *var, int order);
  } LLSModel;
  
  void avpriv_init_lls(LLSModel *m, int indep_count);
- void avpriv_update_lls(LLSModel *m, double *param);
  void avpriv_solve_lls(LLSModel *m, double threshold, unsigned short min_order);
- double avpriv_evaluate_lls(LLSModel *m, double *param, int order);
  
  #if FF_API_LLS_PRIVATE
  void av_init_lls(LLSModel *m, int indep_count);
diff --combined libavutil/version.h
@@@ -1,63 -1,25 +1,63 @@@
  /*
 - * This file is part of Libav.
 + * copyright (c) 2003 Fabrice Bellard
   *
 - * Libav is free software; you can redistribute it and/or
 + * This file is part of FFmpeg.
 + *
 + * 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
   */
  
  #ifndef AVUTIL_VERSION_H
  #define AVUTIL_VERSION_H
  
 -#include "avutil.h"
 +/**
 + * @defgroup preproc_misc Preprocessor String Macros
 + *
 + * String manipulation macros
 + *
 + * @{
 + */
 +
 +#define AV_STRINGIFY(s)         AV_TOSTRING(s)
 +#define AV_TOSTRING(s) #s
 +
 +#define AV_GLUE(a, b) a ## b
 +#define AV_JOIN(a, b) AV_GLUE(a, b)
 +
 +#define AV_PRAGMA(s) _Pragma(#s)
 +
 +/**
 + * @}
 + */
 +
 +/**
 + * @defgroup version_utils Library Version Macros
 + *
 + * Useful to check and match library version in order to maintain
 + * backward compatibility.
 + *
 + * @{
 + */
 +
 +#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c)
 +#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
 +#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
 +
 +/**
 + * @}
 + */
 +
  
  /**
   * @file
@@@ -74,9 -36,9 +74,9 @@@
   * @{
   */
  
 -#define LIBAVUTIL_VERSION_MAJOR 52
 -#define LIBAVUTIL_VERSION_MINOR 13
 -#define LIBAVUTIL_VERSION_MICRO  0
 +#define LIBAVUTIL_VERSION_MAJOR  52
 +#define LIBAVUTIL_VERSION_MINOR  37
- #define LIBAVUTIL_VERSION_MICRO 101
++#define LIBAVUTIL_VERSION_MICRO 102
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \
   * @{
   */
  
 +#ifndef FF_API_GET_BITS_PER_SAMPLE_FMT
 +#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 53)
 +#endif
 +#ifndef FF_API_FIND_OPT
 +#define FF_API_FIND_OPT                 (LIBAVUTIL_VERSION_MAJOR < 53)
 +#endif
 +#ifndef FF_API_OLD_AVOPTIONS
 +#define FF_API_OLD_AVOPTIONS            (LIBAVUTIL_VERSION_MAJOR < 53)
 +#endif
  #ifndef FF_API_PIX_FMT
  #define FF_API_PIX_FMT                  (LIBAVUTIL_VERSION_MAJOR < 53)
  #endif
  #ifndef FF_API_CPU_FLAG_MMX2
  #define FF_API_CPU_FLAG_MMX2            (LIBAVUTIL_VERSION_MAJOR < 53)
  #endif
 +#ifndef FF_API_SAMPLES_UTILS_RETURN_ZERO
 +#define FF_API_SAMPLES_UTILS_RETURN_ZERO (LIBAVUTIL_VERSION_MAJOR < 53)
 +#endif
  #ifndef FF_API_LLS_PRIVATE
  #define FF_API_LLS_PRIVATE              (LIBAVUTIL_VERSION_MAJOR < 53)
  #endif
   */
  
  #endif /* AVUTIL_VERSION_H */
 +