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.
|
|
#include "clone.h"
HRESULT StandardDMOClone_Ending(IMediaObject *pThis, IMediaObject *pCloned, IMediaObjectInPlace **ppCloned) { HRESULT hr = S_OK;
// Copy the input and output types
DMO_MEDIA_TYPE mt; DWORD cInputStreams = 0; DWORD cOutputStreams = 0; pThis->GetStreamCount(&cInputStreams, &cOutputStreams);
for (DWORD i = 0; i < cInputStreams && SUCCEEDED(hr); ++i) { hr = pThis->GetInputCurrentType(i, &mt); if (hr == DMO_E_TYPE_NOT_SET) { hr = S_OK; // great, don't need to set the cloned DMO
} else if (SUCCEEDED(hr)) { hr = pCloned->SetInputType(i, &mt, 0); } }
for (i = 0; i < cOutputStreams && SUCCEEDED(hr); ++i) { hr = pThis->GetOutputCurrentType(i, &mt); if (hr == DMO_E_TYPE_NOT_SET) { hr = S_OK; // great, don't need to set the cloned DMO
} else if (SUCCEEDED(hr)) { hr = pCloned->SetOutputType(i, &mt, 0); } }
if (SUCCEEDED(hr)) hr = pCloned->QueryInterface(IID_IMediaObjectInPlace, (void**)ppCloned);
// Release the object's original ref. If clone succeeded (made it through QI) then returned pointer
// has one ref. If we failed, refs drop to zero, freeing the object.
pCloned->Release(); return hr; }
|