[r35737]: / branches / AudioEngine / xbmc / cores / AudioEngine / Engines / SoftAESound.cpp  Maximize  Restore  History

Download this file

121 lines (101 with data), 2.6 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
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
* Copyright (C) 2005-2010 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
*
*/
#if (defined USE_EXTERNAL_FFMPEG)
#include <libavutil/avutil.h>
#else
#include "cores/dvdplayer/Codecs/ffmpeg/libavutil/avutil.h"
#endif
#include "AESound.h"
#include <samplerate.h>
#include "utils/SingleLock.h"
#include "utils/log.h"
#include "utils/EndianSwap.h"
#include "FileSystem/FileFactory.h"
#include "FileSystem/IFile.h"
#include "AEFactory.h"
#include "AEAudioFormat.h"
#include "AEConvert.h"
#include "AERemap.h"
#include "AEUtil.h"
#include "SoftAE.h"
#include "SoftAESound.h"
/* typecast the global AE to CSoftAE */
#define AE (*((CSoftAE*)&AE))
typedef struct
{
char chunk_id[4];
uint32_t chunksize;
} WAVE_CHUNK;
CSoftAESound::CSoftAESound(const CStdString &filename) :
IAESound(filename),
m_refcount (1 ),
m_volume (1.0f )
{
m_filename = filename;
}
CSoftAESound::~CSoftAESound()
{
DeInitialize();
}
void CSoftAESound::DeInitialize()
{
CSingleLock lock(m_critSection);
m_wavLoader.DeInitialize();
}
bool CSoftAESound::Initialize()
{
DeInitialize();
CSingleLock lock(m_critSection);
if (!m_wavLoader.Initialize(m_filename, AE.GetSampleRate()))
return false;
m_wavLoader.Remap(AE.GetChannelLayout());
return true;
}
unsigned int CSoftAESound::GetSampleCount()
{
if (!m_wavLoader.IsValid())
return 0;
return m_wavLoader.GetSampleCount();
}
float* CSoftAESound::GetSamples()
{
if (!m_wavLoader.IsValid())
return NULL;
return m_wavLoader.GetSamples();
}
bool CSoftAESound::IsPlaying()
{
if (!m_wavLoader.IsValid())
return false;
return AE.IsPlaying(this);
}
void CSoftAESound::Play()
{
if (!m_wavLoader.IsValid())
return;
AE.PlaySound(this);
}
void CSoftAESound::Stop()
{
if (!m_wavLoader.IsValid())
return;
AE.StopSound(this);
}