Hi,

I am trying to stream video data across 2 PCs using a USB connection. On
each side of the PC, I have a USB peripheral device to send and receive the
data respectively.

I hope to enumerate my USB peripheral device as a AVStream device and render
the data using Directshow. May I know if the AVStream driver that I write
should take the form of a filter-centric or pin-centric filter?

Another problem that I have is the inability to make my device show up under
the WDM STreaming capture devices in Graphedt. I understand that this problem
might have been discussed before and the solution given suggested is often to
check the guid in the inf file with the one given in the Filter Descriptor. I
have checked and both values tally but still I am not able to enumerate my
device successfully.

May I know what if the successful enumeration of the device only depends on
the inf file and file descriptors or are there other components involved? And
does anybody knows the process in which the enumeration takes place?

Thanks in advance.

Re: aVStream Driver - Filter Centric or Pin Centric? by Max

Max
Mon Nov 28 02:09:48 CST 2005

> I am trying to stream video data across 2 PCs using a USB connection. On
> each side of the PC, I have a USB peripheral device to send and receive
> the
> data respectively.
>
> I hope to enumerate my USB peripheral device as a AVStream device and
> render
> the data using Directshow. May I know if the AVStream driver that I write
> should take the form of a filter-centric or pin-centric filter?

One way to look at it is to count the number of functions of your device.
What is it that it is designed to do?
For example, if it is an analog capture device then it can spit out analog
video, audio, VBI data and what not.
In that case it is clear that it should be pin centric as it has multiple
output pins.

One the other hand I find it difficult to justify filter centric approach
for anything other than software-only codecs. Say, you want to write a
kernel mode codec to convert some data of type A to B. In that case you
would probably want to write a filter centeric driver. Otherwise I'd stick
with pin centric approach.


> Another problem that I have is the inability to make my device show up
> under
> the WDM STreaming capture devices in Graphedt. I understand that this
> problem
> might have been discussed before and the solution given suggested is often
> to
> check the guid in the inf file with the one given in the Filter
> Descriptor. I
> have checked and both values tally but still I am not able to enumerate my
> device successfully.
>
> May I know what if the successful enumeration of the device only depends
> on
> the inf file and file descriptors or are there other components involved?
> And
> does anybody knows the process in which the enumeration takes place?

Some time ago I had a list in my head of what can possibly be wrong when the
filter doesn't show in GraphEdit.
I was even thinking about writing short article about it.

Now I don't remember all those gory details, but I am fairly certain that it
is either missing info in the INF or - most likely - a mismatch between what
you have specified in the driver and in the INF.

Wrong GUID? Possibly.
There are plenty of GUIDs in KS based driver. Making sure that all of them
match is not easy unless you know your way around KS.
Post your INF here. Hopefully the group will be able to give you some ideas.

-- Max.



Re: aVStream Driver - Filter Centric or Pin Centric? by DoorKeeper

DoorKeeper
Mon Nov 28 02:22:06 CST 2005

Thanks Max, most probably I will go for the Pin Centric approach as I am
looking to stream video data from the device.

"Max Paklin" wrote:

> > I am trying to stream video data across 2 PCs using a USB connection. On
> > each side of the PC, I have a USB peripheral device to send and receive
> > the
> > data respectively.
> >
> > I hope to enumerate my USB peripheral device as a AVStream device and
> > render
> > the data using Directshow. May I know if the AVStream driver that I write
> > should take the form of a filter-centric or pin-centric filter?
>
> One way to look at it is to count the number of functions of your device.
> What is it that it is designed to do?
> For example, if it is an analog capture device then it can spit out analog
> video, audio, VBI data and what not.
> In that case it is clear that it should be pin centric as it has multiple
> output pins.
>
> One the other hand I find it difficult to justify filter centric approach
> for anything other than software-only codecs. Say, you want to write a
> kernel mode codec to convert some data of type A to B. In that case you
> would probably want to write a filter centeric driver. Otherwise I'd stick
> with pin centric approach.
>
>
> > Another problem that I have is the inability to make my device show up
> > under
> > the WDM STreaming capture devices in Graphedt. I understand that this
> > problem
> > might have been discussed before and the solution given suggested is often
> > to
> > check the guid in the inf file with the one given in the Filter
> > Descriptor. I
> > have checked and both values tally but still I am not able to enumerate my
> > device successfully.
> >
> > May I know what if the successful enumeration of the device only depends
> > on
> > the inf file and file descriptors or are there other components involved?
> > And
> > does anybody knows the process in which the enumeration takes place?
>
> Some time ago I had a list in my head of what can possibly be wrong when the
> filter doesn't show in GraphEdit.
> I was even thinking about writing short article about it.
>
> Now I don't remember all those gory details, but I am fairly certain that it
> is either missing info in the INF or - most likely - a mismatch between what
> you have specified in the driver and in the INF.
>
> Wrong GUID? Possibly.
> There are plenty of GUIDs in KS based driver. Making sure that all of them
> match is not easy unless you know your way around KS.
> Post your INF here. Hopefully the group will be able to give you some ideas.
>
> -- Max.
>
>
>

