[wdmaudiodev] Re: [EXTERNAL] Keep a stream running while reconfigure PORTCLS

  • From: "Gary Daniels" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "Gary.Daniels" for DMARC)
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Wed, 7 Oct 2020 20:27:19 +0000

Here's a bit of background on how the system works.

When a media class device is removed, or interfaces/connections are removed, 
the AudioEndpointBuilder service will detect the change and change the state of 
the associated audio endpoints to DEVICE_STATE_NOTPRESENT. AudioEndpointBuilder 
will also publish new system default endpoints as needed whenever endpoints 
come and go.

Applications can receive these notifications through 
IMMDeviceEnumerator::RegisterEndpointNotificationCallback.

When playback is already in progress and an audio endpoint is removed, the 
audio service will detect the condition and WASAPI based applications will 
start receiving AUDCLNT_E_DEVICE_INVALIDATED errors.

WASAPI applications are expected to register for endpoint notifications and 
detect and handle these errors, and recover audio.

High level audio API's, like MF and AudioGraph, do handle these conditions, and 
automatically move the audio to a new audio endpoint whenever necessary.

So, to answer your question, the driver has no way to pause audio in this 
situation. Typical applications will automatically move to a new audio endpoint 
and resume playback if the interfaces/connections are removed.

If the reconfiguration can be done without affecting the published interfaces, 
then audio could be stalled or dropped during the reconfiguration.

Dropping audio will work, it will result in an audio glitch and a period of 
missing audio. Whether or not it's detectible to users would depend on the 
length of the glitch and how often it happens. Regular glitching of any length 
would be easily detectable by users. A single 10 or 20 millisecond glitch at 
the beginning of playback isn't detectable.

Stalling audio can be problematic for A/V synchronization.

Gary Daniels
Senior SDE
Microsoft Windows Audio


Sent from Outlook<http://aka.ms/weboutlook>

________________________________
From: wdmaudiodev-bounce@xxxxxxxxxxxxx <wdmaudiodev-bounce@xxxxxxxxxxxxx> on 
behalf of K. Weller <wdmaudio@xxxxxx>
Sent: Monday, September 28, 2020 6:18 AM
To: wdmaudiodev@xxxxxxxxxxxxx <wdmaudiodev@xxxxxxxxxxxxx>
Subject: [EXTERNAL] [wdmaudiodev] Keep a stream running while reconfigure 
PORTCLS

Hi all,


my driver will unregister ( UnregisterPhysicalConnection &&
IUnregisterSubdevice ) and re-install the subedevice and register
(PcRegisterPhysicalConnection) the connection during runtime. So the
miniport driver will be reconfigured.
It can happen that there is a playback stream at the same time, which
should resume again after the port is re-configured and re-registered.
Is there a way how I can “fake” that the driver is still there and pause
the stream somehow for example, during my re-configuration?
I’m thinking about hooking into the IRP_MJ_DEVICE_CONTROL for example
IOCTL_KS_PROPERTY or IOCTL_KS_WRITE_STREAM etc.
But I’m not sure if this is the why how to do it.

Best regards,
K. Weller

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

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:
https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.wdmaudiodev.com%2F&amp;data=02%7C01%7CGary.Daniels%40microsoft.com%7Caf0761a80cf04458d57e08d863b10791%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637368959301217469&amp;sdata=29P09Xju05eb%2FDlyhaXsgVlwpuS662EPapM4EYa2ndE%3D&amp;reserved=0

Other related posts: