Got it, thank you. 2014-12-17 23:03 GMT+02:00 Matthew van Eerde < Matthew.van.Eerde@xxxxxxxxxxxxx>: > > I thought maybe there is a runtime attribute that we can read from > IAudioSessionControl and get the audio format? > > > Or maybe we can QueryInterface to get some other class to assist? > > > > Sorry, no such mechanism exists. The only two ways to get the WAVEFORMATEX > for an active stream are: > > (a) Be the player – the player knows the WAVEFORMATEX because it > handed it to WASAPI in the first place > > (b) Be the SFX; players will call IAudioClient::IsFormatSupported, > which bubbles up to a format support call on the SFX > > > > *From:* wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto: > wdmaudiodev-bounce@xxxxxxxxxxxxx] *On Behalf Of *Dadi > *Sent:* Wednesday, December 17, 2014 12:57 PM > > *To:* wdmaudiodev@xxxxxxxxxxxxx > *Subject:* [wdmaudiodev] Re: Retrieving WAVEFORMATEX from > IAudioSessionControl > > > > Hi Matthiew, > > The upmix effect is integrated along with other effects we have for > surround and we cannot separate it to two different effects SFX and MFX. > > We will check for the minimum and/or maximum number of channels and also > analyze the audio stream for our calculations. > > In any case, my original question was not only for upmix but also for > other different effects (the upmix effect is only one example) in which we > need to get the WAVEFORMATEX of the active streams. > > I thought maybe there is a runtime attribute that we can read from > IAudioSessionControl and get the audio format? > > Or maybe we can QueryInterface to get some other class to assist? > > > So we need to find the best way to retrieve this information. We prefer to > avoid writing orphan SFX APOs only for that matter. > > Thank you, > > Dadi > > > > > > 2014-12-17 22:40 GMT+02:00 Matthew van Eerde < > Matthew.van.Eerde@xxxxxxxxxxxxx>: > > > our effects must all reside in the same APO instance > > > > Can you elaborate on why? > > > > The approach we had in mind when designing the system is to do most > processing in the MFX; processing where the channel count may change in the > SFX; and hardware compensation in the EFX. > > > > For example, you could create an SFX that did both 2.0 => 5.1 upmix and > 5.1 => 5.1 passthrough. > > > > It should be fine to have out-of-band communication between your SFX and > your MFX. What would do you do in your MFX if there were two active > streams, one with a stereo WAVEFORMATEX, and one with a 5.1 WAVEFORMATEX? > > > > *From**:* wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto: > wdmaudiodev-bounce@xxxxxxxxxxxxx] *On Behalf Of* Dadi > *Sent**:* Wednesday, December 17, 2014 12:30 PM > > > *To:* wdmaudiodev@xxxxxxxxxxxxx > *Subject:* [wdmaudiodev] Re: Retrieving WAVEFORMATEX from > IAudioSessionControl > > > > Hi Matthew, > > Yes we know that but we are processing only global (MFX) and our effects > must all reside in the same APO instance so in surround we get only 5.1 > => 5.1. > In addition we are also working on new effects (not upmix) and we must > have the WAVESFORMTEX of the active streams. > > The possibilities we currently have are: > - We can write SFX APOs that always do full bypass only for that matter - > gather the WAVESFORMATEX information and copy it to a shared memory or some > other IPC mechanism so the MFX APO can read read it. > > - We can also get the assistance of the codec vendor (with private API) > to give us this information to overcome this limitation but we prefer to > have a better way for this. > > > > Is there any way to resolve it gracefully? > > Thank you, > > Dadi > > > > 2014-12-17 20:08 GMT+02:00 Matthew van Eerde < > Matthew.van.Eerde@xxxxxxxxxxxxx>: > > It’s too late to do any kind of stream-intelligent upmixing in a render > GFX, MFX or EFX. Everything’s already been channel-converted and mixed > together by the time it gets to you. If you want to do intelligent channel > matrixing per stream, you need an SFX. > > > > Render SFXes (and only render SFXes) can support multiple input formats, > even with differing channel counts. So on a 5.1 output you can do: > > 1. 2.0 => 5.1 (upmix) > > 2. 5.1 => 5.1 > > > > And on a 2.0 output, you can do: > > 1. 2.0 => 2.0 > > 2. 5.1 => 2.0 (downmix) > > > > *From**:* wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto: > wdmaudiodev-bounce@xxxxxxxxxxxxx] *On Behalf Of* Dadi > *Sent**:* Tuesday, December 16, 2014 6:02 AM > *To**:* wdmaudiodev@xxxxxxxxxxxxx > *Subject**:* [wdmaudiodev] Re: Retrieving WAVEFORMATEX from > IAudioSessionControl > > > > Hi Matthew, > > Our global APO needs that information for its processing logic. > > E.g. for doing surround upmix we need to know the channel count of all > open sessions. That way we can find if an app opened a stereo channel to > play audio (and so the APO should do upmix) or if an app is playing full > surround and intentionally only two channels are active (e.g. can happen > while a movie is played) and in this case we should NOT do any upmix in the > APO. > > Because there can be many audio sessions simultaneous then we will take > the minimum or maximum values for reference. > > The above is only one example and there are other cases in which our APO > needs to know the original format. > > Windows API allows us to enumerate all the active audio sessions (we can > filter it per endpoint) and get IAudioSessionControl for each session but > we need to use it to get the active WAVESFORMATEX. > > > > Note - we do not have any SFX APOs, only global. > > Is there any way to resolve this? > > Thank you, > > Dadi > > > > > > > > 2014-12-15 18:58 GMT+02:00 Matthew van Eerde < > Matthew.van.Eerde@xxxxxxxxxxxxx>: > > Conceptually, an audio session (IAudioSessionControl) is an (app, > endpoint) pair. > > > > An app can have zero or more active streams (IAudioClient) on a given > endpoint at any given time. > > > > The stream has an associated WAVEFORMATEX (what was passed to > IAudioClient::Initialize) but there’s no way to retrieve it from the > IAudioClient. > > > > There is also no way to get the list of active IAudioClients from an > IAudioSessionControl. > > > > What is the larger problem you’re trying to solve? > > > > *From**:* wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto: > wdmaudiodev-bounce@xxxxxxxxxxxxx] *On Behalf Of* Dadi > *Sent**:* Sunday, December 14, 2014 11:21 AM > *To**:* wdmaudiodev@xxxxxxxxxxxxx > *Subject**:* [wdmaudiodev] Retrieving WAVEFORMATEX from > IAudioSessionControl > > > > Hi, > > Is it possible to retrieve the audio session format (WAVEFORMATEX) from a > given pointer to an active IAudioSessionControl? > > Thank you, > > Dadi > >