183 lines
7.5 KiB
C++
183 lines
7.5 KiB
C++
//*****************************************************************************
|
|
//
|
|
// Microsoft Windows Media
|
|
// Copyright ( C) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// FileName: WMVRecompress.h
|
|
//
|
|
// Abstract: Interface of CWMVRecompress class
|
|
//
|
|
//*****************************************************************************
|
|
|
|
#if !defined(AFX_WMVRecompress_H__21A57EE3_8C94_4E10_8092_4C171BCBA68E__INCLUDED_)
|
|
#define AFX_WMVRecompress_H__21A57EE3_8C94_4E10_8092_4C171BCBA68E__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include <wmsdk.h>
|
|
|
|
#ifndef SAFE_RELEASE
|
|
#define SAFE_RELEASE( x ) \
|
|
if ( NULL != x ) \
|
|
{ \
|
|
x->Release( ); \
|
|
x = NULL; \
|
|
}
|
|
#endif // SAFE_RELEASE
|
|
|
|
#ifndef SAFE_ARRAYDELETE
|
|
#define SAFE_ARRAYDELETE( x ) \
|
|
if( x ) \
|
|
{ \
|
|
delete [] x; \
|
|
x = NULL; \
|
|
}
|
|
#endif //SAFE_ARRAYDELETE
|
|
|
|
#ifndef SAFE_CLOSEHANDLE
|
|
#define SAFE_CLOSEHANDLE( h ) \
|
|
if( NULL != h ) \
|
|
{ \
|
|
CloseHandle( h ); \
|
|
h = NULL; \
|
|
}
|
|
#endif //SAFE_CLOSEHANDLE
|
|
|
|
#ifndef SAFE_CLOSEFILEHANDLE
|
|
#define SAFE_CLOSEFILEHANDLE( h ) \
|
|
if( INVALID_HANDLE_VALUE != h ) \
|
|
{ \
|
|
CloseHandle( h ); \
|
|
h = INVALID_HANDLE_VALUE; \
|
|
}
|
|
#endif //SAFE_CLOSEFILEHANDLE
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// This class is used to recompress WMV files. It implements the methods of the
|
|
// interfaces IWMReaderCallback and IWMReaderCallbackAdvanced
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
class CWMVRecompress : public IWMReaderCallback,
|
|
public IWMReaderCallbackAdvanced
|
|
{
|
|
public:
|
|
CWMVRecompress();
|
|
~CWMVRecompress();
|
|
|
|
HRESULT Recompress( const WCHAR * pwszInputFile,
|
|
const WCHAR * pwszOutputFile,
|
|
IWMProfile * pIWMProifle,
|
|
BOOL fMultiPass,
|
|
BOOL fMultiChannel,
|
|
BOOL fSmartRecompression );
|
|
|
|
static HRESULT ListSystemProfile();
|
|
|
|
static HRESULT LoadSystemProfile( DWORD dwProfileIndex,
|
|
IWMProfile ** ppIWMProfile );
|
|
|
|
static HRESULT LoadCustomProfile( const WCHAR * pwszProfileFile,
|
|
IWMProfile ** ppIWMProfile );
|
|
|
|
//
|
|
// IWMReaderCallback interface
|
|
//
|
|
virtual HRESULT STDMETHODCALLTYPE OnSample( /* [in] */ DWORD dwOutputNum,
|
|
/* [in] */ QWORD qwSampleTime,
|
|
/* [in] */ QWORD qwSampleDuration,
|
|
/* [in] */ DWORD dwFlags,
|
|
/* [in] */ INSSBuffer __RPC_FAR * pSample,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
//
|
|
// IWMReaderAdvanced interface
|
|
//
|
|
virtual HRESULT STDMETHODCALLTYPE OnStatus( /* [in] */ WMT_STATUS Status,
|
|
/* [in] */ HRESULT hr,
|
|
/* [in] */ WMT_ATTR_DATATYPE dwType,
|
|
/* [in] */ BYTE __RPC_FAR * pValue,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE OnStreamSample( /* [in] */ WORD wStreamNum,
|
|
/* [in] */ QWORD cnsSampleTime,
|
|
/* [in] */ QWORD cnsSampleDuration,
|
|
/* [in] */ DWORD dwFlags,
|
|
/* [in] */ INSSBuffer __RPC_FAR * pSample,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE OnTime( /* [in] */ QWORD qwCurrentTime,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE OnStreamSelection( /* [in] */ WORD wStreamCount,
|
|
/* [in] */ WORD __RPC_FAR * pStreamNumbers,
|
|
/* [in] */ WMT_STREAM_SELECTION __RPC_FAR * pSelections,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE OnOutputPropsChanged( /* [in] */ DWORD dwOutputNum,
|
|
/* [in] */ WM_MEDIA_TYPE __RPC_FAR * pMediaType,
|
|
/* [in] */ void __RPC_FAR * pvContext );
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE AllocateForOutput( /* [in] */ DWORD dwOutputNum,
|
|
/* [in] */ DWORD cbBuffer,
|
|
/* [out] */ INSSBuffer __RPC_FAR *__RPC_FAR * ppBuffer,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE AllocateForStream( /* [in] */ WORD wStreamNum,
|
|
/* [in] */ DWORD cbBuffer,
|
|
/* [out] */ INSSBuffer __RPC_FAR *__RPC_FAR * ppBuffer,
|
|
/* [in] */ void __RPC_FAR * pvContext);
|
|
|
|
//
|
|
// IUnknown interface
|
|
//
|
|
virtual HRESULT STDMETHODCALLTYPE QueryInterface( /* [in] */ REFIID riid,
|
|
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR * ppvObject);
|
|
|
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
|
|
|
virtual ULONG STDMETHODCALLTYPE Release();
|
|
|
|
protected:
|
|
HRESULT CreateReader( const WCHAR * pwszInputFile );
|
|
|
|
HRESULT CreateWriter( const WCHAR * pwszOutputFile, IWMProfile * pProfile );
|
|
|
|
HRESULT GetOutputMap();
|
|
|
|
HRESULT SetWriterInput( BOOL fMultiChannel, BOOL fSmartRecompression );
|
|
|
|
HRESULT Preprocess();
|
|
|
|
HRESULT Process();
|
|
|
|
HRESULT WaitForCompletion();
|
|
|
|
IWMWriter * m_pWriter;
|
|
IWMWriterPreprocess * m_pWriterPreprocess;
|
|
IWMHeaderInfo * m_pWriterHeaderInfo;
|
|
IWMReader * m_pReader;
|
|
IWMReaderAdvanced * m_pReaderAdvanced;
|
|
IWMHeaderInfo * m_pReaderHeaderInfo;
|
|
IWMProfile * m_pReaderProfile;
|
|
|
|
DWORD m_cWriterInput;
|
|
DWORD m_cReaderOutput;
|
|
DWORD * m_pdwPreprocessPass;
|
|
DWORD * m_pdwOutputToInput;
|
|
DWORD * m_pdwOutputToStream;
|
|
|
|
BOOL m_bPreprocessing;
|
|
HANDLE m_hEvent;
|
|
HRESULT m_hr;
|
|
QWORD m_qwReaderTime;
|
|
BOOL m_fEOF;
|
|
LONG m_cRef;
|
|
|
|
QWORD m_qwDuration;
|
|
QWORD m_dwProgress;
|
|
};
|
|
|
|
#endif // !defined(AFX_WMVRecompress_H__21A57EE3_8C94_4E10_8092_4C171BCBA68E__INCLUDED_)
|