I developed a video capture application in C++ with Qt on Windows 7, using the videoInput library (which uses DirectShow). My application works fine with all the devices I previously tried (some inboard capture devices, webcams, a Pinnacle Dazzle DVC 100, a Pinnacle Studio Movie Box, and even a troubled PixelView PlayTV USB Hybrid), but now I bought an AVerMedia DarkCrystal HD Capture Station (in order to support HD capturing) and it simply won't work.
According to the AVerMedia website, it is totally DirectShow-compatible and I don't even need to use its SDK. I followed the manufacturer's installation instructions and I'm able to capture video using its own bundled software (TotalMedia Studio MV), so I suppose it's working properly.
I tried to run my videoInput-based application and also AmCap (DirectShow sample from Microsoft) and both of them behave the same way. They are able to find the device, retrieve its friendly name, but nothing else. AmCap says Error 80004002: Cannot find VCapture:IAMStreamConfig
.
I was debugging AmCap and found out the ICaptureGraphBuilder2::FindInterface
method always returns E_NOINTERFACE
, i.e. no such interface supported, in lines like this:
hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, gcap.pVCap,
IID_IAMStreamConfig, (void **)&gcap.pVSC);
Here, gcap.pBuilder
is a pointer to ICaptureGraphBuilder2
, gcap.pVCap
is a pointer to IBaseFilter
, and gcap.pVSC
is a pointer to IAMStreamConfig
and should receive the return value.
I suppose there's some workaround that could help me to capture from this device, since I could sucessfully retrieve the device name (using the ICreateDevEnum::CreateClassEnumerator
method, based on the CLSID_VideoInputDeviceCategory
class identifier).