Merge commit '9d5c62ba5b586c80af508b5914934b1c439f6652'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 6 Dec 2012 13:33:38 +0000 (14:33 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 6 Dec 2012 13:33:38 +0000 (14:33 +0100)
* commit '9d5c62ba5b586c80af508b5914934b1c439f6652':
  lavu/opt: do not filter out the initial sign character except for flags
  eval: treat dB as decibels instead of decibytes
  float_dsp: add vector_dmul_scalar() to multiply a vector of doubles

Conflicts:
libavutil/eval.c
tests/ref/fate/eval

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavutil/eval.c
libavutil/float_dsp.c
libavutil/float_dsp.h
libavutil/opt.c
libavutil/x86/float_dsp.asm
libavutil/x86/float_dsp_init.c
libavutil/x86/x86util.asm
tests/ref/fate/eval

@@@ -88,13 -78,14 +88,17 @@@ double av_strtod(const char *numstr, ch
  {
      double d;
      char *next;
 -    d = strtod(numstr, &next);
 +    if(numstr[0]=='0' && (numstr[1]|0x20)=='x') {
 +        d = strtoul(numstr, &next, 16);
 +    } else
 +        d = strtod(numstr, &next);
      /* if parsing succeeded, check for and interpret postfixes */
      if (next!=numstr) {
-         if (*next >= 'E' && *next <= 'z') {
+         if (next[0] == 'd' && next[1] == 'B') {
+             /* treat dB as decibels instead of decibytes */
+             d = pow(10, d / 20);
+             next += 2;
+         } else if (*next >= 'E' && *next <= 'z') {
              int e= si_prefixes[*next - 'E'];
              if (e) {
                  if (next[1] == 'i') {
@@@ -744,22 -648,8 +763,24 @@@ int main(int argc, char **argv
          "not(1)",
          "not(NAN)",
          "not(0)",
+         "6.0206dB",
+         "-3.0103dB",
 +        "pow(0,1.23)",
 +        "pow(PI,1.23)",
 +        "PI^1.23",
 +        "pow(-1,1.23)",
 +        "if(1, 2)",
 +        "ifnot(0, 23)",
 +        "ifnot(1, NaN) + if(0, 1)",
 +        "taylor(1, 1)",
 +        "taylor(eq(mod(ld(1),4),1)-eq(mod(ld(1),4),3), PI/2, 1)",
 +        "root(sin(ld(0))-1, 2)",
 +        "root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)",
 +        "7000000B*random(0)",
 +        "squish(2)",
 +        "gauss(0.1)",
 +        "hypot(4,3)",
 +        "gcd(30,55)*min(9,1)",
          NULL
      };
  
Simple merge
Simple merge
diff --cc libavutil/opt.c
Simple merge
@@@ -120,3 -114,48 +120,48 @@@ cglobal vector_fmul_scalar, 4,4,3, dst
  
  INIT_XMM sse
  VECTOR_FMUL_SCALAR
 -    VBROADCASTSD xmm0, mulm
+ ;------------------------------------------------------------------------------
+ ; void ff_vector_dmul_scalar(double *dst, const double *src, double mul,
+ ;                            int len)
+ ;------------------------------------------------------------------------------
+ %macro VECTOR_DMUL_SCALAR 0
+ %if UNIX64
+ cglobal vector_dmul_scalar, 3,3,3, dst, src, len
+ %else
+ cglobal vector_dmul_scalar, 4,4,3, dst, src, mul, len
+ %endif
+ %if ARCH_X86_32
++    VBROADCASTSD m0, mulm
+ %else
+ %if WIN64
+     movlhps      xmm2, xmm2
+ %if cpuflag(avx)
+     vinsertf128  ymm2, ymm2, xmm2, 1
+ %endif
+     SWAP 0, 2
+ %else
+     movlhps      xmm0, xmm0
+ %if cpuflag(avx)
+     vinsertf128  ymm0, ymm0, xmm0, 1
+ %endif
+ %endif
+ %endif
+     lea          lenq, [lend*8-2*mmsize]
+ .loop:
+     mulpd          m1, m0, [srcq+lenq       ]
+     mulpd          m2, m0, [srcq+lenq+mmsize]
+     mova   [dstq+lenq       ], m1
+     mova   [dstq+lenq+mmsize], m2
+     sub          lenq, 2*mmsize
+     jge .loop
+     REP_RET
+ %endmacro
+ INIT_XMM sse2
+ VECTOR_DMUL_SCALAR
+ %if HAVE_AVX_EXTERNAL
+ INIT_YMM avx
+ VECTOR_DMUL_SCALAR
+ %endif
Simple merge
Simple merge
@@@ -184,53 -184,11 +184,59 @@@ Evaluating 'not(NAN)
  Evaluating 'not(0)'
  'not(0)' -> 1.000000
  
+ Evaluating '6.0206dB'
+ '6.0206dB' -> 2.000000
+ Evaluating '-3.0103dB'
+ '-3.0103dB' -> 0.707107
 +Evaluating 'pow(0,1.23)'
 +'pow(0,1.23)' -> 0.000000
 +
 +Evaluating 'pow(PI,1.23)'
 +'pow(PI,1.23)' -> 4.087844
 +
 +Evaluating 'PI^1.23'
 +'PI^1.23' -> 4.087844
 +
 +Evaluating 'pow(-1,1.23)'
 +'pow(-1,1.23)' -> nan
 +
 +Evaluating 'if(1, 2)'
 +'if(1, 2)' -> 2.000000
 +
 +Evaluating 'ifnot(0, 23)'
 +'ifnot(0, 23)' -> 23.000000
 +
 +Evaluating 'ifnot(1, NaN) + if(0, 1)'
 +'ifnot(1, NaN) + if(0, 1)' -> 0.000000
 +
 +Evaluating 'taylor(1, 1)'
 +'taylor(1, 1)' -> 2.718282
 +
 +Evaluating 'taylor(eq(mod(ld(1),4),1)-eq(mod(ld(1),4),3), PI/2, 1)'
 +'taylor(eq(mod(ld(1),4),1)-eq(mod(ld(1),4),3), PI/2, 1)' -> 1.000000
 +
 +Evaluating 'root(sin(ld(0))-1, 2)'
 +'root(sin(ld(0))-1, 2)' -> 1.570796
 +
 +Evaluating 'root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)'
 +'root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)' -> 60.965601
 +
 +Evaluating '7000000B*random(0)'
 +'7000000B*random(0)' -> 0.003078
 +
 +Evaluating 'squish(2)'
 +'squish(2)' -> 0.000335
 +
 +Evaluating 'gauss(0.1)'
 +'gauss(0.1)' -> 0.396953
 +
 +Evaluating 'hypot(4,3)'
 +'hypot(4,3)' -> 5.000000
 +
 +Evaluating 'gcd(30,55)*min(9,1)'
 +'gcd(30,55)*min(9,1)' -> 5.000000
 +
  12.700000 == 12.7
  0.931323 == 0.931322575