00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma once
00023
00024 #ifndef __AFXWIN_H__
00025 #error include 'stdafx.h' before including this file for PCH
00026 #endif
00027
00028 #include "resource.h"
00029 #include <afxadv.h>
00030 #include <atlsync.h>
00031 #include "..\..\subtitles\STS.h"
00032 #include "MediaFormats.h"
00033 #include "fakefiltermapper2.h"
00034
00035 #ifdef UNICODE
00036 #define MPC_WND_CLASS_NAME L"MediaPlayerClassicW"
00037 #else
00038 #define MPC_WND_CLASS_NAME "MediaPlayerClassicA"
00039 #endif
00040
00041 enum
00042 {
00043 WM_GRAPHNOTIFY = WM_APP+1,
00044 WM_REARRANGERENDERLESS,
00045 WM_RESUMEFROMSTATE
00046 };
00047
00048 #define WM_MYMOUSELAST WM_XBUTTONDBLCLK
00049
00051
00052 extern void CorrectComboListWidth(CComboBox& box, CFont* pWndFont);
00053 extern HICON LoadIcon(CString fn, bool fSmall);
00054 extern bool LoadType(CString fn, CString& type);
00055 extern bool LoadResource(UINT resid, CStringA& str, LPCTSTR restype);
00056 extern CString GetContentType(CString fn, CList<CString>* redir = NULL);
00057
00059
00060
00061
00062
00063
00064 enum
00065 {
00066 CS_NONE=0,
00067 CS_SEEKBAR=1,
00068 CS_TOOLBAR=CS_SEEKBAR<<1,
00069 CS_INFOBAR=CS_TOOLBAR<<1,
00070 CS_STATSBAR=CS_INFOBAR<<1,
00071 CS_STATUSBAR=CS_STATSBAR<<1,
00072 CS_LAST=CS_STATUSBAR
00073 };
00074
00075 enum
00076 {
00077 CLSW_NONE=0,
00078 CLSW_OPEN=1,
00079 CLSW_PLAY=CLSW_OPEN<<1,
00080 CLSW_CLOSE=CLSW_PLAY<<1,
00081 CLSW_STANDBY=CLSW_CLOSE<<1,
00082 CLSW_HIBERNATE=CLSW_STANDBY<<1,
00083 CLSW_SHUTDOWN=CLSW_HIBERNATE<<1,
00084 CLSW_LOGOFF=CLSW_SHUTDOWN<<1,
00085 CLSW_AFTERPLAYBACK_MASK=CLSW_CLOSE|CLSW_STANDBY|CLSW_SHUTDOWN|CLSW_HIBERNATE|CLSW_LOGOFF,
00086 CLSW_FULLSCREEN=CLSW_LOGOFF<<1,
00087 CLSW_NEW=CLSW_FULLSCREEN<<1,
00088 CLSW_HELP=CLSW_NEW<<1,
00089 CLSW_DVD=CLSW_HELP<<1,
00090 CLSW_CD=CLSW_DVD<<1,
00091 CLSW_ADD=CLSW_CD<<1,
00092 CLSW_MINIMIZED=CLSW_ADD<<1,
00093 CLSW_REGEXTVID=CLSW_MINIMIZED<<1,
00094 CLSW_REGEXTAUD=CLSW_REGEXTVID<<1,
00095 CLSW_UNREGEXTVID=CLSW_REGEXTAUD<<1,
00096 CLSW_UNREGEXTAUD=CLSW_UNREGEXTVID<<1,
00097 CLSW_STARTVALID=CLSW_UNREGEXTAUD<<1,
00098 CLSW_NOFOCUS=CLSW_STARTVALID<<1,
00099 CLSW_FIXEDSIZE=CLSW_NOFOCUS<<1,
00100 CLSW_UNRECOGNIZEDSWITCH=CLSW_FIXEDSIZE<<1
00101 };
00102
00103 enum
00104 {
00105 VIDRNDT_DS_DEFAULT,
00106 VIDRNDT_DS_OLDRENDERER,
00107 VIDRNDT_DS_OVERLAYMIXER,
00108 VIDRNDT_DS_VMR7WINDOWED,
00109 VIDRNDT_DS_VMR9WINDOWED,
00110 VIDRNDT_DS_VMR7RENDERLESS,
00111 VIDRNDT_DS_VMR9RENDERLESS,
00112 VIDRNDT_DS_NULL_COMP,
00113 VIDRNDT_DS_NULL_UNCOMP,
00114 };
00115
00116 enum
00117 {
00118 VIDRNDT_RM_DEFAULT,
00119 VIDRNDT_RM_DX7,
00120 VIDRNDT_RM_DX9,
00121 };
00122
00123 enum
00124 {
00125 VIDRNDT_QT_DEFAULT,
00126 VIDRNDT_QT_DX7,
00127 VIDRNDT_QT_DX9,
00128 };
00129
00130 enum
00131 {
00132 VIDRNDT_AP_SURFACE,
00133 VIDRNDT_AP_TEXTURE2D,
00134 VIDRNDT_AP_TEXTURE3D,
00135 };
00136
00137 #define AUDRNDT_NULL_COMP _T("Null Audio Renderer (Any)")
00138 #define AUDRNDT_NULL_UNCOMP _T("Null Audio Renderer (Uncompressed)")
00139
00140 enum
00141 {
00142 SRC_CDDA=1,
00143 SRC_CDXA=SRC_CDDA<<1,
00144 SRC_VTS=SRC_CDXA<<1,
00145 SRC_FLIC=SRC_VTS<<1,
00146 SRC_D2V=SRC_FLIC<<1,
00147 SRC_DTSAC3=SRC_D2V<<1,
00148 SRC_MATROSKA=SRC_DTSAC3<<1,
00149 SRC_SHOUTCAST=SRC_MATROSKA<<1,
00150 SRC_REALMEDIA=SRC_SHOUTCAST<<1,
00151 SRC_AVI=SRC_REALMEDIA<<1,
00152 SRC_RADGT=SRC_AVI<<1,
00153 SRC_ROQ=SRC_RADGT<<1,
00154 SRC_OGG=SRC_ROQ<<1,
00155 SRC_NUT=SRC_OGG<<1,
00156 SRC_MPEG=SRC_NUT<<1,
00157 SRC_DIRAC=SRC_MPEG<<1,
00158 SRC_MPA=SRC_DIRAC<<1,
00159 SRC_DSM=SRC_MPA<<1,
00160 SRC_SUBS=SRC_DSM<<1,
00161 SRC_MP4=SRC_SUBS<<1,
00162 SRC_LAST=SRC_MP4<<1
00163 };
00164
00165 enum
00166 {
00167 TRA_MPEG1=1,
00168 TRA_MPEG2=TRA_MPEG1<<1,
00169 TRA_RV=TRA_MPEG2<<1,
00170 TRA_RA=TRA_RV<<1,
00171 TRA_MPA=TRA_RA<<1,
00172 TRA_LPCM=TRA_MPA<<1,
00173 TRA_AC3=TRA_LPCM<<1,
00174 TRA_DTS=TRA_AC3<<1,
00175 TRA_AAC=TRA_DTS<<1,
00176 TRA_PS2AUD=TRA_AAC<<1,
00177 TRA_DIRAC=TRA_PS2AUD<<1,
00178 TRA_LAST=TRA_DIRAC<<1
00179 };
00180
00181 enum
00182 {
00183 DVS_HALF,
00184 DVS_NORMAL,
00185 DVS_DOUBLE,
00186 DVS_STRETCH,
00187 DVS_FROMINSIDE,
00188 DVS_FROMOUTSIDE
00189 };
00190
00191 typedef enum
00192 {
00193 FAV_FILE,
00194 FAV_DVD,
00195 FAV_DEVICE
00196 } favtype;
00197
00198 #pragma pack(push, 1)
00199 typedef struct
00200 {
00201 bool fValid;
00202 CSize size;
00203 int bpp, freq;
00204 } dispmode;
00205
00206 class wmcmd : public ACCEL
00207 {
00208 ACCEL backup;
00209 UINT appcmdorg;
00210 UINT mouseorg;
00211 public:
00212 CString name;
00213 UINT appcmd;
00214 enum {NONE,LDOWN,LUP,LDBLCLK,MDOWN,MUP,MDBLCLK,RDOWN,RUP,RDBLCLK,X1DOWN,X1UP,X1DBLCLK,X2DOWN,X2UP,X2DBLCLK,WUP,WDOWN,LAST};
00215 UINT mouse;
00216 CStringA rmcmd;
00217 int rmrepcnt;
00218 wmcmd(WORD cmd = 0) {this->cmd = cmd;}
00219 wmcmd(WORD cmd, WORD key, BYTE fVirt, LPCTSTR name, UINT appcmd = 0, UINT mouse = NONE, LPCSTR rmcmd = "", int rmrepcnt = 5)
00220 {
00221 this->cmd = cmd;
00222 this->key = key;
00223 this->fVirt = fVirt;
00224 this->appcmd = appcmdorg = appcmd;
00225 this->name = name;
00226 this->mouse = mouseorg = mouse;
00227 this->rmcmd = rmcmd;
00228 this->rmrepcnt = rmrepcnt;
00229 backup = *this;
00230 }
00231 bool operator == (const wmcmd& wc) const
00232 {
00233 return(cmd > 0 && cmd == wc.cmd);
00234 }
00235 void Restore() {*(ACCEL*)this = backup; appcmd = appcmdorg; mouse = mouseorg; rmcmd.Empty(); rmrepcnt = 5;}
00236 bool IsModified() {return(memcmp((const ACCEL*)this, &backup, sizeof(ACCEL)) || appcmd != appcmdorg || mouse != mouseorg || !rmcmd.IsEmpty() || rmrepcnt != 5);}
00237 };
00238 #pragma pack(pop)
00239
00240 #include <afxsock.h>
00241
00242 class CRemoteCtrlClient : public CAsyncSocket
00243 {
00244 protected:
00245 CCritSec m_csLock;
00246 CWnd* m_pWnd;
00247 enum {DISCONNECTED, CONNECTED, CONNECTING} m_nStatus;
00248 CString m_addr;
00249
00250 virtual void OnConnect(int nErrorCode);
00251 virtual void OnClose(int nErrorCode);
00252 virtual void OnReceive(int nErrorCode);
00253
00254 virtual void OnCommand(CStringA str) = 0;
00255
00256 void ExecuteCommand(CStringA cmd, int repcnt);
00257
00258 public:
00259 CRemoteCtrlClient();
00260 void SetHWND(HWND hWnd);
00261 void Connect(CString addr);
00262 int GetStatus() {return(m_nStatus);}
00263 };
00264
00265 class CWinLircClient : public CRemoteCtrlClient
00266 {
00267 protected:
00268 virtual void OnCommand(CStringA str);
00269
00270 public:
00271 CWinLircClient();
00272 };
00273
00274 class CUIceClient : public CRemoteCtrlClient
00275 {
00276 protected:
00277 virtual void OnCommand(CStringA str);
00278
00279 public:
00280 CUIceClient();
00281 };
00282
00283 extern void GetCurDispMode(dispmode& dm);
00284 extern bool GetDispMode(int i, dispmode& dm);
00285 extern void SetDispMode(dispmode& dm);
00286
00287 class CMPlayerCApp : public CWinApp
00288 {
00289 ATL::CMutex m_mutexOneInstance;
00290
00291 CList<CString> m_cmdln;
00292 void PreProcessCommandLine();
00293 void SendCommandLine(HWND hWnd);
00294
00295 public:
00296 CMPlayerCApp();
00297
00298 void ShowCmdlnSwitches();
00299
00300 bool StoreSettingsToIni();
00301 bool StoreSettingsToRegistry();
00302 CString GetIniPath();
00303 bool IsIniValid();
00304
00305 bool GetAppDataPath(CString& path);
00306
00307
00308
00309
00310 public:
00311 virtual BOOL InitInstance();
00312 virtual int ExitInstance();
00313
00314
00315
00316
00317 class Settings
00318 {
00319 friend class CMPlayerCApp;
00320
00321 bool fInitialized;
00322
00323 class CRecentFileAndURLList : public CRecentFileList
00324 {
00325 public:
00326 CRecentFileAndURLList(UINT nStart, LPCTSTR lpszSection,
00327 LPCTSTR lpszEntryFormat, int nSize,
00328 int nMaxDispLen = AFX_ABBREV_FILENAME_LEN);
00329
00330 virtual void Add(LPCTSTR lpszPathName);
00331 };
00332
00333 public:
00334
00335 int nCLSwitches;
00336 CList<CString> slFiles, slDubs, slSubs, slFilters;
00337 __int64 rtStart;
00338 CSize fixedWindowSize;
00339 bool HasFixedWindowSize() {return fixedWindowSize.cx > 0 || fixedWindowSize.cy > 0;}
00340
00341
00342 void ParseCommandLine(CList<CString>& cmdln);
00343
00344 bool fXpOrBetter;
00345 int iDXVer;
00346
00347 int nCS;
00348 bool fHideCaptionMenu;
00349 int iDefaultVideoSize;
00350 bool fKeepAspectRatio;
00351 bool fCompMonDeskARDiff;
00352
00353 CRecentFileAndURLList MRU;
00354 CRecentFileAndURLList MRUDub;
00355
00356 CAutoPtrList<Filter> filters;
00357
00358 int iDSVideoRendererType;
00359 int iRMVideoRendererType;
00360 int iQTVideoRendererType;
00361 int iAPSurfaceUsage;
00362 bool fVMRSyncFix;
00363 int iDX9Resizer;
00364
00365 int nVolume;
00366 int nBalance;
00367 bool fMute;
00368 int nLoops;
00369 bool fLoopForever;
00370 bool fRewind;
00371 int iZoomLevel;
00372
00373 CStringW AudioRendererDisplayName;
00374 bool fAutoloadAudio;
00375 bool fAutoloadSubtitles;
00376 bool fEnableWorkerThreadForOpening;
00377 bool fReportFailedPins;
00378
00379 bool fAllowMultipleInst;
00380 int iTitleBarTextStyle;
00381 int iOnTop;
00382 bool fTrayIcon;
00383 bool fRememberZoomLevel;
00384 bool fShowBarsWhenFullScreen;
00385 int nShowBarsWhenFullScreenTimeOut;
00386 dispmode dmFullscreenRes;
00387 bool fExitFullScreenAtTheEnd;
00388 bool fRememberWindowPos;
00389 bool fRememberWindowSize;
00390 CRect rcLastWindowPos;
00391 UINT lastWindowType;
00392 CSize AspectRatio;
00393 bool fKeepHistory;
00394
00395 CString sDVDPath;
00396 bool fUseDVDPath;
00397 LCID idMenuLang, idAudioLang, idSubtitlesLang;
00398 bool fAutoSpeakerConf;
00399
00400 STSStyle subdefstyle;
00401 bool fOverridePlacement;
00402 int nHorPos, nVerPos;
00403 int nSPCSize;
00404 int nSPCMaxRes;
00405 bool fSPCPow2Tex;
00406
00407 bool fDisabeXPToolbars;
00408 bool fUseWMASFReader;
00409 int nJumpDistS;
00410 int nJumpDistM;
00411 int nJumpDistL;
00412 bool fFreeWindowResizing;
00413 bool fNotifyMSN;
00414
00415 bool fEnableAudioSwitcher;
00416 bool fDownSampleTo441;
00417 bool fAudioTimeShift;
00418 int tAudioTimeShift;
00419 bool fCustomChannelMapping;
00420 DWORD pSpeakerToChannelMap[18][18];
00421
00422 bool fIntRealMedia;
00423
00424 int iQuickTimeRenderer;
00425 float RealMediaQuickTimeFPS;
00426
00427 CStringArray m_pnspresets;
00428
00429 CList<wmcmd> wmcmds;
00430 HACCEL hAccel;
00431
00432 bool fWinLirc;
00433 CString WinLircAddr;
00434 CWinLircClient WinLircClient;
00435 bool fUIce;
00436 CString UIceAddr;
00437 CUIceClient UIceClient;
00438
00439 CMediaFormats Formats;
00440
00441 UINT SrcFilters, TraFilters;
00442
00443 CString logofn;
00444 UINT logoid;
00445 bool logoext;
00446
00447 int mpegdi;
00448 double mpegbright, mpegcont, mpeghue, mpegsat;
00449 bool mpegforcedsubs, mpegplanaryuv;
00450 DWORD mpegpreffmt;
00451
00452 int mpasf;
00453 bool mpanormalize;
00454 int ac3sc, dtssc, aacsc;
00455 bool ac3drc, dtsdrc;
00456 float mpaboost;
00457
00458 bool fHideCDROMsSubMenu;
00459
00460 DWORD priority;
00461 bool launchfullscreen;
00462
00463 BOOL fEnableWebServer;
00464 int nWebServerPort;
00465 bool fWebServerPrintDebugInfo;
00466 bool fWebServerUseCompression;
00467 bool fWebServerLocalhostOnly;
00468 CString WebRoot, WebDefIndex;
00469 CString WebServerCGI;
00470
00471 CString SnapShotPath, SnapShotExt;
00472
00473 CString ISDb;
00474
00475 public:
00476 Settings();
00477 virtual ~Settings();
00478 void UpdateData(bool fSave);
00479
00480 void GetFav(favtype ft, CList<CString>& sl);
00481 void SetFav(favtype ft, CList<CString>& sl);
00482 void AddFav(favtype ft, CString s);
00483 } m_s;
00484
00485 public:
00486 DECLARE_MESSAGE_MAP()
00487 afx_msg void OnAppAbout();
00488 afx_msg void OnFileExit();
00489 afx_msg void OnHelpShowcommandlineswitches();
00490 };
00491
00492 #define AfxGetMyApp() ((CMPlayerCApp*)AfxGetApp())
00493 #define AfxGetAppSettings() ((CMPlayerCApp*)AfxGetApp())->m_s
00494 #define AppSettings CMPlayerCApp::Settings