Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 80 lines (69 sloc) 2.646 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
#pragma once
/*
* Copyright (C) 2010-2012 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/

#include "../AEAudioFormat.h"
#include "utils/StdString.h"
#include "PlatformDefs.h"
#include <math.h>

#ifdef __SSE__
#include <xmmintrin.h>
#else
#define __m128 void
#endif

#ifdef __GNUC__
#define MEMALIGN(b, x) x __attribute__((aligned(b)))
#else
#define MEMALIGN(b, x) __declspec(align(b)) x
#endif

class CAEUtil
{
private:
  static unsigned int m_seed;
#ifdef __SSE__
    static __m128i m_sseSeed;
#endif

  static float SoftClamp(const float x);

public:
  static CAEChannelInfo GuessChLayout (const unsigned int channels);
  static const char* GetStdChLayoutName(const enum AEStdChLayout layout);
  static const unsigned int DataFormatToBits (const enum AEDataFormat dataFormat);
  static const char* DataFormatToStr (const enum AEDataFormat dataFormat);

  /* convert a linear value between 0.0 and 1.0 to a logrithmic value */
  static inline const float LinToLog(const float dbrange, const float value)
  {
    float b = log(pow(10.0f, dbrange * 0.05f));
    float a = 1.0f / exp(b);
    return a * exp(b * value);
  }

#ifdef __SSE__
  static void SSEMulArray (float *data, const float mul, uint32_t count);
  static void SSEMulAddArray (float *data, float *add, const float mul, uint32_t count);
#endif
  static void ClampArray(float *data, uint32_t count);

  /*
Rand implementations based on:
http://software.intel.com/en-us/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor/
This is NOT safe for crypto work, but perfectly fine for audio usage (dithering)
*/
  static float FloatRand1(const float min, const float max);
  static void FloatRand4(const float min, const float max, float result[4], __m128 *sseresult = NULL);

  static bool S16NeedsByteSwap(AEDataFormat in, AEDataFormat out);
};
Something went wrong with that request. Please try again.