text: //------------------------------------------------------------------------------
  // File: iwstdec.h
  //
  // Desc: WST Decoder related definitions and interfaces for ActiveMovie
  //
  // Copyright (c) 1999-2001, Microsoft Corporation.  All rights reserved.
  //------------------------------------------------------------------------------
  // 
  
  #ifndef __IWSTDEC__
  #define __IWSTDEC__
  
  //
  //  Some data types used as WST decoder parameters by the interface
  //
  typedef struct _AM_WST_PAGE {
  	DWORD	dwPageNr ;
  	DWORD	dwSubPageNr ;
  	BYTE	*pucPageData;
  } AM_WST_PAGE, *PAM_WST_PAGE ;
  
  typedef enum _AM_WST_LEVEL {
  	AM_WST_LEVEL_1_5 = 0
  } AM_WST_LEVEL, *PAM_WST_LEVEL ;
  
  typedef enum _AM_WST_SERVICE {
  	AM_WST_SERVICE_None = 0,
  	AM_WST_SERVICE_Text,
  	AM_WST_SERVICE_IDS,
  	AM_WST_SERVICE_Invalid
  } AM_WST_SERVICE, *PAM_WST_SERVICE ;
  
  typedef enum _AM_WST_STATE {
  	AM_WST_STATE_Off = 0,
  	AM_WST_STATE_On
  } AM_WST_STATE, *PAM_WST_STATE ;
  
  typedef enum _AM_WST_STYLE {
  	AM_WST_STYLE_None = 0,
  	AM_WST_STYLE_Invers
  } AM_WST_STYLE, *PAM_WST_STYLE ;
  
  typedef enum _AM_WST_DRAWBGMODE {
  	AM_WST_DRAWBGMODE_Opaque,
  	AM_WST_DRAWBGMODE_Transparent
  } AM_WST_DRAWBGMODE, *PAM_WST_DRAWBGMODE ;
  
  
  #ifdef __cplusplus
  extern "C" {
  #endif // __cplusplus
  
  //
  //  WST Decoder standard COM interface
  //
  DECLARE_INTERFACE_(IAMWstDecoder, IUnknown)
  {
  	public:
  		//
  		// Decoder options to be used by apps
  		//
  
  		// What is the decoder's level
  		STDMETHOD(GetDecoderLevel)(THIS_ AM_WST_LEVEL *lpLevel) PURE ;  
  
  //		STDMETHOD(SetDecoderLevel)(THIS_ AM_WST_LEVEL Level) PURE ;  
  
  		// Which of the services is being currently used
  		STDMETHOD(GetCurrentService)(THIS_ AM_WST_SERVICE *lpService) PURE ;  
  //		STDMETHOD(SetCurrentService)(THIS_ AM_WST_SERVICE Service) PURE ;  
  
  		// Query/Set the service state (On/Off)
  		// supported state values are AM_WSTState_On and AM_WSTState_Off
  		STDMETHOD(GetServiceState)(THIS_ AM_WST_STATE *lpState) PURE ;  
  		STDMETHOD(SetServiceState)(THIS_ AM_WST_STATE State) PURE ;  
  
  		//
  		// Output options to be used by downstream filters
  		//
  
  		// What size, bitdepth etc should the output video be
  		STDMETHOD(GetOutputFormat)(THIS_ LPBITMAPINFOHEADER lpbmih) PURE ;
  		// GetOutputFormat() method, if successful, returns 
  		// 1.  S_FALSE if no output format has so far been defined by downstream filters
  		// 2.  S_OK if an output format has already been defined by downstream filters
  		STDMETHOD(SetOutputFormat)(THIS_ LPBITMAPINFO lpbmi) PURE ;
  
  		// Specify physical color to be used in colorkeying the background 
  		// for overlay mixing
  		STDMETHOD(GetBackgroundColor)(THIS_ DWORD *pdwPhysColor) PURE ;
  		STDMETHOD(SetBackgroundColor)(THIS_ DWORD dwPhysColor) PURE ;
  
  		// Specify if whole output bitmap should be redrawn for each sample
  		STDMETHOD(GetRedrawAlways)(THIS_ LPBOOL lpbOption) PURE ;
  		STDMETHOD(SetRedrawAlways)(THIS_ BOOL bOption) PURE ;
  
  		// Specify if the caption text background should be opaque/transparent
  		STDMETHOD(GetDrawBackgroundMode)(THIS_ AM_WST_DRAWBGMODE *lpMode) PURE ;
  		STDMETHOD(SetDrawBackgroundMode)(THIS_ AM_WST_DRAWBGMODE Mode) PURE ;
  		// supported mode values are AM_WST_DrawBGMode_Opaque and
  		// AM_WST_DrawBGMode_Transparent
  
  		STDMETHOD(SetAnswerMode)(THIS_ BOOL bAnswer) PURE ;
  		STDMETHOD(GetAnswerMode)(THIS_ BOOL* pbAnswer) PURE ;
  
  		STDMETHOD(SetHoldPage)(THIS_ BOOL bHoldPage) PURE ;
  		STDMETHOD(GetHoldPage)(THIS_ BOOL* pbHoldPage) PURE ;
  
  		STDMETHOD(GetCurrentPage)(THIS_ PAM_WST_PAGE pWstPage) PURE;
  		STDMETHOD(SetCurrentPage)(THIS_ AM_WST_PAGE WstPage) PURE;
  
  } ;
  
  #ifdef __cplusplus
  }
  #endif // __cplusplus
  #endif // __IWSTDEC__
  