DVDSAMPL.H

/************************************************************************** 
*
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
* PURPOSE.
*
* Copyright (c) 1993 - 1997 Microsoft Corporation. All Rights Reserved.
*
**************************************************************************/

//
// DVDSampl.h: DVDGraphBuilder sample app header file
//

//
// App menu ids
//
#define IDM_SELECT 101
#define IDM_ABOUT 102
#define IDM_EXIT 103

#define IDM_FLAGBASE 110
#define IDM_HWMAX 111
#define IDM_HWONLY 112
#define IDM_SWMAX 113
#define IDM_SWONLY 114
#define IDM_NOVPE 115
#define IDM_BUILDGRAPH 121
#define IDM_PLAY 122
#define IDM_PAUSE 123
#define IDM_STOP 124
#define IDM_SLOWPLAY 125
#define IDM_FASTFWD 126
#define IDM_VERYFASTFWD 127
#define IDM_FASTRWND 128
#define IDM_VERYFASTRWND 129
#define IDM_MENU 131
#define IDM_CC 132
#define IDM_LANG 133
#define IDM_VIEWLEVEL 134
#define IDM_FULLSCRN 135

// A custom menu message by which the app will be informed of the current
// menu state.
#define IDM_USER_MENUSTATUS 200

//
// Special consts for the app
//
#define SPSTREAM_NOCHANGE 32
#define SPSTREAM_NONE 32
#define MAX_SPSTREAMID 32


//
// Version info related constant ids
//
#define DLG_VERFIRST 400
#define IDC_COMPANY DLG_VERFIRST
#define IDC_FILEDESC DLG_VERFIRST+1
#define IDC_PRODVER DLG_VERFIRST+2
#define IDC_COPYRIGHT DLG_VERFIRST+3
#define IDC_OSVERSION DLG_VERFIRST+4
#define IDC_TRADEMARK DLG_VERFIRST+5
#define DLG_VERLAST DLG_VERFIRST+5

#define IDC_LABEL DLG_VERLAST+1


//
// App string resource ids
//
#define IDS_APP_TITLE 500
#define IDS_WINDOW_TITLE 501
#define IDS_VER_INFO_LANG 502
#define IDS_VERSION_ERROR 503

//
// Playback Settings dialog ids
//
#define IDD_LANGUAGE 600
#define IDD_LANG_AUDIOLANG 601
#define IDD_LANG_SHOWSUBPIC 602
#define IDD_LANG_SPLANG 603
#define IDD_LANG_SPLANGTEXT 604
#define IDD_LANG_AUDIOLANGTEXT 605

#define IDD_VIEWLEVEL 700
#define IDD_VIEW_LEVELTEXT 701
#define IDD_VIEW_LEVELLIST 702


//
// Special user message used by the app for event notification
//
#define WM_DVDPLAY_EVENT (WM_USER+100)


//
// Some enumerated type definitions...
//

// Cursor movement directions
typedef enum {
Cursor_Up = 0, Cursor_Down, Cursor_Left, Cursor_Right
} CURSOR_DIR ;

// Player state
typedef enum {
Unknown = 0, Stopped, Paused, Playing, Scanning
} PLAYER_STATE ;


//
// A class to wrap the viewing level number and names
//
class CViewLevels {
public:
CViewLevels() ;

int GetCount(void) { return m_iCount ; } ;
LPCTSTR GetName(int i) { return m_alpszNames[i] ; } ;
int GetValue(int i) { return m_aiValues[i] ; } ;

private:
LPCTSTR m_alpszNames[6] ;
int m_aiValues[6] ;
int m_iCount ;
} ;


//
// A class to wrap a few language names and the corresponding 2-char codes
//
// We have only 10 languages from ISO 639 as a sample. It can be extended to
// include any other language in ISO 639.
//
class CDVDLanguages {
public:
CDVDLanguages() ;

BOOL GetLangString(LPTSTR lpszCode, LPTSTR lpszLang) ;

private:
LPCTSTR m_alpszCodes[10] ;
LPCTSTR m_alpszLangNames[10] ;
} ;

//
// An easy way of getting the lang code from the DVD_Subpicture/AudioATR data
//
typedef struct _LangInfo {
WORD wRes1 ; // don't care, just skip 2 bytes
WORD wLang ; // lang code as a WORD value
WORD wRes2 ; // don't care, another 2 bytes
} LANGINFO, *PLANGINFO ;


