[wdmaudiodev] Re: AVStream and Wave Devices

  • From: Matt Gonzalez <matt@xxxxxxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Thu, 06 Oct 2005 10:52:26 -0700

Yes, if you see the names in KS Studio then you have the friendly names OK.   Let me know how it goes adding the mediums & interfaces.

Matt


Sam Tertzakian wrote:
Hi, Matt,

Well, I just tried what I think are friendly names and there is no
difference.

Are those the friendly names? I GUIDs for in the INF file and they appear as
Pin Name on the Pins.

-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Sam Tertzakian
Sent: Thursday, October 06, 2005 8:36 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream and Wave Devices

Hi, Matt,

Isn't the friendly name this: g_PINNAME_AUDIO_RENDER or
g_PINNAME_AUDIO_CAPTURE?

It is commented out in the example I sent you...but, that is what I had
orinally...at some point in my testing I decided to go with those other
names...probably because they were in some other PortCls driver I had
written.

But, I will try those again, right now...just to make sure...

Or, if those are not the "friendly names"...then maybe I don't know what a
"friendly name" is.

-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Matt Gonzalez
Sent: Thursday, October 06, 2005 8:31 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream and Wave Devices

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/

******************

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/

Other related posts: