Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// helper function for implementing the Clone method on DMOs
#pragma once
#include "dsdmobse.h"
template<class TypeOf_CDirectSoundDMO, class TypeOf_ParamsStruct> HRESULT StandardDMOClone(TypeOf_CDirectSoundDMO *pThis, IMediaObjectInPlace **ppCloned);
// implementation...
// The end of StandardDMOClone is the same for all types. Implement it outside the template
// so that the code isn't duplicated. Copies the input and output types, does the QI for IMediaObjectInPlace,
// and returns with the correct ref count.
HRESULT StandardDMOClone_Ending(IMediaObject *pThis, IMediaObject *pCloned, IMediaObjectInPlace **ppCloned);
template<class TypeOf_CDirectSoundDMO, class TypeOf_ParamsStruct> HRESULT StandardDMOClone(TypeOf_CDirectSoundDMO *pThis, IMediaObjectInPlace **ppCloned) { if (!ppCloned) return E_POINTER;
HRESULT hr = S_OK; TypeOf_CDirectSoundDMO *pCloned = NULL; IUnknown *pUnk = NULL; IMediaObject * pClonedMediaObject = NULL;
try { pCloned = new TypeOf_CDirectSoundDMO( NULL, &hr ); if( SUCCEEDED( hr ) ) { hr = pCloned->NDQueryInterface( IID_IUnknown, (void **) &pUnk ); if( SUCCEEDED(hr ) ) { hr = pUnk->QueryInterface( IID_IMediaObject, (void **) &pClonedMediaObject ); pUnk->Release(); } } } catch(...) {}
if (pCloned == NULL) { return hr; }
// Copy parameter control information
if (SUCCEEDED(hr)) hr = pCloned->CopyParamsFromSource(pThis);
// Copy current parameter values
TypeOf_ParamsStruct params; if (SUCCEEDED(hr)) hr = pThis->GetAllParameters(¶ms); if (SUCCEEDED(hr)) hr = pCloned->SetAllParameters(¶ms);
if (SUCCEEDED(hr)) hr = StandardDMOClone_Ending(pThis, pClonedMediaObject, ppCloned);
return hr; }
|