fixed: Improved memory management and resource cleanup.
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / cores / masteraudio / AudioManagerClient.cpp
1 /*
2  *      Copyright (C) 2009 Team XBMC
3  *      http://www.xbmc.org
4  *
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.
9  *
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.
14  *
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
19  *
20  */
21
22 #include "stdafx.h"
23 #include "AudioManagerClient.h"
24
25
26 CAudioManagerClient::CAudioManagerClient(CAudioManager* pManager) :
27   m_pManager(pManager),
28   m_StreamId(MA_STREAM_NONE)
29 {
30
31 }
32
33 CAudioManagerClient::~CAudioManagerClient()
34 {
35   if(VALID_STREAM_ID(m_StreamId))
36     CloseStream();
37 }
38
39 void CAudioManagerClient::Stop()
40 {
41   TRY_CONTROL_STREAM(MA_CONTROL_STOP);    
42 }
43
44 void CAudioManagerClient::Play()
45 {
46   TRY_CONTROL_STREAM(MA_CONTROL_PLAY);    
47 }
48
49 void CAudioManagerClient::Pause()
50 {
51   TRY_CONTROL_STREAM(MA_CONTROL_PAUSE);    
52 }
53
54 void CAudioManagerClient::Resume()
55 {
56   TRY_CONTROL_STREAM(MA_CONTROL_RESUME);    
57 }
58
59 bool CAudioManagerClient::SetVolume(long vol)
60 {
61   if (m_pManager)
62     return m_pManager->SetStreamVolume(m_StreamId ,vol);
63
64   return false;
65 }
66
67 void CAudioManagerClient::CloseStream()
68 {
69   if(m_pManager)
70     m_pManager->CloseStream(m_StreamId);
71   m_StreamId = MA_STREAM_NONE;
72 }
73
74 float CAudioManagerClient::GetDelay()
75 {
76   if(m_pManager)
77     return m_pManager->GetStreamDelay(m_StreamId);
78   return 0.0f;
79 }
80
81 size_t CAudioManagerClient::AddDataToStream(void* pData, size_t len)
82 {
83   if(m_pManager)
84     return m_pManager->AddDataToStream(m_StreamId, pData, len);
85   return false;
86 }
87
88 void CAudioManagerClient::DrainStream(int maxWaitTime)
89 {
90   if(m_pManager)
91     m_pManager->DrainStream(m_StreamId,maxWaitTime);
92 }
93
94 ////////////////////////////////////////////////////////////////////////////////////////
95 // Private Members
96 ////////////////////////////////////////////////////////////////////////////////////////
97 bool CAudioManagerClient::OpenStream(CStreamDescriptor* pDesc, size_t blockSize)
98 {
99   if(!m_pManager)
100     return false;
101   m_StreamId = m_pManager->OpenStream(pDesc, blockSize);
102   return (m_StreamId != MA_STREAM_NONE);
103 }
104