www.pudn.com > avi_file_source.rar > AVI_FileSource.h


#ifndef __AVI_FILE_SOURCE_H__ 
#define __AVI_FILE_SOURCE_H__ 
//------------------------------------------------------------------------------ 
// File: AVI_FileSource.hpp 
// 
// Desc: DirectShow sample code - header file for async filter. 
// 
// Copyright (c) Microsoft Corporation.  All rights reserved. 
//------------------------------------------------------------------------------ 
 
 
 
// {ED5BEDD4-7890-4370-B88B-D25FB861D71D} 
DEFINE_GUID(CLSID_AVI_File_Source,  
0xed5bedd4, 0x7890, 0x4370, 0xb8, 0x8b, 0xd2, 0x5f, 0xb8, 0x61, 0xd7, 0x1d); 
 
 
 
//  NOTE:  Now this filter does support AVI format -- Anil on 03-02-07 
 
// 
//  Define an internal filter that wraps the base CBaseReader stuff 
// 
class CMemStream : public CAsyncStream 
{ 
public: 
    CMemStream(); 
	~CMemStream(); 
    /*  Initialization */ 
    HRESULT Init(LPBYTE pbData, LONGLONG llLength, LPCTSTR lpszFileName, DWORD dwKBPerSec = INFINITE); 
    HRESULT SetPointer(LONGLONG llPos); 
    HRESULT Read(PBYTE pbBuffer, 
                 DWORD dwBytesToRead, 
                 BOOL bAlign, 
                 LPDWORD pdwBytesRead); 
    LONGLONG Size(LONGLONG *pSizeAvailable); 
    DWORD Alignment(); 
    void Lock(); 
    void Unlock(); 
     
private: 
    CCritSec       m_csLock; 
    PBYTE          m_pbData; 
    LONGLONG       m_llLength; 
    LONGLONG       m_llPosition; 
    DWORD          m_dwKBPerSec; 
    DWORD          m_dwTimeStart; 
	HANDLE		   m_FileHandle; 
};  
 
 
class CAsyncFilter : public CAsyncReader, public IFileSourceFilter 
{ 
public: 
    CAsyncFilter(LPUNKNOWN pUnk, HRESULT *phr); 
    ~CAsyncFilter(); 
    static CUnknown * WINAPI CreateInstance(LPUNKNOWN, HRESULT *); 
 
    DECLARE_IUNKNOWN 
 
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv); 
     
	/*  IFileSourceFilter methods */ 
    //  Load a (new) file 
    STDMETHODIMP Load(LPCOLESTR lpwszFileName, const AM_MEDIA_TYPE *pmt); 
     
 
    // Modeled on IPersistFile::Load 
    // Caller needs to CoTaskMemFree or equivalent. 
    STDMETHODIMP GetCurFile(LPOLESTR * ppszFileName, AM_MEDIA_TYPE *pmt); 
     
 
private: 
    BOOL CAsyncFilter::ReadTheFile(LPCTSTR lpszFileName); 
 
private: 
    LPWSTR     m_pFileName; 
    LONGLONG   m_llSize; 
    PBYTE      m_pbData; 
    CMemStream m_Stream; 
}; 
 
#endif /* __AVI_FILE_SOURCE_H__ */