Hello, I am new to COM programming and am in need of some advice on how implement the 2 code blocks below to use a DMO Wrapper. Can someone please help me do this.
Thanks in advance.
Code:
CComPtr<IBaseFilter> pHauppaugeWinTV885TunerDemod;
hr = pHauppaugeWinTV885TunerDemod.CoCreateInstance(CLSID_HauppaugeWinTV885BDATunerDemod);
CHECK_HR(hr, L"Cant create hauppage win tv 885 BDA Tuner/Demod");
hr = pGraph->AddFilter(pHauppaugeWinTV885TunerDemod, L"Hauppauge WinTV 885 BDA Tuner/Demod");
CHECK_HR(hr, L"Cant add hauppage wintv 885 bda tuner/demod to graph");
CComPtr<IPin> pHap = GetPin(pHauppaugeWinTV885TunerDemod, L"Input0");
Code:
CComPtr<IPin> GetPin(IBaseFilter *pFilter, LPCOLESTR pinname)
{
CComPtr<IEnumPins> pEnum;
CComPtr<IPin> pPin;
HRESULT hr = pFilter->EnumPins(&pEnum);
if (hrcheck(hr, L"Cant enumerate pins."))
{
return NULL;
}
while (pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_INFO pInfo;
pPin->QueryPinInfo(&pInfo);
BOOL found = !_wcsicmp(pinname, pInfo.achName);
if (pInfo.pFilter)
{
pInfo.pFilter->Release();
}
if (found)
{
return pPin;
}
pPin.Release();
}
//printf(L"Pin not found\n");
return NULL;
}
Using DMOs in DirectShow (Windows)
Code:
// Create the DMO Wrapper filter.
IBaseFilter *pFilter;
HRESULT hr = CoCreateInstance(CLSID_DMOWrapperFilter, NULL,
CLSCTX_INPROC_SERVER, IID_IBaseFilter,
reinterpret_cast<void**>(&pFilter));
if (SUCCEEDED(hr))
{
// Query for IDMOWrapperFilter.
IDMOWrapperFilter *pDmoWrapper;
hr = pFilter->QueryInterface(IID_IDMOWrapperFilter,
reinterpret_cast<void**>(&pDmoWrapper));
if (SUCCEEDED(hr))
{
// Initialize the filter.
hr = pDmoWrapper->Init(CLSID_MyDMO, DMOCATEGORY_VIDEO_EFFECT);
pDmoWrapper->Release();
if (SUCCEEDED(hr))
{
// Add the filter to the graph.
hr = pGraph->AddFilter(pFilter, L"My DMO");
}
}
pFilter->Release();
}