Re: aVStream Driver - Filter Centric or Pin Centric? by DoorKeeper

DoorKeeper
Tue Dec 27 00:34:02 CST 2005

Hi everyone,

I was trying to get my filter to show up under graphedit for the past few
days but did not manage to make much progress. Here's my inf file and any
pointers would be much appreciated. Thanks in advance.

; Copyright (c) Microsoft Corporation. All rights reserved.

[Version]
signature="$CHICAGO$"
Class=Media
ClassGUID={4d36e96c-e325-11ce-bfc1-08002be10318}
Provider=%Msft%
LayoutFile=layout.inf
DriverVer=07/01/2001,5.1.2600.2180

[ControlFlags]
ExcludeFromSelect=*

[DestinationDirs]
USBVideo.CopyList=10,system32\drivers

[Manufacturer]
%Msft%=Microsoft

[Microsoft]
%USBVideo.DeviceDesc%=USBVideo,USB\VID_04CC&PID_1B49

[USBVideo.NT]
Include=ks.inf, kscaptur.inf, dshowext.inf
Needs=KS.Registration, KSCAPTUR.Registration.NT, DSHOWEXT.Registration
CopyFiles=USBVideo.CopyList
AddReg=USBVideo.AddReg, TopologyNodeRegistration, DVCR.Plugins
PreferDeviceInfo=1
; WIA
SubClass=StillImage
DeviceType=3
DeviceSubType=0x1
Capabilities=0x00000031
DeviceData=USBVideo.DeviceData
ICMProfiles="sRGB Color Space Profile.icm"

