media/libsoundtouch/src/STTypes.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 ////////////////////////////////////////////////////////////////////////////////
     2 ///
     3 /// Common type definitions for SoundTouch audio processing library.
     4 ///
     5 /// Author        : Copyright (c) Olli Parviainen
     6 /// Author e-mail : oparviai 'at' iki.fi
     7 /// SoundTouch WWW: http://www.surina.net/soundtouch
     8 ///
     9 ////////////////////////////////////////////////////////////////////////////////
    10 //
    11 // Last changed  : $Date: 2014-04-06 10:57:21 -0500 (Sun, 06 Apr 2014) $
    12 // File revision : $Revision: 3 $
    13 //
    14 // $Id: STTypes.h 195 2014-04-06 15:57:21Z oparviai $
    15 //
    16 ////////////////////////////////////////////////////////////////////////////////
    17 //
    18 // License :
    19 //
    20 //  SoundTouch audio processing library
    21 //  Copyright (c) Olli Parviainen
    22 //
    23 //  This library is free software; you can redistribute it and/or
    24 //  modify it under the terms of the GNU Lesser General Public
    25 //  License as published by the Free Software Foundation; either
    26 //  version 2.1 of the License, or (at your option) any later version.
    27 //
    28 //  This library is distributed in the hope that it will be useful,
    29 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
    30 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    31 //  Lesser General Public License for more details.
    32 //
    33 //  You should have received a copy of the GNU Lesser General Public
    34 //  License along with this library; if not, write to the Free Software
    35 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    36 //
    37 ////////////////////////////////////////////////////////////////////////////////
    39 #ifndef STTypes_H
    40 #define STTypes_H
    42 typedef unsigned int    uint;
    43 typedef unsigned long   ulong;
    45 // Patch for MinGW: on Win64 long is 32-bit
    46 #ifdef _WIN64
    47     typedef unsigned long long ulongptr;
    48 #else
    49     typedef ulong ulongptr;
    50 #endif
    53 // Helper macro for aligning pointer up to next 16-byte boundary
    54 #define SOUNDTOUCH_ALIGN_POINTER_16(x)      ( ( (ulongptr)(x) + 15 ) & ~(ulongptr)15 )
    57 #include "soundtouch_config.h"
    59 #ifdef WIN32
    60 #ifdef BUILDING_SOUNDTOUCH
    61 #define EXPORT __declspec(dllexport)
    62 #else
    63 #define EXPORT __declspec(dllimport)
    64 #endif
    65 #else
    66 #define EXPORT
    67 #endif
    69 namespace soundtouch
    70 {
    71     /// Activate these undef's to overrule the possible sampletype 
    72     /// setting inherited from some other header file:
    73     //#undef SOUNDTOUCH_INTEGER_SAMPLES
    74     //#undef SOUNDTOUCH_FLOAT_SAMPLES
    76     /// If following flag is defined, always uses multichannel processing 
    77     /// routines also for mono and stero sound. This is for routine testing 
    78     /// purposes; output should be same with either routines, yet disabling 
    79     /// the dedicated mono/stereo processing routines will result in slower 
    80     /// runtime performance so recommendation is to keep this off.
    81     // #define USE_MULTICH_ALWAYS
    83     #if (defined(__SOFTFP__))
    84         // For Android compilation: Force use of Integer samples in case that
    85         // compilation uses soft-floating point emulation - soft-fp is way too slow
    86         #undef  SOUNDTOUCH_FLOAT_SAMPLES
    87         #define SOUNDTOUCH_INTEGER_SAMPLES      1
    88     #endif
    90     #if !(SOUNDTOUCH_INTEGER_SAMPLES || SOUNDTOUCH_FLOAT_SAMPLES)
    92         /// Choose either 32bit floating point or 16bit integer sampletype
    93         /// by choosing one of the following defines, unless this selection 
    94         /// has already been done in some other file.
    95         ////
    96         /// Notes:
    97         /// - In Windows environment, choose the sample format with the
    98         ///   following defines.
    99         /// - In GNU environment, the floating point samples are used by 
   100         ///   default, but integer samples can be chosen by giving the 
   101         ///   following switch to the configure script:
   102         ///       ./configure --enable-integer-samples
   103         ///   However, if you still prefer to select the sample format here 
   104         ///   also in GNU environment, then please #undef the INTEGER_SAMPLE
   105         ///   and FLOAT_SAMPLE defines first as in comments above.
   106         //#define SOUNDTOUCH_INTEGER_SAMPLES     1    //< 16bit integer samples
   107         #define SOUNDTOUCH_FLOAT_SAMPLES       1    //< 32bit float samples
   109     #endif
   111     #if (_M_IX86 || __i386__ || __x86_64__ || _M_X64)
   112         /// Define this to allow X86-specific assembler/intrinsic optimizations. 
   113         /// Notice that library contains also usual C++ versions of each of these
   114         /// these routines, so if you're having difficulties getting the optimized 
   115         /// routines compiled for whatever reason, you may disable these optimizations 
   116         /// to make the library compile.
   118         #define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS     1
   120         /// In GNU environment, allow the user to override this setting by
   121         /// giving the following switch to the configure script:
   122         /// ./configure --disable-x86-optimizations
   123         /// ./configure --enable-x86-optimizations=no
   124         #ifdef SOUNDTOUCH_DISABLE_X86_OPTIMIZATIONS
   125             #undef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
   126         #endif
   127     #else
   128         /// Always disable optimizations when not using a x86 systems.
   129         #undef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
   131     #endif
   133     // If defined, allows the SIMD-optimized routines to take minor shortcuts 
   134     // for improved performance. Undefine to require faithfully similar SIMD 
   135     // calculations as in normal C implementation.
   136     #define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION    1
   139     #ifdef SOUNDTOUCH_INTEGER_SAMPLES
   140         // 16bit integer sample type
   141         typedef short SAMPLETYPE;
   142         // data type for sample accumulation: Use 32bit integer to prevent overflows
   143         typedef long  LONG_SAMPLETYPE;
   145         #ifdef SOUNDTOUCH_FLOAT_SAMPLES
   146             // check that only one sample type is defined
   147             #error "conflicting sample types defined"
   148         #endif // SOUNDTOUCH_FLOAT_SAMPLES
   150         #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
   151             // Allow MMX optimizations
   152             #define SOUNDTOUCH_ALLOW_MMX   1
   153         #endif
   155     #else
   157         // floating point samples
   158         typedef float  SAMPLETYPE;
   159         // data type for sample accumulation: Use double to utilize full precision.
   160         typedef double LONG_SAMPLETYPE;
   162         #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
   163             // Allow SSE optimizations
   164             #define SOUNDTOUCH_ALLOW_SSE       1
   165         #endif
   167     #endif  // SOUNDTOUCH_INTEGER_SAMPLES
   169 };
   171 // define ST_NO_EXCEPTION_HANDLING switch to disable throwing std exceptions:
   172 #define ST_NO_EXCEPTION_HANDLING    1
   173 #ifdef ST_NO_EXCEPTION_HANDLING
   174     // Exceptions disabled. Throw asserts instead if enabled.
   175     #include <assert.h>
   176     #define ST_THROW_RT_ERROR(x)    {assert((const char *)x);}
   177 #else
   178     // use c++ standard exceptions
   179     #include <stdexcept>
   180     #define ST_THROW_RT_ERROR(x)    {throw std::runtime_error(x);}
   181 #endif
   183 // When this #define is active, eliminates a clicking sound when the "rate" or "pitch" 
   184 // parameter setting crosses from value <1 to >=1 or vice versa during processing. 
   185 // Default is off as such crossover is untypical case and involves a slight sound 
   186 // quality compromise.
   187 //#define SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER   1
   189 #endif

mercurial