text: //==========================================================================;
  //
  //  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) 1992 - 1997  Microsoft Corporation.  All Rights Reserved.
  //
  //--------------------------------------------------------------------------;
  
  // CutList related definitions and interfaces for ActiveMovie
  
  #ifndef __CUTLIST__
  #define __CUTLIST__
  
  #ifdef __cplusplus
  extern "C" {
  #endif // __cplusplus
  
  #define CL_DEFAULT_TIME			(-1L)
  
  enum CL_ELEM_STATUS {
  	CL_NOT_PLAYED = 0,
  	CL_PLAYING = 1,
  	CL_FINISHED = 2,
  	CL_STATE_INVALID = 3,
  	CL_STATE_MASK = CL_STATE_INVALID,
  	CL_WAIT_FOR_STATE = 0xF0000000
  };
  
  enum CL_ELEM_FLAGS{
  	CL_ELEM_FIRST = 1,
  	CL_ELEM_LAST = 2,
  	CL_ELEM_NULL = 4,
  	CL_ELEM_ALL  = 0xFFFFFFFF,
  	CL_ELEM_NONE = 0x0L
  };
  
  
  #ifndef __IAMCutListElement_INTERFACE_DEFINED__
  #define __IAMCutListElement_INTERFACE_DEFINED__
  #define __IAMFileCutListElement_INTERFACE_DEFINED__
  #define __IAMVideoCutListElement_INTERFACE_DEFINED__
  #define __IAMAudioCutListElement_INTERFACE_DEFINED__
  
  interface IAMCutListElement : public IUnknown
  {
  public:
          virtual HRESULT __stdcall GetElementStartPosition( 
              /* [out] */ REFERENCE_TIME *pmtStart) = 0;
          
          virtual HRESULT __stdcall GetElementDuration( 
              /* [out] */ REFERENCE_TIME *pmtDuration) = 0;
          
          virtual HRESULT __stdcall IsFirstElement( void ) = 0;
          
          virtual HRESULT __stdcall IsLastElement( void ) = 0; 
          
          virtual HRESULT __stdcall IsNull( void ) = 0;
          
          virtual HRESULT __stdcall ElementStatus( 
              DWORD *pdwStatus,
              DWORD dwTimeoutMs) = 0;
          
  };
  
  
  interface IAMFileCutListElement : public IUnknown
  {
  public:
          virtual HRESULT __stdcall GetFileName( 
              /* [out] */ LPWSTR *ppwstrFileName) = 0;
          
          virtual HRESULT __stdcall GetTrimInPosition( 
              /* [out] */ REFERENCE_TIME *pmtTrimIn) = 0;
          
          virtual HRESULT __stdcall GetTrimOutPosition( 
              /* [out] */ REFERENCE_TIME *pmtTrimOut) = 0;
          
          virtual HRESULT __stdcall GetOriginPosition( 
              /* [out] */ REFERENCE_TIME *pmtOrigin) = 0;
          
          virtual HRESULT __stdcall GetTrimLength( 
              /* [out] */ REFERENCE_TIME *pmtLength) = 0;
          
          virtual HRESULT __stdcall GetElementSplitOffset( 
              /* [out] */ REFERENCE_TIME *pmtOffset) = 0;
          
  };
  
  
  interface IAMVideoCutListElement : public IUnknown
  {
  public:
          virtual HRESULT __stdcall IsSingleFrame( void) = 0;
          
          virtual HRESULT __stdcall GetStreamIndex( 
              /* [out] */ DWORD *piStream) = 0;
          
  };
      
  
  interface IAMAudioCutListElement : public IUnknown
  {
  public:
          virtual HRESULT __stdcall GetStreamIndex( 
              /* [out] */ DWORD *piStream) = 0;
          
          virtual HRESULT __stdcall HasFadeIn( void) = 0;
          
          virtual HRESULT __stdcall HasFadeOut( void) = 0;
          
  };
  
  #endif		// #ifndef IAMCutListElement
  
  
  interface IStandardCutList : public IUnknown
  {
  	public:
  		virtual HRESULT __stdcall AddElement(
  			/* [in] */		IAMCutListElement	*pElement,
  			/* [in] */		REFERENCE_TIME	mtStart,
  			/* [in] */		REFERENCE_TIME	mtDuration)=0;
  
  		virtual HRESULT __stdcall RemoveElement(
  			/* [in] */		IAMCutListElement	*pElement) = 0;
  
  		virtual HRESULT __stdcall GetFirstElement(
  			/* [out] */		IAMCutListElement	**ppElement)=0;
  		virtual HRESULT __stdcall GetLastElement(
  			/* [out] */		IAMCutListElement	**ppElement)=0;
  		virtual HRESULT __stdcall GetNextElement(
  			/* [out] */		IAMCutListElement	**ppElement)=0;
  		virtual HRESULT __stdcall GetPreviousElement(
  			/* [out] */		IAMCutListElement	**ppElement)=0;
  		
  		virtual HRESULT __stdcall GetMediaType(
  			/* [out] */		AM_MEDIA_TYPE *pmt)=0;
  		virtual HRESULT __stdcall SetMediaType(
  			/* [in] */		AM_MEDIA_TYPE *pmt)=0;
  };
  
  
  interface IFileClip : public IUnknown
  {
  	public:
  		virtual HRESULT __stdcall SetFileAndStream(
  			/* [in] */		LPWSTR	wstrFileName,
  			/* [in] */		DWORD	streamNum) = 0;
  		
  		virtual HRESULT __stdcall CreateCut(
  			/* [out] */		IAMCutListElement	**ppElement,
  			/* [in] */		REFERENCE_TIME	mtTrimIn,
  			/* [in] */		REFERENCE_TIME	mtTrimOut,
  			/* [in] */		REFERENCE_TIME	mtOrigin,
  			/* [in] */		REFERENCE_TIME	mtLength,
  			/* [in] */		REFERENCE_TIME	mtOffset) = 0;
  
  		virtual HRESULT __stdcall GetMediaType(
  			/* [out] */		AM_MEDIA_TYPE	*pmt) = 0;
  };
  
  interface ICutListGraphBuilder : public IUnknown
  {
  public:
  		virtual HRESULT __stdcall SetFilterGraph(
  			/*[in]*/	IGraphBuilder	*pFilterGraph)=0;
  
  		virtual HRESULT __stdcall GetFilterGraph(
  			/*[out]*/	IGraphBuilder	**ppFilterGraph)=0;
  		
  		virtual HRESULT __stdcall AddCutList(
  			/*[in]*/	IStandardCutList 	*pCutList,
  			/*[out]*/	IPin			**ppPin)=0;
  		
  		virtual HRESULT __stdcall RemoveCutList(
  			/*[in]*/	IStandardCutList 	*pCutList)=0;
  		
  		virtual HRESULT __stdcall SetOutputFileName(
  			/*[in]*/	const GUID	*pType,
  			/*[in]*/	LPCOLESTR	lpwstrFile,
  			/*[in]*/	IBaseFilter	**ppf,
  			/*[in]*/	IFileSinkFilter	**pSink) = 0;
  		
  		virtual HRESULT __stdcall Render(void) = 0;
  
  		virtual HRESULT __stdcall GetElementFlags(
  			/*[in]*/	IAMCutListElement *pElement,
  			/*[out]*/	LPDWORD lpdwFlags) = 0;
  		
  };
  
  
  #ifdef __cplusplus
  }
  #endif // __cplusplus
  #endif // __CUTLIST__
  