[USBVideo.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,Intvideo.sys
; WIA
HKR,,HardwareConfig,1,1
HKR,,USDClass,,"{0527d1d0-88c2-11d2-82c7-00c04f8ec183}"

[USBVideo.DeviceData]
Server=local
UI DLL=sti.dll
UI Class ID={5d8ef5a3-ac13-11d2-a093-00c04f72dc3c}

[USBVideo.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,KSSTRING_Filter,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,KSSTRING_Filter,USBVideo.Interface

[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,KSSTRING_Filter,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,KSSTRING_Filter,USBVideo.Interface

[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg

[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,PageAliases,"{71F96464-78F3-11d0-A18C-00A0C9118956}",1,21,E8,C2,3D,
13,47, d2,11, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5
HKR,PinFactory\1\Interfaces\{5BB95400-52BB-11d2-BA41-00A0C90D2B05},,,
HKR,,RTCFlags,0x00010001,0x00000010

[USBVideo.NT.Services]
AddService = usbvideo,0x00000002,USBVideo.ServiceInstall

[USBVideo.ServiceInstall]
DisplayName = %USBVideo.SvcDesc%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %10%\System32\Drivers\Intvideo.sys


[USBVideo.CopyList]
Intvideo.sys

[Strings]

;-----------------
; Non-Localizable
;-----------------
ProxyVCap.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_VIDEO="{6994AD05-93EF-11D0-A3CC-00A0C9223196}"
KSSTRING_Filter="{9B365890-165F-11D0-A195-0020AFD156E4}"
SERVICE_KERNEL_DRIVER=1
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1


MediaCategories="SYSTEM\CurrentControlSet\Control\MediaCategories"

;------------
;Localizeable
;------------
Msft="Microsoft"
USBVideo.DeviceDesc="USB Video Device"
USBVideoStreaming.DeviceDesc="USB Video Device (VS Interface)"
USBVideo.SvcDesc="USB Video Device (WDM)"


"DoorKeeper" wrote:

> Thanks Max, most probably I will go for the Pin Centric approach as I am
> looking to stream video data from the device.
>
> "Max Paklin" wrote:
>
> > > I am trying to stream video data across 2 PCs using a USB connection. On
> > > each side of the PC, I have a USB peripheral device to send and receive
> > > the
> > > data respectively.
> > >
> > > I hope to enumerate my USB peripheral device as a AVStream device and
> > > render
> > > the data using Directshow. May I know if the AVStream driver that I write
> > > should take the form of a filter-centric or pin-centric filter?
> >
> > One way to look at it is to count the number of functions of your device.
> > What is it that it is designed to do?
> > For example, if it is an analog capture device then it can spit out analog
> > video, audio, VBI data and what not.
> > In that case it is clear that it should be pin centric as it has multiple
> > output pins.
> >
> > One the other hand I find it difficult to justify filter centric approach
> > for anything other than software-only codecs. Say, you want to write a
> > kernel mode codec to convert some data of type A to B. In that case you
> > would probably want to write a filter centeric driver. Otherwise I'd stick
> > with pin centric approach.
> >
> >
> > > Another problem that I have is the inability to make my device show up
> > > under
> > > the WDM STreaming capture devices in Graphedt. I understand that this
> > > problem
> > > might have been discussed before and the solution given suggested is often
> > > to
> > > check the guid in the inf file with the one given in the Filter
> > > Descriptor. I
> > > have checked and both values tally but still I am not able to enumerate my
> > > device successfully.
> > >
> > > May I know what if the successful enumeration of the device only depends
> > > on
> > > the inf file and file descriptors or are there other components involved?
> > > And
> > > does anybody knows the process in which the enumeration takes place?
> >
> > Some time ago I had a list in my head of what can possibly be wrong when the
> > filter doesn't show in GraphEdit.
> > I was even thinking about writing short article about it.
> >
> > Now I don't remember all those gory details, but I am fairly certain that it
> > is either missing info in the INF or - most likely - a mismatch between what
> > you have specified in the driver and in the INF.
> >
> > Wrong GUID? Possibly.
> > There are plenty of GUIDs in KS based driver. Making sure that all of them
> > match is not easy unless you know your way around KS.
> > Post your INF here. Hopefully the group will be able to give you some ideas.
> >
> > -- Max.
> >
> >
> >

Re: aVStream Driver - Filter Centric or Pin Centric? by DoorKeeper

DoorKeeper
Tue Dec 27 02:59:02 CST 2005

sorry folks, pls ignore my last mail. I managed to find out the problem. I
had forgotten to enclose my KSSTRING_Filter with the % sign.

"DoorKeeper" wrote:

> Hi everyone,
>
> I was trying to get my filter to show up under graphedit for the past few
> days but did not manage to make much progress. Here's my inf file and any
> pointers would be much appreciated. Thanks in advance.
>
> ; Copyright (c) Microsoft Corporation. All rights reserved.
>
> [Version]
> signature="$CHICAGO$"
> Class=Media
> ClassGUID={4d36e96c-e325-11ce-bfc1-08002be10318}
> Provider=%Msft%
> LayoutFile=layout.inf
> DriverVer=07/01/2001,5.1.2600.2180
>
> [ControlFlags]
> ExcludeFromSelect=*
>
> [DestinationDirs]
> USBVideo.CopyList=10,system32\drivers
>
> [Manufacturer]
> %Msft%=Microsoft
>
> [Microsoft]
> %USBVideo.DeviceDesc%=USBVideo,USB\VID_04CC&PID_1B49
>
> [USBVideo.NT]
> Include=ks.inf, kscaptur.inf, dshowext.inf
> Needs=KS.Registration, KSCAPTUR.Registration.NT, DSHOWEXT.Registration
> CopyFiles=USBVideo.CopyList
> AddReg=USBVideo.AddReg, TopologyNodeRegistration, DVCR.Plugins
> PreferDeviceInfo=1
> ; WIA
> SubClass=StillImage
> DeviceType=3
> DeviceSubType=0x1
> Capabilities=0x00000031
> DeviceData=USBVideo.DeviceData
> ICMProfiles="sRGB Color Space Profile.icm"
>
> [USBVideo.AddReg]
> HKR,,DevLoader,,*ntkern
> HKR,,NTMPDriver,,Intvideo.sys
> ; WIA
> HKR,,HardwareConfig,1,1
> HKR,,USDClass,,"{0527d1d0-88c2-11d2-82c7-00c04f8ec183}"
>
> [USBVideo.DeviceData]
> Server=local
> UI DLL=sti.dll
> UI Class ID={5d8ef5a3-ac13-11d2-a093-00c04f72dc3c}
>
> [USBVideo.Interfaces]
> AddInterface=%KSCATEGORY_CAPTURE%,KSSTRING_Filter,USBVideo.Interface
> AddInterface=%KSCATEGORY_VIDEO%,KSSTRING_Filter,USBVideo.Interface
>
> [USBVideo.NT.Interfaces]
> AddInterface=%KSCATEGORY_CAPTURE%,KSSTRING_Filter,USBVideo.Interface
> AddInterface=%KSCATEGORY_VIDEO%,KSSTRING_Filter,USBVideo.Interface
>
> [USBVideo.Interface]
> AddReg=USBVideo.Interface.AddReg
>
> [USBVideo.Interface.AddReg]
> HKR,,CLSID,,%ProxyVCap.CLSID%
> HKR,,FriendlyName,,%USBVideo.DeviceDesc%
> HKR,PageAliases,"{71F96464-78F3-11d0-A18C-00A0C9118956}",1,21,E8,C2,3D,
> 13,47, d2,11, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5
> HKR,PinFactory\1\Interfaces\{5BB95400-52BB-11d2-BA41-00A0C90D2B05},,,
> HKR,,RTCFlags,0x00010001,0x00000010
>
> [USBVideo.NT.Services]
> AddService = usbvideo,0x00000002,USBVideo.ServiceInstall
>
> [USBVideo.ServiceInstall]
> DisplayName = %USBVideo.SvcDesc%
> ServiceType = %SERVICE_KERNEL_DRIVER%
> StartType = %SERVICE_DEMAND_START%
> ErrorControl = %SERVICE_ERROR_NORMAL%
> ServiceBinary = %10%\System32\Drivers\Intvideo.sys
>
>
> [USBVideo.CopyList]
> Intvideo.sys
>
> [Strings]
>
> ;-----------------
> ; Non-Localizable
> ;-----------------
> ProxyVCap.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
> KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
> KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
> KSCATEGORY_VIDEO="{6994AD05-93EF-11D0-A3CC-00A0C9223196}"
> KSSTRING_Filter="{9B365890-165F-11D0-A195-0020AFD156E4}"
> SERVICE_KERNEL_DRIVER=1
> SERVICE_DEMAND_START=3
> SERVICE_ERROR_NORMAL=1
>
>
> MediaCategories="SYSTEM\CurrentControlSet\Control\MediaCategories"
>
> ;------------
> ;Localizeable
> ;------------
> Msft="Microsoft"
> USBVideo.DeviceDesc="USB Video Device"
> USBVideoStreaming.DeviceDesc="USB Video Device (VS Interface)"
> USBVideo.SvcDesc="USB Video Device (WDM)"
>
>
> "DoorKeeper" wrote:
>
> > Thanks Max, most probably I will go for the Pin Centric approach as I am
> > looking to stream video data from the device.
> >
> > "Max Paklin" wrote:
> >
> > > > I am trying to stream video data across 2 PCs using a USB connection. On
> > > > each side of the PC, I have a USB peripheral device to send and receive
> > > > the
> > > > data respectively.
> > > >
> > > > I hope to enumerate my USB peripheral device as a AVStream device and
> > > > render
> > > > the data using Directshow. May I know if the AVStream driver that I write
> > > > should take the form of a filter-centric or pin-centric filter?
> > >
> > > One way to look at it is to count the number of functions of your device.
> > > What is it that it is designed to do?
> > > For example, if it is an analog capture device then it can spit out analog
> > > video, audio, VBI data and what not.
> > > In that case it is clear that it should be pin centric as it has multiple
> > > output pins.
> > >
> > > One the other hand I find it difficult to justify filter centric approach
> > > for anything other than software-only codecs. Say, you want to write a
> > > kernel mode codec to convert some data of type A to B. In that case you
> > > would probably want to write a filter centeric driver. Otherwise I'd stick
> > > with pin centric approach.
> > >
> > >
> > > > Another problem that I have is the inability to make my device show up
> > > > under
> > > > the WDM STreaming capture devices in Graphedt. I understand that this
> > > > problem
> > > > might have been discussed before and the solution given suggested is often
> > > > to
> > > > check the guid in the inf file with the one given in the Filter
> > > > Descriptor. I
> > > > have checked and both values tally but still I am not able to enumerate my
> > > > device successfully.
> > > >
> > > > May I know what if the successful enumeration of the device only depends
> > > > on
> > > > the inf file and file descriptors or are there other components involved?
> > > > And
> > > > does anybody knows the process in which the enumeration takes place?
> > >
> > > Some time ago I had a list in my head of what can possibly be wrong when the
> > > filter doesn't show in GraphEdit.
> > > I was even thinking about writing short article about it.
> > >
> > > Now I don't remember all those gory details, but I am fairly certain that it
> > > is either missing info in the INF or - most likely - a mismatch between what
> > > you have specified in the driver and in the INF.
> > >
> > > Wrong GUID? Possibly.
> > > There are plenty of GUIDs in KS based driver. Making sure that all of them
> > > match is not easy unless you know your way around KS.
> > > Post your INF here. Hopefully the group will be able to give you some ideas.
> > >
> > > -- Max.
> > >
> > >
> > >