2
* $Id: AUD_ChannelMapperFactory.cpp 25643 2010-01-01 05:09:30Z nexyon $
4
* ***** BEGIN LGPL LICENSE BLOCK *****
6
* Copyright 2009 Jörg Hermann Müller
2
* ***** BEGIN GPL LICENSE BLOCK *****
4
* Copyright 2009-2011 Jörg Hermann Müller
8
6
* This file is part of AudaSpace.
10
* AudaSpace is free software: you can redistribute it and/or modify
11
* it under the terms of the GNU Lesser General Public License as published by
12
* the Free Software Foundation, either version 3 of the License, or
8
* Audaspace is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
13
11
* (at your option) any later version.
15
13
* AudaSpace is distributed in the hope that it will be useful,
16
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU Lesser General Public License for more details.
20
* You should have received a copy of the GNU Lesser General Public License
21
* along with AudaSpace. If not, see <http://www.gnu.org/licenses/>.
23
* ***** END LGPL LICENSE BLOCK *****
16
* GNU General Public License for more details.
18
* You should have received a copy of the GNU General Public License
19
* along with Audaspace; if not, write to the Free Software Foundation,
20
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
* ***** END GPL LICENSE BLOCK *****
25
/** \file audaspace/intern/AUD_ChannelMapperFactory.cpp
26
* \ingroup audaspaceintern
26
30
#include "AUD_ChannelMapperFactory.h"
27
31
#include "AUD_ChannelMapperReader.h"
31
AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(AUD_IReader* reader,
32
AUD_DeviceSpecs specs) :
33
AUD_MixerFactory(reader, specs)
35
memset(m_mapping, 0, sizeof(m_mapping));
38
AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(AUD_IFactory* factory,
35
AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(AUD_Reference<AUD_IFactory> factory,
39
36
AUD_DeviceSpecs specs) :
40
37
AUD_MixerFactory(factory, specs)
42
memset(m_mapping, 0, sizeof(m_mapping));
45
AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(AUD_DeviceSpecs specs) :
46
AUD_MixerFactory(specs)
48
memset(m_mapping, 0, sizeof(m_mapping));
51
AUD_ChannelMapperFactory::~AUD_ChannelMapperFactory()
53
for(int i = 1; i < 10; i++)
57
float** AUD_ChannelMapperFactory::getMapping(int ic)
66
while(m_mapping[ic][++channels] != 0);
67
if(channels != m_specs.channels)
73
int channels = m_specs.channels;
75
m_mapping[ic] = new float*[channels+1]; AUD_NEW("mapping")
76
m_mapping[ic][channels] = 0;
78
for(int i = 0; i < channels; i++)
80
m_mapping[ic][i] = new float[ic+1]; AUD_NEW("mapping")
81
for(int j = 0; j <= ic; j++)
82
m_mapping[ic][i][j] = ((i == j) || (channels == 1) ||
83
(ic == 0)) ? 1.0f : 0.0f;
90
void AUD_ChannelMapperFactory::deleteMapping(int ic)
98
for(int i = 0; 1; i++)
100
if(m_mapping[ic][i] != 0)
102
delete[] m_mapping[ic][i]; AUD_DELETE("mapping")
107
delete[] m_mapping[ic]; AUD_DELETE("mapping")
112
AUD_IReader* AUD_ChannelMapperFactory::createReader()
114
AUD_IReader* reader = getReader();
118
int ic = reader->getSpecs().channels;
120
reader = new AUD_ChannelMapperReader(reader, getMapping(ic));
41
AUD_Reference<AUD_IReader> AUD_ChannelMapperFactory::createReader()
43
AUD_Reference<AUD_IReader> reader = getReader();
44
return new AUD_ChannelMapperReader(reader, m_specs.channels);