fixed: Improved memory management and resource cleanup.
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / cores / masteraudio / AudioManagerClient.h
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 #ifndef __AUDIO_MANAGER_CLIENT_H__
23 #define __AUDIO_MANAGER_CLIENT_H__
24
25 #if _MSC_VER > 1000
26 #pragma once
27 #endif // _MSC_VER > 1000
28
29 #include "AudioManager.h"
30
31 #define TRY_CONTROL_STREAM(code)                \
32   if (m_pManager)                               \
33     m_pManager->ControlStream(m_StreamId, code)  \
34
35 #define TRY_SET_STREAM_PROP(prop, ptr)                        \
36   if (m_pManager)                                             \
37     return m_pManager->SetStreamProp(m_StreamId, prop, ptr);  \
38   else                                                        \
39     return false;                                             \
40
41 #define VALID_STREAM_ID(id) (id != MA_STREAM_NONE)
42
43 class CAudioManagerClient
44 {
45 public:
46   CAudioManagerClient(CAudioManager* pManager);
47   virtual ~CAudioManagerClient();
48
49   // Control Interface
50   virtual void Stop();
51   virtual void Play();
52   virtual void Pause();
53   virtual void Resume();
54   virtual bool SetVolume(long vol);
55
56   // Stream Interface
57   virtual void CloseStream();
58   virtual size_t AddDataToStream(void* pData, size_t len);
59   virtual float GetDelay();
60   virtual bool IsStreamOpen() {return VALID_STREAM_ID(m_StreamId);}
61   virtual void DrainStream(int maxWaitTime);
62 protected:
63   virtual bool OpenStream(CStreamDescriptor* pDesc, size_t blockSize);
64   CAudioManager* m_pManager;
65   AM_STREAM_ID GetStreamId() {return m_StreamId;}
66 private:
67   AM_STREAM_ID m_StreamId;
68 };
69
70 #endif // __AUDIO_MANAGER_CLIENT_H__