changed: update version strings for beta4
[xbmc.git] / xbmc / utils / PCMAmplifier.cpp
blob1009ea8c465a7a43e0b9e0c3f8a1738c48b94a72
1 /*
2 * Copyright (C) 2005-2008 Team XBMC
3 * http://www.xbmc.org
5 * This Program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
10 * This Program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with XBMC; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18 * http://www.gnu.org/copyleft/gpl.html
22 #include "PCMAmplifier.h"
24 #include <math.h>
26 CPCMAmplifier::CPCMAmplifier() : m_nVolume(VOLUME_MAXIMUM), m_dFactor(0)
30 CPCMAmplifier::~CPCMAmplifier()
34 void CPCMAmplifier::SetVolume(int nVolume)
36 m_nVolume = nVolume;
37 if (nVolume > VOLUME_MAXIMUM)
38 nVolume = VOLUME_MAXIMUM;
40 if (nVolume < VOLUME_MINIMUM)
41 nVolume = VOLUME_MINIMUM;
43 if( nVolume == VOLUME_MINIMUM)
44 m_dFactor = 0;
45 else
46 m_dFactor = pow(10,nVolume/2000.f);
49 int CPCMAmplifier::GetVolume()
51 return m_nVolume;
54 // only works on 16bit samples
55 void CPCMAmplifier::DeAmplify(short *pcm, int nSamples)
57 if (m_dFactor >= 1.0)
59 // no process required. using >= to make sure no amp is ever done (only de-amp)
60 return;
63 for (int nSample=0; nSample<nSamples; nSample++)
65 int nSampleValue = pcm[nSample]; // must be int. so that we can check over/under flow
66 nSampleValue = (int)((double)nSampleValue * m_dFactor);
68 pcm[nSample] = (short)nSampleValue;