Can't find KSProperty

I have a USB camera with 2 additional Property Pages and I need to control this data from my program. I got this Property Page KSProxy Plug-in from vendor-supplied installer, but I don’t have Interface Handler Plug-in. So I directly use IKsControl interface on my DirectShow filter to access KSProperties, but I can’t find disiered set there.
In registry I’ve got a folder in \Control\MediaSets\ with CLSIDs of those Property Pages. I suposed, this folder must be named with the corresponding Property Set GUID, but when I use that GUID in IKsControl::KsProperty and correctly read all members from this Property Set, they definitly doesn’t look like fields in Property Pages.
I also check filter’s “Misc. Supported PropertySets” in KSStudio and found 8 GUIDs, that “KSStudio does not recognize”. I read all members in all those Property Sets, but there is no data from the Property Pages too.
Also i thought, those properties can be implemented by UVC Extension Unit, but KSStudio shows me 0 nodes in my filter, so i can’t find EU node.

xxxxx@yandex.ru wrote:

I have a USB camera with 2 additional Property Pages and I need to control this data from my program. I got this Property Page KSProxy Plug-in from vendor-supplied installer, but I don’t have Interface Handler Plug-in. So I directly use IKsControl interface on my DirectShow filter to access KSProperties, but I can’t find disiered set there.

In registry I’ve got a folder in \Control\MediaSets\ with CLSIDs of those Property Pages. I suposed, this folder must be named with the corresponding Property Set GUID, but when I use that GUID in IKsControl::KsProperty and correctly read all members from this Property Set, they definitly doesn’t look like fields in Property Pages.

If you have a registry key called
“Control\MediaSets{guid1}\PropertyPages{guid2}”, then {guid2} is the
CLSID of the property page, and {guid1} is the property set identifier.
You should also be able to find "Control\MediaInterfaces{guid1}, and
the IID value there is the COM IID of the interface that corresponds to
the property set. It is often the same as the property set ID, although
it’s not required to be.

It’s possible, of course, that the fields in the property page display
are processed versions of what’s in the property set. It’s most
convenient if you have a one-to-one correspondence between the property
page controls and the property set values, but nothing requires that.

Also i thought, those properties can be implemented by UVC Extension Unit, but KSStudio shows me 0 nodes in my filter, so i can’t find EU node.

If this is a UVC device, then the only way to get custom property sets
is to have an Extension Unit. Normally, a UVC camera will have a camera
terminal node, a processing unit node (for brightness and contrast), and
extension unit node, and a streaming terminal node. Ksstudio ought to
be showing you that topology.

Are you sure it’s UVC? Not all video cameras are. If it’s not UVC,
then the driver could be doing anything. Indeed, they might even have a
filter that is providing these properties.

If you do have a UVC XU, then you have to use a KSP_NODE structure in
the IKsControl::KsProperty call, not a KSPROPERTY, and specify the node
number in the NodeId. In years of trying, however, I have never
discovered how to determine the node number for an XU node. I’ve had to
learn it with KSStudio and hardcode the node number in the application.


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

> If you have a registry key called “Control\MediaSets{guid1}\PropertyPages{guid2}”, then {guid2} is the CLSID of the property page, and {guid1} is the property set identifier.
You should also be able to find "Control\MediaInterfaces{guid1}, and the IID value there is the COM IID of the interface that corresponds to the property set. It is often the same as the property set ID, although it’s not required to be.

Yes, I was talking about this {guid1} in MediaSets, but I don’t have it in MediaInterfaces. So, I should say there in no COM Interface Handler Plug-in for this set. That’s why I directly use {guid1} in IKsControl::KsProperty, but there is no desired data from Property Pages.

If this is a UVC device, then the only way to get custom property sets
is to have an Extension Unit. Normally, a UVC camera will have a camera
terminal node, a processing unit node (for brightness and contrast), and
extension unit node, and a streaming terminal node. Ksstudio ought to
be showing you that topology.

KSStudio shows me those nodes on another simple USB camera, but there is 0 nodes on my camera. Also on simple camera it shows “service = usbvideo”, but on mine “service = UVC”. It seems that my camera is not regular Usb Video Class, but confused me with writing everywhere “UVC”. It uses vendor’s usbcam_279.sys driver instead of usbvideo.sys, but i think they are quite similar.
Using USBView I found 2 USB Interfaces on my camera: Video Streaming SubClass and Vendor Specific Class, instead of standart Video Control SubClass on simple camera.

xxxxx@yandex.ru wrote:

KSStudio shows me those nodes on another simple USB camera, but there is 0 nodes on my camera. Also on simple camera it shows “service = usbvideo”, but on mine “service = UVC”. It seems that my camera is not regular Usb Video Class, but confused me with writing everywhere “UVC”. It uses vendor’s usbcam_279.sys driver instead of usbvideo.sys, but i think they are quite similar.
Using USBView I found 2 USB Interfaces on my camera: Video Streaming SubClass and Vendor Specific Class, instead of standart Video Control SubClass on simple camera.

In that case, the camera you have is not actually UVC, and I’m afraid
you are screwed. There is simply no way to predict what the vendor is
doing. They must have a published DLL interface somewhere.


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

I found that my camera is based on The Imaging Source product. So I got IC SDK to control it.
But it seems like it uses DirectShow/KernelStreaming stack anyway. So why can’t I do the same work with properties, using DS and KS interfaces? It will be an additional problem for me to fully switch on this API instead of DirectShow.
Also I suspect, that camera minidriver works under Steam Class Driver model, not AVStream. How can I check this?

xxxxx@yandex.ru wrote:

I found that my camera is based on The Imaging Source product. So I got IC SDK to control it.
But it seems like it uses DirectShow/KernelStreaming stack anyway.

To four decimal places, every USB camera does.

So why can’t I do the same work with properties, using DS and KS interfaces? It will be an additional problem for me to fully switch on this API instead of DirectShow.

I’m sure you could, but you need the recipe from the vendor. Their API
is undoubtedly using the IKsControl interface to talk to their driver,
but without special knowledge from them, you don’t know what properties
they support, nor what the parameters mean. There is simply no way to
discover what a custom KS property set means. Have you tried writing
the vendor?

Also I suspect, that camera minidriver works under Steam Class Driver model, not AVStream. How can I check this?

It doesn’t matter in the slightest. Stream Class is “Kernel Streaming
version 1”. AVStream is “Kernel Streaming version 2”. To the
applications above, the two are absolutely identical.


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

Thank you, Tim.
You’re the only on-line advisor all over the Internet in this narrow issue.
I’ll explore vendors materials more clearly and write them later.
If this way will be too complicated, I’ll try to mix my OpenCV project with IC SDK.