[PATCH 4/7] winecoreaudio: Pass the stream separately to ca_setvol().

Andrew Eikum aeikum at codeweavers.com
Mon Nov 22 14:54:52 CST 2021


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Thu, Nov 18, 2021 at 07:52:35AM +0000, Huw Davies wrote:
> This is a temporary measure that will enable the client volumes to be
> initialized without having the stream set.
> 
> Signed-off-by: Huw Davies <huw at codeweavers.com>
> ---
>  dlls/winecoreaudio.drv/mmdevdrv.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
> index abe77d11ee9..1e678b08c5b 100644
> --- a/dlls/winecoreaudio.drv/mmdevdrv.c
> +++ b/dlls/winecoreaudio.drv/mmdevdrv.c
> @@ -178,7 +178,7 @@ static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0,
>  static struct list g_sessions = LIST_INIT(g_sessions);
>  
>  static AudioSessionWrapper *AudioSessionWrapper_Create(ACImpl *client);
> -static HRESULT ca_setvol(ACImpl *This, UINT32 index);
> +static HRESULT ca_setvol(ACImpl *This, struct coreaudio_stream *stream, UINT32 index);
>  
>  static inline ACImpl *impl_from_IAudioClient3(IAudioClient3 *iface)
>  {
> @@ -1382,7 +1382,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
>  
>      list_add_tail(&This->session->clients, &This->entry);
>  
> -    ca_setvol(This, -1);
> +    ca_setvol(This, This->stream, -1);
>  
>      This->initted = TRUE;
>  
> @@ -2978,7 +2978,7 @@ static const IAudioSessionControl2Vtbl AudioSessionControl2_Vtbl =
>  };
>  
>  /* index == -1 means set all channels, otherwise sets only the given channel */
> -static HRESULT ca_setvol(ACImpl *This, UINT32 index)
> +static HRESULT ca_setvol(ACImpl *This, struct coreaudio_stream *stream, UINT32 index)
>  {
>      Float32 level;
>      OSStatus sc;
> @@ -2989,7 +2989,7 @@ static HRESULT ca_setvol(ACImpl *This, UINT32 index)
>          if(index == (UINT32)-1){
>              UINT32 i;
>              level = 1.;
> -            for(i = 0; i < This->stream->fmt->nChannels; ++i){
> +            for(i = 0; i < stream->fmt->nChannels; ++i){
>                  Float32 tmp;
>                  tmp = This->session->master_vol *
>                      This->session->channel_vols[i] * This->vols[i];
> @@ -3000,7 +3000,7 @@ static HRESULT ca_setvol(ACImpl *This, UINT32 index)
>                  This->session->channel_vols[index] * This->vols[index];
>      }
>  
> -    sc = AudioUnitSetParameter(This->stream->unit, kHALOutputParam_Volume,
> +    sc = AudioUnitSetParameter(stream->unit, kHALOutputParam_Volume,
>              kAudioUnitScope_Global, 0, level, 0);
>      if(sc != noErr)
>          WARN("Couldn't set volume: %x\n", (int)sc);
> @@ -3015,7 +3015,7 @@ static HRESULT ca_session_setvol(AudioSession *session, UINT32 index)
>  
>      LIST_FOR_EACH_ENTRY(client, &session->clients, ACImpl, entry){
>          HRESULT hr;
> -        hr = ca_setvol(client, index);
> +        hr = ca_setvol(client, client->stream, index);
>          if(FAILED(hr))
>              ret = hr;
>      }
> @@ -3214,7 +3214,7 @@ static HRESULT WINAPI AudioStreamVolume_SetChannelVolume(
>      This->vols[index] = level;
>  
>      WARN("CoreAudio doesn't support per-channel volume control\n");
> -    ret = ca_setvol(This, index);
> +    ret = ca_setvol(This, This->stream, index);
>  
>      LeaveCriticalSection(&g_sessions_lock);
>  
> @@ -3259,7 +3259,7 @@ static HRESULT WINAPI AudioStreamVolume_SetAllVolumes(
>      for(i = 0; i < count; ++i)
>          This->vols[i] = levels[i];
>  
> -    ret = ca_setvol(This, -1);
> +    ret = ca_setvol(This, This->stream, -1);
>  
>      LeaveCriticalSection(&g_sessions_lock);
>  
> -- 
> 2.23.0
> 
> 



More information about the wine-devel mailing list