[wdmaudiodev] Re: KSEVENT_PINCAPS_FORMATCHANGE event and the PCEVENT_VERB_ADD

  • From: Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 3 Sep 2013 16:15:04 +0000

Raise the event for each pin that you want to be requeried.

For example, suppose that Ch 1/2 Out, Ch 3/4 Out, and Ch 1/2 In are all at 44.1 
kHz.

Then the user goes into the Sound control panel and changes Ch 1/2 Out to 48 
kHz.

You should raise the event on Ch 3/4 Out and Ch 1/2 In. When Windows 
renegotiates the device format on those endpoints, insist on a 48 kHz format; 
decry any support for 48 kHz.

From: wdmaudiodev-bounce@xxxxxxxxxxxxx 
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Jesko Quenzer
Sent: Monday, August 26, 2013 12:47 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] KSEVENT_PINCAPS_FORMATCHANGE event and the 
PCEVENT_VERB_ADD

Hi,

I try to add the "Dynamic Format Change Support" which is documented in here: 
http://msdn.microsoft.com/en-us/library/windows/hardware/gg463055.aspx to my 
miniport driver.
I was able to register the events to get calls to my EventHandlerFormatChange 
and to my PropertyHandlerPinProposeForma function (both taken from the document 
above).

I also see the KSPROPERTY_TYPE_SET and KSPROPERTY_TYPE_GET calls and everything 
seem to be OK.

There are some things I'm missing or do not understand well:

For example I have a device which provides Ch 1/2 and Ch 3/4 Out and Input 1/2 
and I want to keep the sample rate settings  synchronised for all of them.
So I guess I should get a KSPROPERTY_TYPE_GET for each device after I changed 
the sample rate for one of them to synchronise the others to the new "default" 
sample rate.
Is this correct ?

The problem is I never get this call. I only get a call to KSPROPERTY_TYPE_GET 
once when I open the device in the Windows CPL.

There are two parts in the sample code I don't understand and are probably 
related:

NTSTATUS CMiniportHelper::GenerateFormatChangeEvent()
which calls:
m_pPortEvents->GenerateEventList(...,...,...);

where should I instantiate the pPortEvents and where do I call the 
GenerateFormatChangeEvent ?
The source code(which I didn't write by my self) calls once:
pPort->QueryInterface (IID_IPortEvents,  (PVOID *)&pPortEvents);
in my Adapter->StartDevice function. Should I keep this instance ?

also  the "case PCEVENT_VERB_ADD:"  in the EventHandlerFormatChange is never 
called, only  "case PCEVENT_VERB_SUPPORT:" is called.

Any suggestion what I'm doing wrong ?

Another thing is how can I distinguish which pin is opened in the CPL ?
Any idea ?

Thanks and Regards,

Other related posts: