mplayerc.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:11k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 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, CList<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_UNRECOGNIZEDSWITCH=CLSW_FIXEDSIZE<<1
  90. };
  91. enum
  92. {
  93. VIDRNDT_DS_DEFAULT,
  94. VIDRNDT_DS_OLDRENDERER,
  95. VIDRNDT_DS_OVERLAYMIXER,
  96. VIDRNDT_DS_VMR7WINDOWED,
  97. VIDRNDT_DS_VMR9WINDOWED,
  98. VIDRNDT_DS_VMR7RENDERLESS,
  99. VIDRNDT_DS_VMR9RENDERLESS,
  100. VIDRNDT_DS_NULL_COMP,
  101. VIDRNDT_DS_NULL_UNCOMP,
  102. };
  103. enum
  104. {
  105. VIDRNDT_RM_DEFAULT,
  106. VIDRNDT_RM_DX7,
  107. VIDRNDT_RM_DX9,
  108. };
  109. enum
  110. {
  111. VIDRNDT_QT_DEFAULT,
  112. VIDRNDT_QT_DX7,
  113. VIDRNDT_QT_DX9,
  114. };
  115. enum
  116. {
  117. VIDRNDT_AP_SURFACE,
  118. VIDRNDT_AP_TEXTURE2D,
  119. VIDRNDT_AP_TEXTURE3D,
  120. };
  121. #define AUDRNDT_NULL_COMP _T("Null Audio Renderer (Any)")
  122. #define AUDRNDT_NULL_UNCOMP _T("Null Audio Renderer (Uncompressed)")
  123. enum
  124. {
  125. SRC_CDDA=1, 
  126. SRC_CDXA=SRC_CDDA<<1,
  127. SRC_VTS=SRC_CDXA<<1,
  128. SRC_FLIC=SRC_VTS<<1,
  129. SRC_D2V=SRC_FLIC<<1,
  130. SRC_DTSAC3=SRC_D2V<<1,
  131. SRC_MATROSKA=SRC_DTSAC3<<1,
  132. SRC_SHOUTCAST=SRC_MATROSKA<<1,
  133. SRC_REALMEDIA=SRC_SHOUTCAST<<1,
  134. SRC_AVI=SRC_REALMEDIA<<1,
  135. SRC_RADGT=SRC_AVI<<1,
  136. SRC_ROQ=SRC_RADGT<<1,
  137. SRC_OGG=SRC_ROQ<<1,
  138. SRC_NUT=SRC_OGG<<1,
  139. SRC_MPEG=SRC_NUT<<1,
  140. SRC_DIRAC=SRC_MPEG<<1,
  141. SRC_MPA=SRC_DIRAC<<1,
  142. SRC_DSM=SRC_MPA<<1,
  143. SRC_SUBS=SRC_DSM<<1,
  144. SRC_MP4=SRC_SUBS<<1,
  145. SRC_LAST=SRC_MP4<<1
  146. };
  147. enum
  148. {
  149. TRA_MPEG1=1, 
  150. TRA_MPEG2=TRA_MPEG1<<1,
  151. TRA_RV=TRA_MPEG2<<1,
  152. TRA_RA=TRA_RV<<1,
  153. TRA_MPA=TRA_RA<<1,
  154. TRA_LPCM=TRA_MPA<<1,
  155. TRA_AC3=TRA_LPCM<<1,
  156. TRA_DTS=TRA_AC3<<1,
  157. TRA_AAC=TRA_DTS<<1,
  158. TRA_PS2AUD=TRA_AAC<<1,
  159. TRA_DIRAC=TRA_PS2AUD<<1,
  160. TRA_LAST=TRA_DIRAC<<1
  161. };
  162. enum
  163. {
  164. DVS_HALF, 
  165. DVS_NORMAL, 
  166. DVS_DOUBLE, 
  167. DVS_STRETCH, 
  168. DVS_FROMINSIDE, 
  169. DVS_FROMOUTSIDE
  170. };
  171. typedef enum 
  172. {
  173. FAV_FILE,
  174. FAV_DVD,
  175. FAV_DEVICE
  176. } favtype;
  177. #pragma pack(push, 1)
  178. typedef struct
  179. {
  180. bool fValid;
  181. CSize size; 
  182. int bpp, freq;
  183. } dispmode;
  184. class wmcmd : public ACCEL
  185. {
  186. ACCEL backup;
  187. UINT appcmdorg;
  188. UINT mouseorg;
  189. public:
  190. CString name;
  191. UINT appcmd;
  192. enum {NONE,LDOWN,LUP,LDBLCLK,MDOWN,MUP,MDBLCLK,RDOWN,RUP,RDBLCLK,X1DOWN,X1UP,X1DBLCLK,X2DOWN,X2UP,X2DBLCLK,WUP,WDOWN,LAST};
  193. UINT mouse;
  194. CStringA rmcmd;
  195. int rmrepcnt;
  196. wmcmd(WORD cmd = 0) {this->cmd = cmd;}
  197. wmcmd(WORD cmd, WORD key, BYTE fVirt, LPCTSTR name, UINT appcmd = 0, UINT mouse = NONE, LPCSTR rmcmd = "", int rmrepcnt = 5)
  198. {
  199. this->cmd = cmd;
  200. this->key = key;
  201. this->fVirt = fVirt;
  202. this->appcmd = appcmdorg = appcmd;
  203. this->name = name;
  204. this->mouse = mouseorg = mouse;
  205. this->rmcmd = rmcmd;
  206. this->rmrepcnt = rmrepcnt;
  207. backup = *this;
  208. }
  209. bool operator == (const wmcmd& wc) const
  210. {
  211. return(cmd > 0 && cmd == wc.cmd);
  212. }
  213. void Restore() {*(ACCEL*)this = backup; appcmd = appcmdorg; mouse = mouseorg; rmcmd.Empty(); rmrepcnt = 5;}
  214. bool IsModified() {return(memcmp((const ACCEL*)this, &backup, sizeof(ACCEL)) || appcmd != appcmdorg || mouse != mouseorg || !rmcmd.IsEmpty() || rmrepcnt != 5);}
  215. };
  216. #pragma pack(pop)
  217. #include <afxsock.h>
  218. class CRemoteCtrlClient : public CAsyncSocket
  219. {
  220. protected:
  221. CCritSec m_csLock;
  222. CWnd* m_pWnd;
  223. enum {DISCONNECTED, CONNECTED, CONNECTING} m_nStatus;
  224. CString m_addr;
  225. virtual void OnConnect(int nErrorCode);
  226. virtual void OnClose(int nErrorCode);
  227. virtual void OnReceive(int nErrorCode);
  228. virtual void OnCommand(CStringA str) = 0;
  229. void ExecuteCommand(CStringA cmd, int repcnt);
  230. public:
  231. CRemoteCtrlClient();
  232. void SetHWND(HWND hWnd);
  233. void Connect(CString addr);
  234. int GetStatus() {return(m_nStatus);}
  235. };
  236. class CWinLircClient : public CRemoteCtrlClient
  237. {
  238. protected:
  239. virtual void OnCommand(CStringA str);
  240. public:
  241. CWinLircClient();
  242. };
  243. class CUIceClient : public CRemoteCtrlClient
  244. {
  245. protected:
  246. virtual void OnCommand(CStringA str);
  247. public:
  248. CUIceClient();
  249. };
  250. extern void GetCurDispMode(dispmode& dm);
  251. extern bool GetDispMode(int i, dispmode& dm);
  252. extern void SetDispMode(dispmode& dm);
  253. class CMPlayerCApp : public CWinApp
  254. {
  255. ATL::CMutex m_mutexOneInstance;
  256. CList<CString> m_cmdln;
  257. void PreProcessCommandLine();
  258. void SendCommandLine(HWND hWnd);
  259. public:
  260. CMPlayerCApp();
  261. void ShowCmdlnSwitches();
  262. bool StoreSettingsToIni();
  263. bool StoreSettingsToRegistry();
  264. CString GetIniPath();
  265. bool IsIniValid();
  266. bool GetAppDataPath(CString& path);
  267. // Overrides
  268. // ClassWizard generated virtual function overrides
  269. //{{AFX_VIRTUAL(CMPlayerCApp)
  270. public:
  271. virtual BOOL InitInstance();
  272. virtual int ExitInstance();
  273. //}}AFX_VIRTUAL
  274. // Implementation
  275. class Settings
  276. {
  277. friend class CMPlayerCApp;
  278. bool fInitialized;
  279. class CRecentFileAndURLList : public CRecentFileList
  280. {
  281. public:
  282. CRecentFileAndURLList(UINT nStart, LPCTSTR lpszSection,
  283. LPCTSTR lpszEntryFormat, int nSize,
  284. int nMaxDispLen = AFX_ABBREV_FILENAME_LEN);
  285. virtual void Add(LPCTSTR lpszPathName); // we have to override CRecentFileList::Add because the original version can't handle URLs
  286. };
  287. public:
  288. // cmdline params
  289. int nCLSwitches;
  290. CList<CString> slFiles, slDubs, slSubs, slFilters;
  291. __int64 rtStart;
  292. CSize fixedWindowSize;
  293. bool HasFixedWindowSize() {return fixedWindowSize.cx > 0 || fixedWindowSize.cy > 0;}
  294. // int iFixedWidth, iFixedHeight;
  295. void ParseCommandLine(CList<CString>& cmdln);
  296. bool fXpOrBetter;
  297. int iDXVer;
  298. int nCS;
  299. bool fHideCaptionMenu;
  300. int iDefaultVideoSize;
  301. bool fKeepAspectRatio;
  302. bool fCompMonDeskARDiff;
  303. CRecentFileAndURLList MRU;
  304. CRecentFileAndURLList MRUDub;
  305. CAutoPtrList<Filter> filters;
  306. int iDSVideoRendererType;
  307. int iRMVideoRendererType;
  308. int iQTVideoRendererType;
  309. int iAPSurfaceUsage;
  310. bool fVMRSyncFix;
  311. int iDX9Resizer;
  312. int nVolume;
  313. int nBalance;
  314. bool fMute;
  315. int nLoops;
  316. bool fLoopForever;
  317. bool fRewind;
  318. int iZoomLevel;
  319. // int iVideoRendererType; 
  320. CStringW AudioRendererDisplayName;
  321. bool fAutoloadAudio;
  322. bool fAutoloadSubtitles;
  323. bool fEnableWorkerThreadForOpening;
  324. bool fReportFailedPins;
  325. bool fAllowMultipleInst;
  326. int iTitleBarTextStyle;
  327. int iOnTop;
  328. bool fTrayIcon;
  329. bool fRememberZoomLevel;
  330. bool fShowBarsWhenFullScreen;
  331. int nShowBarsWhenFullScreenTimeOut;
  332. dispmode dmFullscreenRes;
  333. bool fExitFullScreenAtTheEnd;
  334. bool fRememberWindowPos;
  335. bool fRememberWindowSize;
  336. CRect rcLastWindowPos;
  337. UINT lastWindowType;
  338. CSize AspectRatio;
  339. bool fKeepHistory;
  340. CString sDVDPath;
  341. bool fUseDVDPath;
  342. LCID idMenuLang, idAudioLang, idSubtitlesLang;
  343. bool fAutoSpeakerConf;
  344. STSStyle subdefstyle;
  345. bool fOverridePlacement;
  346. int nHorPos, nVerPos;
  347. int nSPCSize;
  348. int nSPCMaxRes;
  349. bool fSPCPow2Tex;
  350. bool fDisabeXPToolbars;
  351. bool fUseWMASFReader;
  352. int nJumpDistS;
  353. int nJumpDistM;
  354. int nJumpDistL;
  355. bool fFreeWindowResizing;
  356. bool fNotifyMSN;
  357. bool fEnableAudioSwitcher;
  358. bool fDownSampleTo441;
  359. bool fAudioTimeShift;
  360. int tAudioTimeShift;
  361. bool fCustomChannelMapping;
  362. DWORD pSpeakerToChannelMap[18][18];
  363. bool fIntRealMedia;
  364. // bool fRealMediaRenderless;
  365. int iQuickTimeRenderer;
  366. float RealMediaQuickTimeFPS;
  367. CStringArray m_pnspresets;
  368. CList<wmcmd> wmcmds;
  369. HACCEL hAccel;
  370. bool fWinLirc;
  371. CString WinLircAddr;
  372. CWinLircClient WinLircClient;
  373. bool fUIce;
  374. CString UIceAddr;
  375. CUIceClient UIceClient;
  376. CMediaFormats Formats;
  377. UINT SrcFilters, TraFilters;
  378. CString logofn;
  379. UINT logoid;
  380. bool logoext;
  381. int mpegdi;
  382. double mpegbright, mpegcont, mpeghue, mpegsat;
  383. bool mpegforcedsubs, mpegplanaryuv;
  384. DWORD mpegpreffmt;
  385. int mpasf;
  386. bool mpanormalize;
  387. int ac3sc, dtssc, aacsc;
  388. bool ac3drc, dtsdrc;
  389. float mpaboost;
  390. bool fHideCDROMsSubMenu;
  391. DWORD priority;
  392. bool launchfullscreen;
  393. BOOL fEnableWebServer;
  394. int nWebServerPort;
  395. bool fWebServerPrintDebugInfo;
  396. bool fWebServerUseCompression;
  397. bool fWebServerLocalhostOnly;
  398. CString WebRoot, WebDefIndex;
  399. CString WebServerCGI;
  400. CString SnapShotPath, SnapShotExt;
  401. CString ISDb;
  402. public:
  403. Settings();
  404. virtual ~Settings();
  405. void UpdateData(bool fSave);
  406. void GetFav(favtype ft, CList<CString>& sl);
  407. void SetFav(favtype ft, CList<CString>& sl);
  408. void AddFav(favtype ft, CString s);
  409. } m_s;
  410. public:
  411. DECLARE_MESSAGE_MAP()
  412. afx_msg void OnAppAbout();
  413. afx_msg void OnFileExit();
  414. afx_msg void OnHelpShowcommandlineswitches();
  415. };
  416. #define AfxGetMyApp() ((CMPlayerCApp*)AfxGetApp())
  417. #define AfxGetAppSettings() ((CMPlayerCApp*)AfxGetApp())->m_s
  418. #define AppSettings CMPlayerCApp::Settings