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

  • From: "K. Weller" <wdmaudio@xxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Thu, 15 Oct 2020 13:29:40 +0200

Hi Gary,


thanks a lot for the background. I think I understand now and can figure
out a solution how to avoid the stop of the stream.

Even a glitch in my case is OK. My main reason is to prevent the APP
from stopping and throwing an error and not resuming at all.


Thanks again,

Regards

K. Weller


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: