0
votes

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).

1

1 Answers

0
votes

A video capture device which does not implement IAMStreamConfig is a possible scenario, though it's not something expected. Actually it more looks like a bug on video device or underlying driver, however you might want to update your app to use default media type in case of missing IAMStreamConfig (you can still use GraphEdit to check if the device is operational).