rtoss - Blame information for rev 26

Subversion Repositories:
Rev:
Rev Author Line No. Line
14 roytam 1 /*
2  *  GSPlayer - The audio player for WindowsCE
3  *  Copyright (C) 2003  Y.Nagamidori
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 of the License, or
8  *  (at your option) 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 this program; if not, write to the Free Software
17  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18  */
19  
20  
21 #if !defined(__PLAYER_H_INCLUDED)
22 #define __PLAYER_H_INCLUDED
23  
24 #if _MSC_VER > 1000
25 #pragma once
26 #endif // _MSC_VER > 1000
27  
28 #include "helper.h"
29 #include "mahelper.h"
30 #include "reader.h"
31 #include "decoder.h"
32 #include "effect.h"
33 #include "output.h"
34 #include "Receiver.h"
35 #include "libovd.h"
36 #include "mapplugin.h"
37 #include "MultiBuff.h"
38  
39 #include <mmsystem.h>
40 #include <mmreg.h>
41 #include <msacm.h>
42  
43 #define MPG_SCAN_BUFF_LEN       4
44 #define MPG_FILE_BUFF_LEN       2048
45 #define NET_READ_BUFF_LEN       4096
46 #define RET_EOF                 0
47 #define RET_STOP                1
48 #define RET_ERROR               2
49  
50 class CPlayer
51 {
52 public:
53         CPlayer();
54         ~CPlayer();
55  
56         BOOL OpenFile(LPCTSTR pszFile);
57         BOOL OpenURL(LPCTSTR pszURL);
58         void Close();
59         void SetMessageWindow(HWND hwndMessage);
60  
61         BOOL Play();
62         void Pause();
63         void Stop();
64         BOOL Ff(long lSkip);
65         BOOL Rew(long lSkip);
66         BOOL Seek(long lTime);
67  
68         long GetCurrent();
69         long GetDuration();
70         MAP_STATUS GetStatus();
71  
72         void SetEqualizer(EQUALIZER* value);
73         void GetEqualizer(EQUALIZER* value);
74         void SetEffect(int nEffect, EFFECT* value);
75         void GetEffect(int nEffect, EFFECT* value);
76         void SetBassBoostLevel(int nLevel);
77         int GetBassBoostLevel();
78  
79         void GetFileInformation(MAP_INFORMATION* pInfo);
80         BOOL GetId3Tag(ID3TAGV1* pTag);
81         BOOL SetId3Tag(ID3TAGV1* pTag);
82         void GetOptions(MAP_OPTIONS* pOptions);
83         BOOL SetOptions(MAP_OPTIONS* pOptions);
84         BOOL GetScanPeek() {return m_Output.GetScanPeek();}
85         void SetScanPeek(BOOL fScan) {m_Output.SetScanPeek(fScan);}
86         void AudioDeviceClose();
87         void GetBufferInfo(DWORD* pcbTotalAudio, DWORD* pcbBufferedAudio,
88                                                         DWORD* pcbTotalStream, DWORD* pcbBufferedStream);
89  
90         BOOL GetStreamInfo(LPTSTR pszName, LPTSTR pszGenre, LPTSTR pszURL);    
91         BOOL GetStreamTitle(LPTSTR pszTitle);
92         void GetStreamingOptions(MAP_STREAMING_OPTIONS* pOptions);
93         BOOL SetStreamingOptions(MAP_STREAMING_OPTIONS* pOptions);
94         MAP_STREAMING_STATUS GetStreamingStatus();
95         int GetStreamingBufferingCount();
26 roytam 96  
97         DWORD GetVolume(BOOL bSysVolume);
98         void SetVolume(DWORD dwVolume, BOOL bSysVolume);
14 roytam 99  
100 protected:
101         CReader                 m_Reader;
102         CReceiver               m_Receiver;
103         CDecoder                m_Decoder;
104         CDelayEffect    m_Reverb;
105         CDelayEffect    m_Echo;
106         CSurroundEffect m_Surround;
107         CBassBoost              m_BassBoost;
108         C3DChorus               m_3DChorus;
109         COutput                 m_Output;
110  
111         HWND            m_hwndMessage;
112         TCHAR           m_szFile[MAX_PATH];
113  
114         DWORD           m_dwThreadID;
115         HANDLE          m_hThread;
116  
117         DWORD           m_nDuration;    // Duration (samples)
118         DWORD           m_nSeek;                // Last seek position (samples)
119         DWORD           m_nWritten;             // Written samples from Last seeking
120         BOOL m_fSuppress;
121  
122         MPEG_AUDIO_INFO                 m_Info;
123         MAP_STATUS                              m_Status;
124         MAP_STREAMING_STATUS    m_StreamingStatus;
125         EQUALIZER                               m_Equalizer;
126  
127         WAVEHDR*        m_pOutHdr;
128         DWORD           m_cbOutBuf;
129         DWORD           m_cbOutBufLeft;
130  
131         BOOL            m_fPreamp;
132         int                     m_nPreamp;
133         int                     m_nPreampRate;
134  
135         BOOL            m_fSeek;
136         BOOL            m_fPlay;
137         BOOL            m_fFileBegin;
26 roytam 138         BOOL            m_fStop;
14 roytam 139  
140         enum {OPEN_NONE = 0, OPEN_MPG_FILE, OPEN_OV_FILE, OPEN_WAV_FILE, OPEN_PLUGIN, OPEN_URL} m_fOpen;
141  
142 protected:
143         void PostCallbackMessage(UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0);
144         void UpdatePeek();
145         void UpdateStatus(MAP_STATUS status, BOOL fError = FALSE);
146         static DWORD WINAPI PlayerThreadProc(LPVOID pParam);
147         void FilePlayerThread();
148  
149         BOOL PreparePlayback();
150         BOOL UnpreparePlayback(BOOL fEos = FALSE, BOOL fError = FALSE);
151         void OutputBuffer(WAVEHDR* pHdr, DWORD cbRecorded);
152         BOOL WaitForPrebuffering(int nBuffering = 0);
153         void Preamp(LPBYTE pbBuf, DWORD cbBuf); // for Ogg/Wav
154  
155 private:
156         MAP_OPTIONS m_Options;
157         CCritSec        m_csecThread;
158         CCritSec        m_csecInterface;
159  
160 // for MPEG Audio
161 protected:
162         DWORD MpgPlayerThread();
163         int MpgRender(LPBYTE pbInBuf, DWORD cbInBuf, LPDWORD pcbProceed);
164  
165         BOOL MpgOpenFile(LPCTSTR pszFile);
166         BOOL MpgScanFile();
167         BOOL MpgSeekFile(long lTime);
168         void MpgStop();
169         void MpgClose();
170         BOOL MpgGetId3Tag(ID3TAGV1* pTag);
171         BOOL MpgScanFileNormally();
172         BOOL MpgScanFileCompletely();
173  
174 // for Ogg Vorbis
175 protected:
176         HANDLE  m_hOvd;
177         DWORD OvPlayerThread();
178  
179         BOOL OvOpenFile(LPCTSTR pszFile);
180         BOOL OvScanFile();
181         BOOL OvSeekFile(long lTime);
182         void OvStop();
183         void OvClose();
184         BOOL OvGetId3Tag(ID3TAGV1* pTag);
185  
186 public:
187         BOOL OvIsValidFile(LPCTSTR pszFile);
188         BOOL OvGetId3TagFile(LPCTSTR pszFile, ID3TAGV1* pTag);
189  
190 // for RIFF Wave (ACM & PCM)
191 protected:
192         HACMSTREAM              m_hAcm;
193         WAVEFORMATEX*   m_pwfxSrc;
194         WAVEFORMATEX*   m_pwfxDst;
195         LONGLONG                m_llDataOffset;
196         DWORD                   m_dwDataSize;
197         DWORD                   m_dwCurrentSize;
198  
199         DWORD WavPlayerThread();
200         int WavRender(LPBYTE pbInBuf, DWORD cbInBuf, LPDWORD pcbProceed);
201  
202         BOOL WavOpenFile(LPCTSTR pszFile);
203         BOOL WavScanFile();
204         BOOL WavSeekFile(long lTime);
205         void WavStop();
206         void WavClose();
207  
208 public:
209         BOOL WavIsValidFile(LPCTSTR pszFile);
210  
211 // for streaming
212 protected:
213         enum {NET_OPEN_NONE, NET_OPEN_MPEG, NET_OPEN_OV, NET_OPEN_PLUGIN}m_fNet;
214         ovd_stream_buf* m_pOvd_buf;
215         TCHAR m_szOvdTitle[MAX_URL];
216  
217         void NetStreamingThread();
218         void NetStop();
219         void NetClose();
220         BOOL NetReconnect();
221  
222         BOOL NetParseMpegStream(LPBYTE pbBuf, DWORD cbBuf);
223         BOOL NetParseOvStream(LPBYTE pbBuf, DWORD cbBuf);
224         void NetMpegStreaming(LPBYTE pbBuf, DWORD cbBuf);
225         void NetOvStreaming(LPBYTE pbBuf, DWORD cbBuf);
26 roytam 226         void NetCheckStreamId3Tag(LPBYTE pbBuf, DWORD cbBuf);
14 roytam 227  
228 // for plug-in
229 public:
230         BOOL PlugInIsValidFile(LPCTSTR pszFile);
231         BOOL PlugInGetId3TagFile(LPCTSTR pszFile, ID3TAGV1* pTag);
232         int PlugInGetCount();
233         MAP_DEC_PLUGIN* PlugInGetInterface(int nPlugIn);
234  
235 protected:
236         int                                     m_nFilePlugIn;
237         int                                     m_nStreamingPlugIn;
238         int                                     m_nPlugInBps;
239         CMultiBuff                      m_PlugInInfo;
240  
241         void PlugInLoad();
242         void PlugInFree();
243         void PlugInSetEqualizer();
244  
245         BOOL PlugInOpenFile(LPCTSTR pszFile);
246         BOOL PlugInSeekFile(long lTime);
247         DWORD PlugInPlayerThread();
248         void PlugInStop();
249         void PlugInClose();
250         BOOL PlugInGetId3Tag(ID3TAGV1* pTag);
251  
252         BOOL PlugInParseStream(LPBYTE pbBuf, DWORD cbBuf);
253         void PlugInStreaming(LPBYTE pbBuf, DWORD cbBuf);
254         void PlugInStopStreaming();
255 };
256  
257 #endif //!__PLAYER_H_INCLUDED