Hi Devendra
I do not know if I can post attachments, so I put the code in here,
wich means loss of formattig (sorry). I don't no if my code really
helps. I'll be lucky, if some can send me a modified version of
avssamp/awshws (from the dkk) with a modified inf, where the audio
pin is accessible as a system audio device.
FILTER:
/**************************************************************************
DESCRIPTOR AND DISPATCH LAYOUT
**************************************************************************/
GUID g_PINNAME_AUDIO_CAPTURE = {0x12345678, 0x0000, 0x0000, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const GUID VolumeNodeType = {STATICGUIDOF(KSNODETYPE_SRC)};
const KSNODE_DESCRIPTOR KsNodeDescriptors[] = {DEFINE_NODE_DESCRIPTOR(
NULL, &VolumeNodeType, NULL ) };
// -------------
// 1-| 0 Node0 1 |- Audio
// -------------
const
KSTOPOLOGY_CONNECTION
KsConnections[] =
{
{ KSFILTER_NODE, 1, 0, 0 },
{ 0, 1, KSFILTER_NODE, 0 },
};
//
// CaptureFilterCategories:
//
// The list of category GUIDs for the capture filter.
//
const GUID CaptureFilterCategories [CAPTURE_FILTER_CATEGORIES_COUNT] =
{
STATICGUIDOF (KSCATEGORY_AUDIO),
STATICGUIDOF (KSCATEGORY_CAPTURE)
};
//=============================================================================
static KSDATARANGE PinDataRangesBridge[] = {
{
sizeof(KSDATARANGE),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
}
};
const KSDATARANGE_AUDIO
PCM_Capture =
{
//
// KSDATARANGE
//
{
sizeof (KSDATARANGE_AUDIO), // FormatSize
0, // Flags
0, // SampleSize
ignored?
0, // Reserved
STATICGUIDOF
(KSDATAFORMAT_TYPE_AUDIO), // aka. MEDIATYPE_AUDIO
STATICGUIDOF (KSDATAFORMAT_SUBTYPE_PCM), // aka.
STATICGUIDOF (KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) //
},
2, // MaximumChannels;
16, // MinimumBitsPerSample;
16, // MaximumBitsPerSample;
32000, // MinimumSampleFrequency;
48000, // MaximumSampleFrequency;
};
//
// CapturePinDataRanges:
//
// This is the list of data ranges supported on the capture pin.
//
const PKSDATARANGE CapturePinDataRanges [CAPTURE_PIN_DATA_RANGE_COUNT]
=
{
(PKSDATARANGE) &PCM_Capture,
};
//=============================================================================
static
PKSDATARANGE PinDataRangePointersBridge[] =
{&PinDataRangesBridge[0]};
//
// CaptureFilterPinDescriptors:
//
// The list of pin descriptors on the capture filter.
//
const KSPIN_DESCRIPTOR_EX CaptureFilterPinDescriptors
[CAPTURE_FILTER_PIN_COUNT] =
{
//
// Capture Pin
//
{
&CapturePinDispatch,
NULL,
// KSPIN_DESCRIPTOR
{
NULL, 0, // Interfaces (NULL, 0 ==
default)
NULL, 0, // Mediums (NULL, 0 ==
default)
SIZEOF_ARRAY (CapturePinDataRanges), // Range Count
CapturePinDataRanges, // Ranges
KSPIN_DATAFLOW_OUT, // Dataflow
KSPIN_COMMUNICATION_SINK, // Communication
&KSCATEGORY_CAPTURE, //
&KSCATEGORY_AUDIO, // Category
&KSAUDFNAME_RECORDING_CONTROL, // Name
0 // Reserved
},
//KSPIN_FLAG_GENERATE_MAPPINGS | // Pin Flags
KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING |
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY,
1, // Instances Possible
1, // Instances Necessary
&CapturePinAllocatorFraming, // Allocator Framing
reinterpret_cast <PFNKSINTERSECTHANDLEREX>
(CCapturePin::IntersectHandler)
},
// bridge pin
{
NULL,
NULL,
{
0, NULL, // SIZEOF_ARRAY(PinInterfaces), PinInterfaces,
0, NULL, // SIZEOF_ARRAY(PinMediums), PinMediums,
SIZEOF_ARRAY(PinDataRangePointersBridge),
PinDataRangePointersBridge, //Ranges..
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_NONE,
&KSNODETYPE_SPDIF_INTERFACE, // Category
&KSNODETYPE_SPDIF_INTERFACE, // Name
0
},
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | // Flags
KSPIN_FLAG_FIXED_FORMAT,
1, //InstancesPossible
0, //InstancesNecessary
NULL,
NULL
}
};
//
// CaptureFilterDispatch:
//
// This is the dispatch table for the capture filter. It provides
notification
// of creation, closure, processing (for filter-centrics, not for the
capture
// filter), and resets (for filter-centrics, not for the capture
filter).
//
const KSFILTER_DISPATCH CaptureFilterDispatch =
{
CCaptureFilter::DispatchCreate, // Filter Create
NULL, // Filter Close
NULL, // Filter Process
NULL // Filter Reset
};
//
// CaptureFilterDescription:
//
// The descriptor for the capture filter. We don't specify any topology
// since there's only one pin on the filter. Realistically, there would
// be some topological relationships here because there would be input
// pins from crossbars and the like.
//
const KSFILTER_DESCRIPTOR CaptureFilterDescriptor =
{
&CaptureFilterDispatch, // Dispatch Table
NULL, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference GUID
DEFINE_KSFILTER_PIN_DESCRIPTORS (CaptureFilterPinDescriptors),
DEFINE_KSFILTER_CATEGORIES (CaptureFilterCategories),
DEFINE_KSFILTER_NODE_DESCRIPTORS(KsNodeDescriptors),
DEFINE_KSFILTER_CONNECTIONS(KsConnections),
NULL // Component ID
};
One
possible inf (I tried lots of infs so far)
;-------------------------------------------------------------------------------
; general sections :
;-------------------------------------------------------------------------------
[Version]
Signature="$CHICAGO$"
Class=MEDIA
ClassGUID ={4d36e96c-e325-11ce-bfc1-08002be10318}
provider=%Company%
LayoutFile=layout.inf
DriverVer=08/15/2005,2.6.0
[ControlFlags]
; All PnP devices should be excluded from manual AddDevice Applet list
ExcludeFromSelect=*
[DestinationDirs]
SPDIFDriver.CopyFiles=10,system32\drivers
[PreCopySection]
HKR,,NoSetupUI,,1
; ================= Device
section=====================
[Manufacturer]
%Company%=Company
[Company]
%USB\VID_1218&PID_0030.DeviceDesc%=DrvInstall,USB\VID_1218&PID_0030
;-------------------------------------------------------------------------------
; platform install sections
;-------------------------------------------------------------------------------
[DrvInstall]
Include=ks.inf, kscaptur.inf, dshowext.inf
AlsoInstall=KS.Registration,KSCAPTUR.Registration,
DSHOWEXT.Registration
CopyFiles=SPDIFDriver.CopyFiles
AddReg=DrvInstall.AddReg,DrvInstall.PinNames
[DrvInstall.NT]
Include=ks.inf,kscaptur.inf,dshowext.inf
Needs=KS.Registration,KSCAPTUR.Registration.NT, DSHOWEXT.Registration
CopyFiles=SPDIFDriver.CopyFiles
AddReg=DrvInstall.AddReg,DrvInstall.PinNames
[DrvInstall.AddReg]
HKR,,DevLoader,,*NTKERN
HKR,,NTMPDriver,,SPDIF_USB_AudioDriver.sys
[SPDIFDriver.CopyFiles]
SPDIF_USB_AudioDriver.sys
;-------------------------------------------------------------------------------
; services sections
;-------------------------------------------------------------------------------
[DrvInstall.NT.Services]
Addservice = SPDIF_AUDIO, 0x00000002, DrvInstall.ServiceInstall
[DrvInstall.ServiceInstall]
DisplayName=%SPDIFDRV.SvcDesc%
ServiceType=%SERVICE_KERNEL_DRIVER%
StartType=%SERVICE_DEMAND_START%
ErrorControl=%SERVICE_ERROR_NORMAL%
ServiceBinary=%10%\system32\drivers\SPDIF_USB_AudioDriver.sys
LoadOrderGroup=ExtendedBase
;-------------------------------------------------------------------------------
; interfaces sections
;-------------------------------------------------------------------------------
[DrvInstall.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,%KSSTRING_FILTER%,DrvInstall.C.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSSTRING_FILTER%,DrvInstall.A.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave%,UsbAudio.I.Wave
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Topology%,UsbAudio.I.Topo
[DrvInstall.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,%KSSTRING_FILTER%,DrvInstall.C.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSSTRING_FILTER%,DrvInstall.A.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave%,DrvInstall.W.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Topology%,DrvInstall.T.Interface
[DrvInstall.C.Interface]
AddReg=DrvInstall.C.Interface.AddReg
[DrvInstall.C.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.CInterface%
[DrvInstall.A.Interface]
AddReg=DrvInstall.A.Interface.AddReg
[DrvInstall.A.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.AInterface%
[DrvInstall.W.Interface]
AddReg=DrvInstall.W.Interface.AddReg
[DrvInstall.W.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.WInterface%
[DrvInstall.T.Interface]
AddReg=DrvInstall.T.Interface.AddReg
[DrvInstall.T.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.TInterface%
;-------------------------------------------------------------------------------
; pinnames
;-------------------------------------------------------------------------------
[DrvInstall.PinNames]
;Audio capture pin name
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\{12345678-0000-0000-00000000000000000},Name,0,%AudioCapturePinName%
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\{12345678-0000-0000-00000000000000000},Display,1,00,00,00,00
;-------------------------------------------------------------------------------
; string sections
;-------------------------------------------------------------------------------
[Strings]
;----------------
; Non-Localizable
;----------------
; note:
only register value is case sensitive, key is not.
KSSTRING_Filter="{9B365890-165F-11D0-A195-0020AFD156E4}"
ProxyVCap.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_VIDEO="{6994AD05-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_CROSSBAR="{a799a801-a46d-11d0-a18c-00a02401dcd4}"
KSCATEGORY_TVTUNER="{a799a800-a46d-11d0-a18c-00a02401dcd4}"
KSCATEGORY_TVAUDIO="{a799a802-a46d-11d0-a18c-00a02401dcd4}"
SERVICE_KERNEL_DRIVER=1
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1
KSNAME_Wave="Wave"
KSNAME_Topology="Topology"
;----------------
; Localizable
;----------------
Company="Company"
USB\VID_1218&PID_0030.DeviceDesc="USB Audio Driver"
SPDIFDRV.SvcDesc="USB Audio Driver(SPDIF_USB_AudioDriver.sys)"
USB\VID_1218&PID_0030.DeviceDesc.CInterface="USB Audio Driver
CInterface"
USB\VID_1218&PID_0030.DeviceDesc.AInterface="USB Audio Driver
AInterface"
USB\VID_1218&PID_0030.DeviceDesc.WInterface="USB Audio Driver
WInterface"
USB\VID_1218&PID_0030.DeviceDesc.TInterface="USB Audio Driver
TInterface"
AudioCapturePinName="SPDIF Audio Capture Pin Name"