2025-11-28 00:35:46 +09:00

138 lines
5.1 KiB
C++

//*****************************************************************************
//
// Microsoft Windows Media
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// FileName: reader.h
//
// Abstract: Definition for CReader class
//
//*****************************************************************************
#if !defined(AFX_READER_H__7F1F622C_A27E_4E47_B7DA_7516F883884C__INCLUDED_)
#define AFX_READER_H__7F1F622C_A27E_4E47_B7DA_7516F883884C__INCLUDED_
#include "stdafx.h"
#include "Writer.h"
#include "ExtensionData.h"
#define MAX_STATS_DELAY 120 //seconds
class CReader :
public IWMReaderCallback,
public IWMReaderCallbackAdvanced
{
public:
CReader();
virtual ~CReader();
public:
HRESULT Init();
HRESULT Configure( const WCHAR *pwszFile );
HRESULT AttachWriter( CWriter *pWriter );
HRESULT Start();
HRESULT Stop( HANDLE *hThread, int cHandles );
HRESULT Close( HANDLE *hThread, int cHandles );
HRESULT GetStats ( WM_READER_STATISTICS *pStats );
void WaitForEvent();
//
//Methods of IWMReaderCallback
//
HRESULT STDMETHODCALLTYPE OnSample( /* [in] */ DWORD dwOutputNum,
/* [in] */ QWORD cnsSampleTime,
/* [in] */ QWORD cnsSampleDuration,
/* [in] */ DWORD dwFlags,
/* [in] */ INSSBuffer __RPC_FAR *pSample,
/* [in] */ void __RPC_FAR *pvContext );
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 );
//
//Methhods of IWMReaderCallbackAdvanced
//
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 );
HRESULT STDMETHODCALLTYPE OnTime( /* [in] */ QWORD cnsCurrentTime,
/* [in] */ void __RPC_FAR *pvContext );
HRESULT STDMETHODCALLTYPE OnStreamSelection( /* [in] */ WORD wStreamCount,
/* [in] */ WORD __RPC_FAR *pStreamNumbers,
/* [in] */ WMT_STREAM_SELECTION __RPC_FAR *pSelections,
/* [in] */ void __RPC_FAR *pvContext )
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE OnOutputPropsChanged( /* [in] */ DWORD dwOutputNum,
/* [in] */ WM_MEDIA_TYPE __RPC_FAR *pMediaType,
/* [in] */ void __RPC_FAR *pvContext )
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE AllocateForStream( /* [in] */ WORD wStreamNum,
/* [in] */ DWORD cbBuffer,
/* [out] */ INSSBuffer __RPC_FAR *__RPC_FAR *ppBuffer,
/* [in] */ void __RPC_FAR *pvContext )
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE AllocateForOutput( /* [in] */ DWORD dwOutputNum,
/* [in] */ DWORD cbBuffer,
/* [out] */ INSSBuffer __RPC_FAR *__RPC_FAR *ppBuffer,
/* [in] */ void __RPC_FAR *pvContext )
{
return E_NOTIMPL;
}
//
//Methods of IUnknown
//
HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject);
ULONG STDMETHODCALLTYPE AddRef( void ) { return 1; }
ULONG STDMETHODCALLTYPE Release( void ) { return 1; }
private :
HRESULT SetCodecOff(IWMProfile* pProfile);
HRESULT CopyScriptsToWriter();
HRESULT CopyAttribToWriter(const WCHAR *pwszName);
private :
CWriter* m_pWriter;
DWORD m_dwTimerId;
HANDLE m_hEvent ;
HRESULT m_hrAsync ;
QWORD m_qwTime;
IWMReaderAdvanced* m_pReaderAdvanced;
IWMReader* m_pReader;
IWMHeaderInfo* m_pReaderHeaderInfo ;
IWMReaderStreamClock* m_pReaderStreamClock ;
bool m_fNetReading;
bool m_fReaderStarted;
bool m_fEOF;
DWORD m_dwAudioStreamNum;
CExtDataList m_ExtDataList;
};
#endif // !defined(AFX_READER_H__7F1F622C_A27E_4E47_B7DA_7516F883884C__INCLUDED_)