From: Monty Date: Thu, 21 Mar 2002 04:04:26 +0000 (+0000) Subject: Uiver's improved IEEE754 32 bit float-specific todB optimization X-Git-Tag: v1.3.3~796 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ecbd50fd99cc43adc0b338939491a8aa5b2b62ad;p=platform%2Fupstream%2Flibvorbis.git Uiver's improved IEEE754 32 bit float-specific todB optimization improvement. It still needs to be made completely proof against optimization. svn path=/trunk/vorbis/; revision=3168 --- diff --git a/lib/scales.h b/lib/scales.h index 6c91702..d8803e1 100644 --- a/lib/scales.h +++ b/lib/scales.h @@ -11,7 +11,7 @@ ******************************************************************** function: linear scale -> dB, Bark and Mel scales - last mod: $Id: scales.h,v 1.21 2002/03/17 19:50:47 xiphmont Exp $ + last mod: $Id: scales.h,v 1.22 2002/03/21 04:04:26 xiphmont Exp $ ********************************************************************/ @@ -36,78 +36,13 @@ static float FABS(float x){ return(x); } -static float todB_LOOKUP[256]={ - -140.277330f, -139.633636f, -139.034372f, -138.473797f, - -137.450747f, -136.535597f, -135.707743f, -134.951972f, - -134.256730f, -133.613036f, -133.013772f, -132.453198f, - -131.430147f, -130.514997f, -129.687144f, -128.931372f, - -128.236130f, -127.592437f, -126.993172f, -126.432598f, - -125.409547f, -124.494397f, -123.666544f, -122.910772f, - -122.215530f, -121.571837f, -120.972572f, -120.411998f, - -119.388947f, -118.473797f, -117.645944f, -116.890173f, - -116.194930f, -115.551237f, -114.951972f, -114.391398f, - -113.368347f, -112.453198f, -111.625344f, -110.869573f, - -110.174331f, -109.530637f, -108.931372f, -108.370798f, - -107.347748f, -106.432598f, -105.604744f, -104.848973f, - -104.153731f, -103.510037f, -102.910773f, -102.350198f, - -101.327148f, -100.411998f, -99.584144f, -98.828373f, - -98.133131f, -97.489437f, -96.890173f, -96.329598f, - -95.306548f, -94.391398f, -93.563544f, -92.807773f, - -92.112531f, -91.468837f, -90.869573f, -90.308998f, - -89.285948f, -88.370798f, -87.542944f, -86.787173f, - -86.091931f, -85.448237f, -84.848973f, -84.288398f, - -83.265348f, -82.350198f, -81.522344f, -80.766573f, - -80.071331f, -79.427637f, -78.828373f, -78.267799f, - -77.244748f, -76.329598f, -75.501745f, -74.745973f, - -74.050731f, -73.407038f, -72.807773f, -72.247199f, - -71.224148f, -70.308998f, -69.481145f, -68.725373f, - -68.030131f, -67.386438f, -66.787173f, -66.226599f, - -65.203548f, -64.288399f, -63.460545f, -62.704774f, - -62.009531f, -61.365838f, -60.766573f, -60.205999f, - -59.182948f, -58.267799f, -57.439945f, -56.684174f, - -55.988932f, -55.345238f, -54.745973f, -54.185399f, - -53.162349f, -52.247199f, -51.419345f, -50.663574f, - -49.968332f, -49.324638f, -48.725374f, -48.164799f, - -47.141749f, -46.226599f, -45.398745f, -44.642974f, - -43.947732f, -43.304038f, -42.704774f, -42.144199f, - -41.121149f, -40.205999f, -39.378145f, -38.622374f, - -37.927132f, -37.283438f, -36.684174f, -36.123599f, - -35.100549f, -34.185399f, -33.357545f, -32.601774f, - -31.906532f, -31.262838f, -30.663574f, -30.102999f, - -29.079949f, -28.164799f, -27.336945f, -26.581174f, - -25.885932f, -25.242238f, -24.642974f, -24.082400f, - -23.059349f, -22.144199f, -21.316346f, -20.560574f, - -19.865332f, -19.221639f, -18.622374f, -18.061800f, - -17.038749f, -16.123599f, -15.295746f, -14.539974f, - -13.844732f, -13.201039f, -12.601774f, -12.041200f, - -11.018149f, -10.103000f, -9.275146f, -8.519375f, - -7.824132f, -7.180439f, -6.581174f, -6.020600f, - -4.997549f, -4.082400f, -3.254546f, -2.498775f, - -1.803533f, -1.159839f, -0.560574f, 0.000000f, - 1.023050f, 1.938200f, 2.766054f, 3.521825f, - 4.217067f, 4.860761f, 5.460025f, 6.020600f, - 7.043650f, 7.958800f, 8.786654f, 9.542425f, - 10.237667f, 10.881361f, 11.480625f, 12.041200f, - 13.064250f, 13.979400f, 14.807254f, 15.563025f, - 16.258267f, 16.901961f, 17.501225f, 18.061800f, - 19.084850f, 20.000000f, 20.827854f, 21.583625f, - 22.278867f, 22.922561f, 23.521825f, 24.082400f, - 25.105450f, 26.020600f, 26.848453f, 27.604225f, - 28.299467f, 28.943161f, 29.542425f, 30.102999f, - 31.126050f, 32.041200f, 32.869053f, 33.624825f, - 34.320067f, 34.963760f, 35.563025f, 36.123599f, - 37.146650f, 38.061800f, 38.889653f, 39.645424f, - 40.340667f, 40.984360f, 41.583625f, 42.144199f, - 43.167250f, 44.082399f, 44.910253f, 45.666024f, - 46.361266f, 47.004960f, 47.604225f, 48.164799f, - 49.187850f, 50.102999f, 50.930853f, 51.686624f -}; - static float todB(const float *x){ + float calc; ogg_int32_t *i=(ogg_int32_t *)x; - ogg_int32_t temp=((*i&0x7fffffff)-0x33c7ffff)>>20; - if(temp<0)return -400.f; - return(todB_LOOKUP[temp]); + calc = ((*i) & 0x7fffffff); + calc *= 7.1771144e-7f; + calc += -764.27118f; + return calc; } #define todB_nn(x) todB(x)