2025-04-27 07:49:33 -04:00

122 lines
3.2 KiB
C++

// This is a class to stream data cusomizable by
// the things we want to vary :
//
// Data
// Iterations
//
#include "Error.h"
class CTest
{
public:
CTest(LPCTSTR lpszCurrentTest,
REFCLSID rclsidObject,
LPCTSTR lpszTestFile,
LONGLONG llTimeOffset = 0) :
m_lpszCurrentTest(lpszCurrentTest),
m_pszTestFile(lpszTestFile),
m_pObject(NULL),
m_clsid(rclsidObject),
m_llTimeOffset(llTimeOffset),
m_sampleCounter(0)
{}
~CTest() {
delete m_pObject;
m_pObject = NULL;
}
HRESULT SimpleStream();
virtual HRESULT InitObject()
{
m_pObject = new CDMOObject;
if (m_pObject == NULL) {
Error(ERROR_TYPE_TEST, E_OUTOFMEMORY, TEXT("Not enough memory"));
g_IShell->Log(1, "TEST ERROR: Not enough memory");
return E_OUTOFMEMORY;
}
return m_pObject->Create(m_clsid, FALSE);
}
virtual HRESULT ProcessType(DWORD dwStreamId, DMO_MEDIA_TYPE *pmt);
virtual HRESULT ProcessSample(DWORD dwStreamId,
DWORD dwFlags,
LONGLONG llStartTime,
LONGLONG llLength,
BYTE *pbData,
DWORD cbData);
virtual HRESULT ProcessOutput(DWORD dwOutputStreamIndex,
DWORD dwFlags,
PBYTE pbData,
DWORD cbData,
LONGLONG llTime,
LONGLONG llLength);
virtual HRESULT ProcessOutputTypeChange(
DWORD dwOutputStreamIndex,
const DMO_MEDIA_TYPE *pmt) = 0;
virtual HRESULT EndOfData();
HRESULT ProcessOutputs();
HRESULT ProcessOutputZero();
// Object
CDMOObject *m_pObject;
// clsid
CLSID m_clsid;
// Test name - should this be thread local?
LPCTSTR m_lpszCurrentTest;
// Test file
LPCTSTR m_pszTestFile;
// Time offset
LONGLONG m_llTimeOffset;
// sample counter
int m_sampleCounter;
};
// Save to disk simple test
class CTestSaveToFile : public CTest
{
public:
CTestSaveToFile(
REFCLSID rclsidObject,
LPCTSTR lpszInputDataFile,
LPCTSTR lpszOutputDataFile,
LONGLONG llTimeOffset
) :
CTest(TEXT("Save data to file"),
rclsidObject,
lpszInputDataFile,
llTimeOffset),
m_pszOutputFile(lpszOutputDataFile)
{
}
HRESULT ProcessOutput(DWORD dwOutputStreamIndex,
DWORD dwFlags,
PBYTE pbData,
DWORD cbData,
LONGLONG llTime,
LONGLONG llLength);
HRESULT ProcessOutputTypeChange(
DWORD dwOutputStreamIndex,
const DMO_MEDIA_TYPE *pmt);
HRESULT Save();
LPCTSTR m_pszOutputFile;
CTestFileWrite m_FileWrite;
};