Accessing the IMediaSample Interface for C
The actual DirectX IMediaSample interface can be accessed through the IltmmObjectWrapper interface using the following code:
HRESULT UnwrapMediaSample(IltmmMediaSampleDisp* pDispatch, IMediaSample** ppMediaSample)
{
if(!ppMediaSample)
return E_POINTER;
if(!pDispatch)
{
// NULL dispatch means NULL MediaSample
*ppMediaSample = NULL;
}
else
{
HRESULT hr;
IUnknown* pObject;
// query the IltmmObjectWrapper interface
IltmmObjectWrapper* pWrapper;
hr = IUnknown_QueryInterface(pDispatch, &IID_IltmmObjectWrapper, (void**) &pWrapper);
if(FAILED(hr))
return hr;
// get the wrapped object
hr = IltmmObjectWrapper_GetWrappedObject (pWrapper, &pObject);
IUnknown_Release(pWrapper);
if(FAILED(hr))
return hr;
// query the IMediaSample interface
hr = IUnknown_QueryInterface(pObject, &IID_IMediaSample, (void**) ppMediaSample);
IUnknown_Release(pObject);
if(FAILED(hr))
return hr;
}
return S_OK;
}
The actual DirectX IMediaSample interface can be accessed through the IltmmObjectWrapper interface using the following code:
L_MULTIMEDIATEX_API HRESULT UnwrapMediaSampleExample (IltmmMediaSampleDisp* pDispatch, IMediaSample** ppMediaSample) { if(!ppMediaSample) return E_POINTER; if(!pDispatch) { // NULL dispatch means NULL MediaSample *ppMediaSample = NULL; } else { HRESULT hr; IUnknown* pObject; // query the IltmmObjectWrapper interface IltmmObjectWrapper* pWrapper; hr =IUnknown_QueryInterface(pDispatch, &IID_IltmmObjectWrapper, (void**) &pWrapper); if(FAILED(hr)) return hr; // get the wrapped object hr = IltmmObjectWrapper_GetWrappedObject (pWrapper, &pObject); IUnknown_Release(pWrapper); if(FAILED(hr)) return hr; // query the IMediaSample interface hr = IUnknown_QueryInterface(pObject, &IID_IMediaSample, (void**) ppMediaSample); IUnknown_Release(pObject); if(FAILED(hr)) return hr; } return S_OK; }