//
// Sample DVD Playback class
//
class CSampleDVDPlay {
public: // public methods for Windows structure to call
CSampleDVDPlay(void) ;
~CSampleDVDPlay(void) ;

void SetAppValues(HINSTANCE hInst, LPTSTR szAppName,
int iAppTitleResId) ;
BOOL InitInstance(int nCmdShow) ;
BOOL InitApplication(void) ;
LPTSTR GetAppName() { return m_szAppName ; } ;
HINSTANCE GetInstance() { return m_hInstance ; } ;
HWND GetWindow() { return m_hWnd ; } ;

void BuildGraph(void) ;
BOOL Play(void) ;
BOOL Pause(void) ;
BOOL Stop(void) ;
BOOL FastForward(void) ;
BOOL VeryFastForward(void) ;
BOOL FastRewind(void) ;
BOOL VeryFastRewind(void) ;
BOOL SlowPlay(void) ;
int MakeSPStreamList(HWND hDlg, int iListID) ;
ULONG GetSPStream(void) { return m_ulSPStream ; } ;
BOOL SetSPState(LONG lStream, BOOL bState) ;
void GetSPLangCode(DVD_SubpictureATR *pSPATR, LPTSTR lpszCode) ;
BOOL GetSPLanguage(ULONG ulStream, BOOL bSPOn, LPTSTR lpszLang, int iMaxLang) ;
int MakeAudioStreamList(HWND hDlg, int iListID) ;
ULONG GetAudioStream(void) { return m_ulAudioStream ; } ;
BOOL SetAudioState(LONG lStream) ;
BOOL GetAudioLanguage(ULONG ulStream, LPTSTR lpszLang, int iMaxLang) ;
void GetAudioLangCode(DVD_AudioATR *pAudATR, LPTSTR lpszCode) ;
int MakeParentalLevelList(HWND hDlg, int iListID) ;
ULONG SetParentalLevel(LONG lLevel) ;
BOOL ShowMenu(void) ;
BOOL ClosedCaption(void) ;
BOOL ShowFullScreen(void) ;
BOOL StartFullScreen(void) ;
BOOL StopFullScreen(void) ;
void CursorMove(CURSOR_DIR Dir) ;
void CursorSelect(void) ;
void SetRenderFlag(DWORD dwFlag) ;
DWORD GetRenderFlag(void) { return m_dwRenderFlag ; } ;
BOOL IsStillOn(void) { return m_bStillOn ; } ;
BOOL IsLangKnown(void) ;
BOOL IsInitialized(void) { return m_eState != Unknown ; } ;
BOOL CanChangeSpeed(void) { return Playing == m_eState || Scanning == m_eState ; } ;
PLAYER_STATE GetState(void) { return m_eState ; } ;

BOOL FileSelect(void) ;
DWORD GetStatusText(AM_DVD_RENDERSTATUS *pStatus,
LPTSTR lpszStatusText,
DWORD dwMaxText) ;
HRESULT OnDVDPlayEvent(WPARAM wParam, LPARAM lParam) ;
void DrawStatus(HDC hDC) ;

private: // private helper methods for the class' own use
LPTSTR GetStringRes (int id) ;
void ReleaseInterfaces(void) ;

private: // internal state info
HINSTANCE m_hInstance ; // current instance
HWND m_hWnd ; // app window handle
TCHAR m_szAppName[50] ; // name of the app
TCHAR m_szTitle[50] ; // title bar text
TCHAR m_achBuffer[100] ; // app's internal buffer for res strings etc.

CViewLevels m_ViewLevels ; // viewing level data (static)
CDVDLanguages m_Langs ; // language list data (static)
BOOL m_bSPOn ; // Is Subpicture On?
ULONG m_ulSPStream ; // SubPicture stream number
ULONG m_ulAudioStream ; // Audio stream number
BOOL m_bMenuOn ; // is DVD menu being shown now?
BOOL m_bCCOn ; // is CC being shown?
BOOL m_bFullScrnOn ; // is showing in full screen mode?
PLAYER_STATE m_eState ; // player state (run/pause/stop/...)
BOOL m_bStillOn ; // is a still image on now?
BOOL m_bLangKnown ; // can ask for audio/subpic lang etc?
ULONG m_ulParentCtrlLevel ;// parental control level of viewing
DWORD m_dwRenderFlag ; // flags to use for building graph
TCHAR m_achFileName[MAX_PATH] ; // current root file name
TCHAR m_achStillText[20] ; // still status text for display
TCHAR m_achTitleText[20] ; // current title info for display
TCHAR m_achChapterText[20] ; // current chapter for display
TCHAR m_achTimeText[50] ; // current time for display

IDvdGraphBuilder *m_pDvdGB ; // IDvdGraphBuilder interface
IVideoWindow *m_pVW ; // IVideoWindow interface
IGraphBuilder *m_pGraph ; // IGraphBuilder interface
IDvdInfo *m_pDvdI ; // IDvdInfo interface
IDvdControl *m_pDvdC ; // IDvdControl interface
IMediaControl *m_pMC ; // IMediaControl interface
IMediaEventEx *m_pME ; // IMediaEventEx interface
IAMLine21Decoder *m_pL21Dec ; // IAMLine21Decoder interface
} ;