mplayerc.h
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:11k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.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 GNU Make; 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. #pragma once
  22. #ifndef __AFXWIN_H__
  23. #error include 'stdafx.h' before including this file for PCH
  24. #endif
  25. #include "resource.h"       // main symbols
  26. #include <afxadv.h>
  27. #include <atlsync.h>
  28. #include "....subtitlesSTS.h"
  29. #include "MediaFormats.h"
  30. #include "fakefiltermapper2.h"
  31. #ifdef UNICODE
  32. #define MPC_WND_CLASS_NAME L"MediaPlayerClassicW"
  33. #else
  34. #define MPC_WND_CLASS_NAME "MediaPlayerClassicA"
  35. #endif
  36. enum 
  37. {
  38. WM_GRAPHNOTIFY = WM_APP+1,
  39. WM_REARRANGERENDERLESS,
  40. WM_RESUMEFROMSTATE
  41. };
  42. #define WM_MYMOUSELAST WM_XBUTTONDBLCLK
  43. ///////////////
  44. extern void CorrectComboListWidth(CComboBox& box, CFont* pWndFont);
  45. extern HICON LoadIcon(CString fn, bool fSmall);
  46. extern bool LoadType(CString fn, CString& type);
  47. extern bool LoadResource(UINT resid, CStringA& str, LPCTSTR restype);
  48. extern CString GetContentType(CString fn, CAtlList<CString>* redir = NULL);
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CMPlayerCApp:
  51. // See mplayerc.cpp for the implementation of this class
  52. //
  53. // flags for AppSettings::nCS
  54. enum 
  55. {
  56. CS_NONE=0, 
  57. CS_SEEKBAR=1, 
  58. CS_TOOLBAR=CS_SEEKBAR<<1, 
  59. CS_INFOBAR=CS_TOOLBAR<<1, 
  60. CS_STATSBAR=CS_INFOBAR<<1, 
  61. CS_STATUSBAR=CS_STATSBAR<<1, 
  62. CS_LAST=CS_STATUSBAR
  63. };
  64. enum
  65. {
  66. CLSW_NONE=0,
  67. CLSW_OPEN=1,
  68. CLSW_PLAY=CLSW_OPEN<<1,
  69. CLSW_CLOSE=CLSW_PLAY<<1,
  70. CLSW_STANDBY=CLSW_CLOSE<<1,
  71. CLSW_HIBERNATE=CLSW_STANDBY<<1,
  72. CLSW_SHUTDOWN=CLSW_HIBERNATE<<1,
  73. CLSW_LOGOFF=CLSW_SHUTDOWN<<1,
  74. CLSW_AFTERPLAYBACK_MASK=CLSW_CLOSE|CLSW_STANDBY|CLSW_SHUTDOWN|CLSW_HIBERNATE|CLSW_LOGOFF,
  75. CLSW_FULLSCREEN=CLSW_LOGOFF<<1,
  76. CLSW_NEW=CLSW_FULLSCREEN<<1,
  77. CLSW_HELP=CLSW_NEW<<1,
  78. CLSW_DVD=CLSW_HELP<<1,
  79. CLSW_CD=CLSW_DVD<<1,
  80. CLSW_ADD=CLSW_CD<<1,
  81. CLSW_MINIMIZED=CLSW_ADD<<1,
  82. CLSW_REGEXTVID=CLSW_MINIMIZED<<1,
  83. CLSW_REGEXTAUD=CLSW_REGEXTVID<<1,
  84. CLSW_UNREGEXTVID=CLSW_REGEXTAUD<<1,
  85. CLSW_UNREGEXTAUD=CLSW_UNREGEXTVID<<1,
  86. CLSW_STARTVALID=CLSW_UNREGEXTAUD<<1,
  87. CLSW_NOFOCUS=CLSW_STARTVALID<<1,
  88. CLSW_FIXEDSIZE=CLSW_NOFOCUS<<1,
  89. CLSW_MONITOR=CLSW_FIXEDSIZE<<1,
  90. CLSW_UNRECOGNIZEDSWITCH=CLSW_MONITOR<<1
  91. };
  92. enum
  93. {
  94. VIDRNDT_DS_DEFAULT,
  95. VIDRNDT_DS_OLDRENDERER,
  96. VIDRNDT_DS_OVERLAYMIXER,
  97. VIDRNDT_DS_VMR7WINDOWED,
  98. VIDRNDT_DS_VMR9WINDOWED,
  99. VIDRNDT_DS_VMR7RENDERLESS,
  100. VIDRNDT_DS_VMR9RENDERLESS,
  101. VIDRNDT_DS_DXR,
  102. VIDRNDT_DS_NULL_COMP,
  103. VIDRNDT_DS_NULL_UNCOMP,
  104. };
  105. enum
  106. {
  107. VIDRNDT_RM_DEFAULT,
  108. VIDRNDT_RM_DX7,
  109. VIDRNDT_RM_DX9,
  110. };
  111. enum
  112. {
  113. VIDRNDT_QT_DEFAULT,
  114. VIDRNDT_QT_DX7,
  115. VIDRNDT_QT_DX9,
  116. };
  117. enum
  118. {
  119. VIDRNDT_AP_SURFACE,
  120. VIDRNDT_AP_TEXTURE2D,
  121. VIDRNDT_AP_TEXTURE3D,
  122. };
  123. #define AUDRNDT_NULL_COMP _T("Null Audio Renderer (Any)")
  124. #define AUDRNDT_NULL_UNCOMP _T("Null Audio Renderer (Uncompressed)")
  125. enum
  126. {
  127. SRC_CDDA=1, 
  128. SRC_CDXA=SRC_CDDA<<1,
  129. SRC_VTS=SRC_CDXA<<1,
  130. SRC_FLIC=SRC_VTS<<1,
  131. SRC_D2V=SRC_FLIC<<1,
  132. SRC_DTSAC3=SRC_D2V<<1,
  133. SRC_MATROSKA=SRC_DTSAC3<<1,
  134. SRC_SHOUTCAST=SRC_MATROSKA<<1,
  135. SRC_REALMEDIA=SRC_SHOUTCAST<<1,
  136. SRC_AVI=SRC_REALMEDIA<<1,
  137. SRC_RADGT=SRC_AVI<<1,
  138. SRC_ROQ=SRC_RADGT<<1,
  139. SRC_OGG=SRC_ROQ<<1,
  140. SRC_NUT=SRC_OGG<<1,
  141. SRC_MPEG=SRC_NUT<<1,
  142. SRC_DIRAC=SRC_MPEG<<1,
  143. SRC_MPA=SRC_DIRAC<<1,
  144. SRC_DSM=SRC_MPA<<1,
  145. SRC_SUBS=SRC_DSM<<1,
  146. SRC_MP4=SRC_SUBS<<1,
  147. SRC_FLV=SRC_MP4<<1,
  148. SRC_LAST=SRC_FLV<<1
  149. };
  150. enum
  151. {
  152. TRA_MPEG1=1, 
  153. TRA_MPEG2=TRA_MPEG1<<1,
  154. TRA_RV=TRA_MPEG2<<1,
  155. TRA_RA=TRA_RV<<1,
  156. TRA_MPA=TRA_RA<<1,
  157. TRA_LPCM=TRA_MPA<<1,
  158. TRA_AC3=TRA_LPCM<<1,
  159. TRA_DTS=TRA_AC3<<1,
  160. TRA_AAC=TRA_DTS<<1,
  161. TRA_PS2AUD=TRA_AAC<<1,
  162. TRA_DIRAC=TRA_PS2AUD<<1,
  163. TRA_VORBIS=TRA_DIRAC<<1,
  164. TRA_FLV4=TRA_VORBIS<<1,
  165. TRA_VP62=TRA_FLV4<<1,
  166. TRA_LAST=TRA_VP62<<1
  167. };
  168. enum
  169. {
  170. DVS_HALF, 
  171. DVS_NORMAL, 
  172. DVS_DOUBLE, 
  173. DVS_STRETCH, 
  174. DVS_FROMINSIDE, 
  175. DVS_FROMOUTSIDE
  176. };
  177. typedef enum 
  178. {
  179. FAV_FILE,
  180. FAV_DVD,
  181. FAV_DEVICE
  182. } favtype;
  183. #pragma pack(push, 1)
  184. typedef struct
  185. {
  186. bool fValid;
  187. CSize size; 
  188. int bpp, freq;
  189. } dispmode;
  190. class wmcmd : public ACCEL
  191. {
  192. ACCEL backup;
  193. UINT appcmdorg;
  194. UINT mouseorg;
  195. public:
  196. CString name;
  197. UINT appcmd;
  198. enum {NONE,LDOWN,LUP,LDBLCLK,MDOWN,MUP,MDBLCLK,RDOWN,RUP,RDBLCLK,X1DOWN,X1UP,X1DBLCLK,X2DOWN,X2UP,X2DBLCLK,WUP,WDOWN,LAST};
  199. UINT mouse;
  200. CStringA rmcmd;
  201. int rmrepcnt;
  202. wmcmd(WORD cmd = 0) {this->cmd = cmd;}
  203. wmcmd(WORD cmd, WORD key, BYTE fVirt, LPCTSTR name, UINT appcmd = 0, UINT mouse = NONE, LPCSTR rmcmd = "", int rmrepcnt = 5)
  204. {
  205. this->cmd = cmd;
  206. this->key = key;
  207. this->fVirt = fVirt;
  208. this->appcmd = appcmdorg = appcmd;
  209. this->name = name;
  210. this->mouse = mouseorg = mouse;
  211. this->rmcmd = rmcmd;
  212. this->rmrepcnt = rmrepcnt;
  213. backup = *this;
  214. }
  215. bool operator == (const wmcmd& wc) const
  216. {
  217. return(cmd > 0 && cmd == wc.cmd);
  218. }
  219. void Restore() {*(ACCEL*)this = backup; appcmd = appcmdorg; mouse = mouseorg; rmcmd.Empty(); rmrepcnt = 5;}
  220. bool IsModified() {return(memcmp((const ACCEL*)this, &backup, sizeof(ACCEL)) || appcmd != appcmdorg || mouse != mouseorg || !rmcmd.IsEmpty() || rmrepcnt != 5);}
  221. };
  222. #pragma pack(pop)
  223. #include <afxsock.h>
  224. class CRemoteCtrlClient : public CAsyncSocket
  225. {
  226. protected:
  227. CCritSec m_csLock;
  228. CWnd* m_pWnd;
  229. enum {DISCONNECTED, CONNECTED, CONNECTING} m_nStatus;
  230. CString m_addr;
  231. virtual void OnConnect(int nErrorCode);
  232. virtual void OnClose(int nErrorCode);
  233. virtual void OnReceive(int nErrorCode);
  234. virtual void OnCommand(CStringA str) = 0;
  235. void ExecuteCommand(CStringA cmd, int repcnt);
  236. public:
  237. CRemoteCtrlClient();
  238. void SetHWND(HWND hWnd);
  239. void Connect(CString addr);
  240. int GetStatus() {return(m_nStatus);}
  241. };
  242. class CWinLircClient : public CRemoteCtrlClient
  243. {
  244. protected:
  245. virtual void OnCommand(CStringA str);
  246. public:
  247. CWinLircClient();
  248. };
  249. class CUIceClient : public CRemoteCtrlClient
  250. {
  251. protected:
  252. virtual void OnCommand(CStringA str);
  253. public:
  254. CUIceClient();
  255. };
  256. extern void GetCurDispMode(dispmode& dm);
  257. extern bool GetDispMode(int i, dispmode& dm);
  258. extern void SetDispMode(dispmode& dm);
  259. class CMPlayerCApp : public CWinApp
  260. {
  261. ATL::CMutex m_mutexOneInstance;
  262. CAtlList<CString> m_cmdln;
  263. void PreProcessCommandLine();
  264. void SendCommandLine(HWND hWnd);
  265. public:
  266. CMPlayerCApp();
  267. void ShowCmdlnSwitches();
  268. bool StoreSettingsToIni();
  269. bool StoreSettingsToRegistry();
  270. CString GetIniPath();
  271. bool IsIniValid();
  272. bool GetAppDataPath(CString& path);
  273. // Overrides
  274. // ClassWizard generated virtual function overrides
  275. //{{AFX_VIRTUAL(CMPlayerCApp)
  276. public:
  277. virtual BOOL InitInstance();
  278. virtual int ExitInstance();
  279. //}}AFX_VIRTUAL
  280. // Implementation
  281. class Settings
  282. {
  283. friend class CMPlayerCApp;
  284. bool fInitialized;
  285. class CRecentFileAndURLList : public CRecentFileList
  286. {
  287. public:
  288. CRecentFileAndURLList(UINT nStart, LPCTSTR lpszSection,
  289. LPCTSTR lpszEntryFormat, int nSize,
  290. int nMaxDispLen = AFX_ABBREV_FILENAME_LEN);
  291. virtual void Add(LPCTSTR lpszPathName); // we have to override CRecentFileList::Add because the original version can't handle URLs
  292. };
  293. public:
  294. // cmdline params
  295. int nCLSwitches;
  296. CAtlList<CString> slFiles, slDubs, slSubs, slFilters;
  297. __int64 rtStart;
  298. CSize fixedWindowSize;
  299. bool HasFixedWindowSize() {return fixedWindowSize.cx > 0 || fixedWindowSize.cy > 0;}
  300. // int iFixedWidth, iFixedHeight;
  301. int iMonitor;
  302. void ParseCommandLine(CAtlList<CString>& cmdln);
  303. bool fXpOrBetter;
  304. int iDXVer;
  305. int nCS;
  306. bool fHideCaptionMenu;
  307. int iDefaultVideoSize;
  308. bool fKeepAspectRatio;
  309. bool fCompMonDeskARDiff;
  310. CRecentFileAndURLList MRU;
  311. CRecentFileAndURLList MRUDub;
  312. CAutoPtrList<FilterOverride> filters;
  313. int iDSVideoRendererType;
  314. int iRMVideoRendererType;
  315. int iQTVideoRendererType;
  316. int iAPSurfaceUsage;
  317. bool fVMRSyncFix;
  318. int iDX9Resizer;
  319. bool fVMR9MixerMode;
  320. bool fVMR9MixerYUV;
  321. int nVolume;
  322. int nBalance;
  323. bool fMute;
  324. int nLoops;
  325. bool fLoopForever;
  326. bool fRewind;
  327. int iZoomLevel;
  328. // int iVideoRendererType; 
  329. CStringW AudioRendererDisplayName;
  330. bool fAutoloadAudio;
  331. bool fAutoloadSubtitles;
  332. bool fEnableWorkerThreadForOpening;
  333. bool fReportFailedPins;
  334. bool fAllowMultipleInst;
  335. int iTitleBarTextStyle;
  336. bool fTitleBarTextTitle;
  337. int iOnTop;
  338. bool fTrayIcon;
  339. bool fRememberZoomLevel;
  340. bool fShowBarsWhenFullScreen;
  341. int nShowBarsWhenFullScreenTimeOut;
  342. dispmode dmFullscreenRes;
  343. bool fExitFullScreenAtTheEnd;
  344. bool fRememberWindowPos;
  345. bool fRememberWindowSize;
  346. bool fSnapToDesktopEdges;
  347. CRect rcLastWindowPos;
  348. UINT lastWindowType;
  349. CSize AspectRatio;
  350. bool fKeepHistory;
  351. CString sDVDPath;
  352. bool fUseDVDPath;
  353. LCID idMenuLang, idAudioLang, idSubtitlesLang;
  354. bool fAutoSpeakerConf;
  355. STSStyle subdefstyle;
  356. bool fOverridePlacement;
  357. int nHorPos, nVerPos;
  358. int nSPCSize;
  359. int nSPCMaxRes;
  360. bool fSPCPow2Tex;
  361. bool fEnableSubtitles;
  362. bool fDisabeXPToolbars;
  363. bool fUseWMASFReader;
  364. int nJumpDistS;
  365. int nJumpDistM;
  366. int nJumpDistL;
  367. bool fFreeWindowResizing;
  368. bool fNotifyMSN;
  369. bool fNotifyGTSdll;
  370. bool fEnableAudioSwitcher;
  371. bool fDownSampleTo441;
  372. bool fAudioTimeShift;
  373. int tAudioTimeShift;
  374. bool fCustomChannelMapping;
  375. DWORD pSpeakerToChannelMap[18][18];
  376. bool fAudioNormalize;
  377. bool fAudioNormalizeRecover;
  378. float AudioBoost;
  379. bool fIntRealMedia;
  380. // bool fRealMediaRenderless;
  381. int iQuickTimeRenderer;
  382. float RealMediaQuickTimeFPS;
  383. CStringArray m_pnspresets;
  384. CList<wmcmd> wmcmds;
  385. HACCEL hAccel;
  386. bool fWinLirc;
  387. CString WinLircAddr;
  388. CWinLircClient WinLircClient;
  389. bool fUIce;
  390. CString UIceAddr;
  391. CUIceClient UIceClient;
  392. CMediaFormats Formats;
  393. UINT SrcFilters, TraFilters;
  394. CString logofn;
  395. UINT logoid;
  396. bool logoext;
  397. bool fHideCDROMsSubMenu;
  398. DWORD priority;
  399. bool launchfullscreen;
  400. BOOL fEnableWebServer;
  401. int nWebServerPort;
  402. bool fWebServerPrintDebugInfo;
  403. bool fWebServerUseCompression;
  404. bool fWebServerLocalhostOnly;
  405. CString WebRoot, WebDefIndex;
  406. CString WebServerCGI;
  407. CString SnapShotPath, SnapShotExt;
  408. int ThumbRows, ThumbCols, ThumbWidth;
  409. CString ISDb;
  410. struct Shader {CString label, target, srcdata;};
  411. CAtlList<Shader> m_shaders;
  412. CString m_shadercombine;
  413. public:
  414. Settings();
  415. virtual ~Settings();
  416. void UpdateData(bool fSave);
  417. void GetFav(favtype ft, CAtlList<CString>& sl);
  418. void SetFav(favtype ft, CAtlList<CString>& sl);
  419. void AddFav(favtype ft, CString s);
  420. } m_s;
  421. public:
  422. DECLARE_MESSAGE_MAP()
  423. afx_msg void OnAppAbout();
  424. afx_msg void OnFileExit();
  425. afx_msg void OnHelpShowcommandlineswitches();
  426. };
  427. #define AfxGetMyApp() ((CMPlayerCApp*)AfxGetApp())
  428. #define AfxGetAppSettings() ((CMPlayerCApp*)AfxGetApp())->m_s
  429. #define AppSettings CMPlayerCApp::Settings