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__ */