fixed: Stream Flush/Drain rework, housekeeping
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / cores / masteraudio / DirectSoundAdapter.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 __DIRECT_SOUND_ADAPTER_H__
23 #define __DIRECT_SOUND_ADAPTER_H__
24
25 #if _MSC_VER > 1000
26 #pragma once
27 #endif // _MSC_VER > 1000
28
29 #include "MasterAudioCore.h"
30 #include "../AudioRenderers/AudioRendererFactory.h"
31 #include "SimpleBuffer.h"
32
33 class CDirectSoundAdapter : public IMixerChannel
34 {
35 public:
36   CDirectSoundAdapter();
37   virtual ~CDirectSoundAdapter();
38
39   // IAudioSink
40   MA_RESULT TestInputFormat(CStreamDescriptor* pDesc);
41   MA_RESULT SetInputFormat(CStreamDescriptor* pDesc);
42   MA_RESULT AddSlice(audio_slice* pSlice);
43   float GetMaxLatency();
44   void Flush();
45
46   // IRenderingControl
47   void Play();
48   void Stop();
49   void Pause();
50   void Resume();
51   void SetVolume(long vol);
52
53   // IMixerChannel
54   void Close();
55   bool IsIdle();
56   bool Drain(unsigned int timeout);
57   
58 protected:
59   IDirectSoundRenderer* m_pRenderer;
60   CSimpleBuffer m_OutputBuffer;
61   unsigned __int64 m_TotalBytesReceived;
62   audio_slice* m_pInputSlice;
63 };
64
65 #endif // __DIRECT_SOUND_ADAPTER_H__