Capture Driver Confusion

I have been battling a confusing problem for weeks now. One of my
clients makes USB cameras, and I wrote AVStream drivers to drive them.
The drivers do streaming capture just fine, and on most machines, the
property pages and interfaces also work great.

However, on a large fraction of the computers at my client’s site, two
things fail. First, they cannot bring up the “pin property page”.
OleCreatePropertyFrame returns E_FAIL. The filter property page is
fine, but the pin property page does not come up. Second, I cannot
fetch the IAMDroppedStreams interface – I get E_NOINTERFACE. Some of
their applications assume they have lost contact with the camera in that
case.

I could not duplicate this on any of my test machines. Finally, today,
I was able to Remote Desktop into one of their systems to chase this
down. It turns out that kswdmcap.ax had never been registered. As soon
as I ran regsvr32 on kswdmcap.ax, everything worked great.

This, naturally, confuses me. I’ve done MANY camera drivers before, and
I have never run into this. I have this in all the right spots in my INF:
Include = KS.inf, KSCAPTUR.inf
Needs = KS.Registration, KSCAPTUR.Registration.NT

and indeed Device Manager lists kswdmcap.ax, kstvtuner.ax and ksxbar.ax
among my driver files. However, if you look as KSCAPTUR.inf, you’ll see
that it doesn’t have registration information for kswdmcap.ax.

So, who registers it, and what triggers it? One interesting tidbit is
that my INF is in Image class rather than Media class, because that
seems to be the only way to get automatic WIA and TWAIN support. Is it
possible that there is a media-class co-installer that is the one
responsible for registering kswdmcap.ax?

For now, I’ve modified my installer to register it by hand, and
everybody is happy, but I’d like to get to the root of this.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.