rtoss - Blame information for rev 26

Subversion Repositories:
Rev:
Rev Author Line No. Line
14 roytam 1 #if !defined(__WAVEOUTPUT_H_INCLUDED)
2 #define __WAVEOUTPUT_H_INCLUDED
3  
4 #if _MSC_VER > 1000
5 #pragma once
6 #endif // _MSC_VER > 1000
7  
8 #define PREAMP_FIXED_BITS               8
9 #define PREAMP_FIXED_FLAT               (1 << PREAMP_FIXED_BITS)
10 #define BUFLEN_BASE                             1024
11 #define SUBBUF_SIZE                             512
12 #ifdef _WIN32_WCE
13 #define SUBBUF_COUNT                    8
14 #else
15 #define SUBBUF_COUNT                    4
16 #endif
17  
18 class COutput
19 {
20 public:
21         COutput();
22         ~COutput();
23         BOOL Open(int nChannels, int nSamplingRate, int nBitsPerSample);
24         void Close();
25         void CloseAll();
26         DWORD GetBufferSize() {return m_cbBuf;}
27         WAVEHDR* GetBuffer();
28         void OutputBuffer(WAVEHDR*);
29         void ReleaseBuffer(WAVEHDR*);
30  
31         void Pause(BOOL fPause);
32         void Reset();
33         DWORD GetCurrent();
34         BOOL IsFlushed();
35         void Preamp(LPBYTE pbBuf, DWORD cbBuf, int nRate);
36         DWORD ScanZeroSamples(BOOL fForward, LPBYTE pbBuf, DWORD cbBuf);
37         void SetFadeOff() {m_nFadeSamples = 0;}
38  
39         BOOL SetOutputParam(DWORD dwBufLen, BOOL fDoubleBuf, BOOL fFade);
40         void GetOutputParam(LPDWORD pdwBufLen, LPBOOL pfDoubleBuf, LPBOOL pfFade);
41         BOOL GetScanPeek() {return m_fScanPeek;}
42         void SetScanPeek(BOOL fScan) {m_fScanPeek = fScan;}
43  
44         DWORD GetBufferCount() {return m_cBuf;}
45         DWORD GetBufferingCount() {return m_cWritten;}
46         DWORD GetBufferingSamples();
47         void GetBufferInfo(DWORD* pcbTotal, DWORD* pcbBuffered);
48  
49         int                     m_nLPeek;
50         int                     m_nRPeek;
51  
52 protected:
53         void PutBuffer(WAVEHDR*);
54         BOOL PrepareBuffer();
55         void FreeBuffer();
56         void CheckPeek(WAVEHDR* pHdr);
57         static void CALLBACK WaveOutCallback(HWAVE hWave, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
58  
59         DWORD           m_dwBufLen;
60         BOOL            m_fScanPeek;
61         HWAVEOUT        m_hwo;
62         HANDLE          m_hEvent;
63         WAVEHDR*        m_pHdr;
64         DWORD           m_cBuf;
65         DWORD           m_cWritten;
66         DWORD           m_nCurrent;
67         LPBYTE          m_pbBuf;
68         DWORD           m_cbBuf;
69         DWORD           m_dwWritten;
70  
71         CCritSec        m_csecBuff;
72         CCritSec        m_csecDevice;
73  
74         PCMWAVEFORMAT m_pcm;
75  
76         BOOL    m_fFade;
77         int             m_nFadeRate;
78         int             m_nFadeCurrent;
79         int             m_nFadeSamples;
80         void FadeIn(LPBYTE pbBuf, DWORD cbBuf);
81  
82 protected:
83         static DWORD WINAPI WaveOutThreadProc(LPVOID pParam);
84         static void CALLBACK WaveOutCallback2(HWAVE hWave, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
85         void WaveOutThread();
86         BOOL PrepareSubBuffer();
87         void FreeSubBuffer();
88  
89         BOOL            m_fPaused;
90         DWORD           m_dwTotalSamples;
91         BOOL            m_fDoubleBuf;
92         HANDLE          m_hEventThread;
93         HANDLE          m_hThread;
94         DWORD           m_dwThreadId;
95         DWORD           m_nWriteCur;
96         DWORD           m_nSubBuf;
97         WAVEHDR         m_HdrOut[SUBBUF_COUNT];
98         BOOL            m_HdrClear[SUBBUF_COUNT];
99         int                     m_nHdrOut;
100         LPBYTE          m_pbSubBuf;
26 roytam 101  
102 public:
103         DWORD GetVolume();
104         void SetVolume(DWORD dwVolume);
105  
106 protected:
107         DWORD           m_dwVolume;
14 roytam 108 };
109  
110 #endif //!__WAVEOUTPUT_H_INCLUDED