The first thing I notice is that you don't have any friendly names for
your pins - the Name member of KSPIN_DESCRIPTOR. This may actually be
all it takes. Try adding that - if that doesn't work, I'll do a closer
look.
Windows Vista will use the friendly names of the pins to name the wave
devices, so you'll want to do this anyhow.
Matt
Sam Tertzakian wrote:
Hi, Matt,
Thank you for your time...
Yes, I have tried several variations of the "needs" and "include"....I just sent you one of the combinations. I am sure that is not the problem. There is no doubt that SysAudio sees my device...it is trying to register it, but returns STATUS_NOT_SUPPORTED.
As for the GUID, yes, I have tried several variations of that. In my latest version, I use "Wave" and "Topology" instead of a GUID and I use KsCreateFilter twice and pass in "Wave" and "Topology".
Again, I just sent one of the variations.
I thought that perhaps it was because I did not have a Topology filter. So, created that...as a bonus, I get two STATUS_NOT_SUPPORTED, once for the Wave and now for the Topology.
Here is some of the stuff you asked for...I have removed comments to reduce clutter and eliminate some word-wrapping issues.
I have not included my Topology filter since I am pretty that is not the problem. If the problem is not here, then I'll send it separately.
const GUID CaptureFilterCategories [CAPTURE_FILTER_CATEGORIES_COUNT] = { STATICGUIDOF (KSCATEGORY_AUDIO), STATICGUIDOF (KSCATEGORY_CAPTURE), STATICGUIDOF (KSCATEGORY_RENDER) };
DECLARE_SIMPLE_FRAMING_EX ( AudioDefaultAllocatorFraming, STATICGUIDOF (KSMEMORY_TYPE_KERNEL_NONPAGED), KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY | KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY, NUM_FRAMES, 0, FRAME_SIZE, FRAME_SIZE );
KSDATARANGE_AUDIO AudioFormat =
{
{
sizeof( KSDATARANGE_AUDIO ),
0,
0,
0,
STATICGUIDOF( KSDATAFORMAT_TYPE_AUDIO ),
STATICGUIDOF( KSDATAFORMAT_SUBTYPE_PCM ),
STATICGUIDOF( KSDATAFORMAT_SPECIFIER_WAVEFORMATEX )
},
2,
16,
16,
8000
8000
};
const PKSDATARANGE AudioCapturePinDataRanges[ CAPTURE_PIN_DATA_RANGE_COUNT ] = {
(PKSDATARANGE) &AudioFormat
};
KSDATARANGE PinDataRangesBridge[ 1 ] = { { sizeof(KSDATARANGE), 0, 0, 0, STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) } };
PKSDATARANGE PinDataRangePointersBridge[ 1 ] = { &PinDataRangesBridge[0] };
const
KSPIN_DESCRIPTOR_EX
AudioPinDescriptorTemplate[ NUM_AUDIO_PINS + 2 ] = {
// Audio Render Pin: AUDIO_PIN_RENDER
//
{
&AudioCapturePinDispatch,
NULL,
{ NULL,
0, NULL,
0,
SIZEOF_ARRAY( AudioCapturePinDataRanges ),
AudioCapturePinDataRanges,
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_BOTH,
&KSCATEGORY_AUDIO,
&KSNODETYPE_SPEAKER,
//&g_PINNAME_AUDIO_RENDER,
0
},
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY |
KSPIN_FLAG_FIXED_FORMAT,
1, 0, &AudioDefaultAllocatorFraming,
reinterpret_cast <PFNKSINTERSECTHANDLEREX> (CAudioPin::IntersectHandler)
},
// Audio Capture Pin: AUDIO_PIN_CAPTURE
//
{
&AudioCapturePinDispatch,
NULL,
{ NULL, 0, NULL, 0,
SIZEOF_ARRAY( AudioCapturePinDataRanges ),
AudioCapturePinDataRanges,
KSPIN_DATAFLOW_OUT, KSPIN_COMMUNICATION_BOTH,
&KSCATEGORY_AUDIO, &KSAUDFNAME_RECORDING_CONTROL,
//&g_PINNAME_AUDIO_CAPTURE, 0 },
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY |
KSPIN_FLAG_FIXED_FORMAT,
1, 0, &AudioDefaultAllocatorFraming, reinterpret_cast <PFNKSINTERSECTHANDLEREX> (CAudioPin::IntersectHandler)
},
// Audio Render BRIDGE Pin
//
{
NULL,
NULL,
{
0,
NULL,
0,
NULL,
SIZEOF_ARRAY(PinDataRangePointersBridge),
PinDataRangePointersBridge,
KSPIN_DATAFLOW_OUT,
KSPIN_COMMUNICATION_BRIDGE,
(GUID *) &KSCATEGORY_AUDIO,
NULL,
0
},
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY |
KSPIN_FLAG_FIXED_FORMAT,
1, 0, NULL,
NULL
},
// Audio Capture BRIDGE Pin
//
{
NULL,
NULL,
{
0,
NULL,
0,
NULL,
SIZEOF_ARRAY(PinDataRangePointersBridge),
PinDataRangePointersBridge,
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_BRIDGE,
(GUID *) &KSCATEGORY_AUDIO,
NULL,
0
},
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY |
KSPIN_FLAG_FIXED_FORMAT,
1, 0, NULL,
NULL
},
};
#define NODE_ADC 0 #define NODE_DAC 1 #define NODE_VOL 2 #define NODE_SUM 3
#define PIN_IN 1 // looks like "i" for input #define PIN_OUT 0 // looks like "o" for output
const KSNODE_DESCRIPTOR FilterNodes[] = { { NULL, &KSNODETYPE_ADC, // Type NULL // Name }, { NULL, &KSNODETYPE_DAC, // Type NULL // Name }, };
const KSTOPOLOGY_CONNECTION FilterConnections[] =
{
// Render path.
//
{ KSFILTER_NODE, AUDIO_PIN_RENDER, NODE_DAC, PIN_IN }, { NODE_DAC, PIN_OUT, KSFILTER_NODE, AUDIO_PIN_RENDER_BRIDGE },
// Capture path. // { KSFILTER_NODE, AUDIO_PIN_CAPTURE_BRIDGE, NODE_ADC, PIN_IN }, { NODE_ADC, PIN_OUT, KSFILTER_NODE, AUDIO_PIN_CAPTURE } };
// CaptureFilterDescription:
//
const KSFILTER_DESCRIPTOR CaptureFilterDescriptor = {
&CaptureFilterDispatch,
NULL,
KSFILTER_DESCRIPTOR_VERSION,
KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING,
&XXXXNAME_Filter, // I call KsCreateFilter so this is ignored
anyway
DEFINE_KSFILTER_PIN_DESCRIPTORS (AudioPinDescriptorTemplate),
DEFINE_KSFILTER_CATEGORIES (CaptureFilterCategories),
DEFINE_KSFILTER_NODE_DESCRIPTORS( FilterNodes ),
DEFINE_KSFILTER_CONNECTIONS(FilterConnections),
NULL
};
-----Original Message----- From: wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Matt Gonzalez Sent: Wednesday, October 05, 2005 5:07 PM To: wdmaudiodev@xxxxxxxxxxxxx Subject: [wdmaudiodev] Re: AVStream and Wave Devices
Here's what I have in my INF that's different:
My "include" and "needs" lines are different; here's mine:
Include= ks.inf, ksfilter.inf, wdmaudio.inf Needs=KS.Registration Needs=WDMAUDIO.Registration AlsoInstall=ks.registration(ks.inf),wdmaudio.registration(wdmaudio.inf)
You've got this:
XXX_FILTER_REF_GUID = "XXXX0"
but it's a real GUID in your actual INF file, right? And you're passing that same GUID in your filter descriptor as the reference guid?
What you have here looks OK, though. I would guess that the problem is with your filter descriptor. If you like, go ahead and post the whole thing (filter, pins, nodes, connections, everything).
Matt
******************
WDMAUDIODEV addresses: Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
URL to WDMAUDIODEV page: http://www.wdmaudiodev.com/
******************
WDMAUDIODEV addresses: Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
URL to WDMAUDIODEV page: http://www.wdmaudiodev.com/
******************
WDMAUDIODEV addresses: Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
URL to WDMAUDIODEV page: http://www.wdmaudiodev.com/