LCOV - code coverage report
Current view: top level - media/libvorbis/lib - scales.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 8 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /********************************************************************
       2             :  *                                                                  *
       3             :  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
       4             :  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
       5             :  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
       6             :  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
       7             :  *                                                                  *
       8             :  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
       9             :  * by the Xiph.Org Foundation http://www.xiph.org/                  *
      10             :  *                                                                  *
      11             :  ********************************************************************
      12             : 
      13             :  function: linear scale -> dB, Bark and Mel scales
      14             :  last mod: $Id$
      15             : 
      16             :  ********************************************************************/
      17             : 
      18             : #ifndef _V_SCALES_H_
      19             : #define _V_SCALES_H_
      20             : 
      21             : #include <math.h>
      22             : #include "os.h"
      23             : 
      24             : #ifdef _MSC_VER
      25             : /* MS Visual Studio doesn't have C99 inline keyword. */
      26             : #define inline __inline
      27             : #endif
      28             : 
      29             : /* 20log10(x) */
      30             : #define VORBIS_IEEE_FLOAT32 1
      31             : #ifdef VORBIS_IEEE_FLOAT32
      32             : 
      33           0 : static inline float unitnorm(float x){
      34             :   union {
      35             :     ogg_uint32_t i;
      36             :     float f;
      37             :   } ix;
      38           0 :   ix.f = x;
      39           0 :   ix.i = (ix.i & 0x80000000U) | (0x3f800000U);
      40           0 :   return ix.f;
      41             : }
      42             : 
      43             : /* Segher was off (too high) by ~ .3 decibel.  Center the conversion correctly. */
      44           0 : static inline float todB(const float *x){
      45             :   union {
      46             :     ogg_uint32_t i;
      47             :     float f;
      48             :   } ix;
      49           0 :   ix.f = *x;
      50           0 :   ix.i = ix.i&0x7fffffff;
      51           0 :   return (float)(ix.i * 7.17711438e-7f -764.6161886f);
      52             : }
      53             : 
      54             : #define todB_nn(x) todB(x)
      55             : 
      56             : #else
      57             : 
      58             : static float unitnorm(float x){
      59             :   if(x<0)return(-1.f);
      60             :   return(1.f);
      61             : }
      62             : 
      63             : #define todB(x)   (*(x)==0?-400.f:log(*(x)**(x))*4.34294480f)
      64             : #define todB_nn(x)   (*(x)==0.f?-400.f:log(*(x))*8.6858896f)
      65             : 
      66             : #endif
      67             : 
      68             : #define fromdB(x) (exp((x)*.11512925f))
      69             : 
      70             : /* The bark scale equations are approximations, since the original
      71             :    table was somewhat hand rolled.  The below are chosen to have the
      72             :    best possible fit to the rolled tables, thus their somewhat odd
      73             :    appearance (these are more accurate and over a longer range than
      74             :    the oft-quoted bark equations found in the texts I have).  The
      75             :    approximations are valid from 0 - 30kHz (nyquist) or so.
      76             : 
      77             :    all f in Hz, z in Bark */
      78             : 
      79             : #define toBARK(n)   (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n))
      80             : #define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f)
      81             : #define toMEL(n)    (log(1.f+(n)*.001f)*1442.695f)
      82             : #define fromMEL(m)  (1000.f*exp((m)/1442.695f)-1000.f)
      83             : 
      84             : /* Frequency to octave.  We arbitrarily declare 63.5 Hz to be octave
      85             :    0.0 */
      86             : 
      87             : #define toOC(n)     (log(n)*1.442695f-5.965784f)
      88             : #define fromOC(o)   (exp(((o)+5.965784f)*.693147f))
      89             : 
      90             : #endif

Generated by: LCOV version 1.13