[PATCH 03/11] winecoreaudio: Move get_next_packet_size to the unixlib.

Andrew Eikum aeikum at codeweavers.com
Wed Nov 24 09:25:41 CST 2021


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

On Wed, Nov 24, 2021 at 11:26:44AM +0000, Huw Davies wrote:
> The capture_resample syscall can now be removed.
> 
> Signed-off-by: Huw Davies <huw at codeweavers.com>
> ---
>  dlls/winecoreaudio.drv/coreaudio.c | 27 ++++++++++++++++++++++-----
>  dlls/winecoreaudio.drv/mmdevdrv.c  | 22 +++++-----------------
>  dlls/winecoreaudio.drv/unixlib.h   | 10 ++++++++--
>  3 files changed, 35 insertions(+), 24 deletions(-)
> 
> diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c
> index d723291bb24..0ed4fcb02fe 100644
> --- a/dlls/winecoreaudio.drv/coreaudio.c
> +++ b/dlls/winecoreaudio.drv/coreaudio.c
> @@ -1068,9 +1068,8 @@ static OSStatus feed_cb(AudioConverterRef converter, UInt32 *nframes, AudioBuffe
>      return noErr;
>  }
>  
> -static NTSTATUS capture_resample(void *args)
> +static void capture_resample(struct coreaudio_stream *stream)
>  {
> -    struct coreaudio_stream *stream = args;
>      UINT32 resamp_period_frames = muldiv(stream->period_frames, stream->dev_desc.mSampleRate,
>                                           stream->fmt->nSamplesPerSec);
>      OSStatus sc;
> @@ -1115,7 +1114,6 @@ static NTSTATUS capture_resample(void *args)
>          }else
>              stream->held_frames += wanted_frames;
>      }
> -    return STATUS_SUCCESS;
>  }
>  
>  static NTSTATUS get_buffer_size(void *args)
> @@ -1485,6 +1483,26 @@ static NTSTATUS release_capture_buffer(void *args)
>      return STATUS_SUCCESS;
>  }
>  
> +static NTSTATUS get_next_packet_size(void *args)
> +{
> +    struct get_next_packet_size_params *params = args;
> +    struct coreaudio_stream *stream = params->stream;
> +
> +    OSSpinLockLock(&stream->lock);
> +
> +    capture_resample(stream);
> +
> +    if(stream->held_frames >= stream->period_frames)
> +        *params->frames = stream->period_frames;
> +    else
> +        *params->frames = 0;
> +
> +    OSSpinLockUnlock(&stream->lock);
> +
> +    params->result = S_OK;
> +    return STATUS_SUCCESS;
> +}
> +
>  unixlib_entry_t __wine_unix_call_funcs[] =
>  {
>      get_endpoint_ids,
> @@ -1502,6 +1520,5 @@ unixlib_entry_t __wine_unix_call_funcs[] =
>      get_buffer_size,
>      get_latency,
>      get_current_padding,
> -
> -    capture_resample /* temporary */
> +    get_next_packet_size,
>  };
> diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
> index cc37bebdc77..b0208ce0a44 100644
> --- a/dlls/winecoreaudio.drv/mmdevdrv.c
> +++ b/dlls/winecoreaudio.drv/mmdevdrv.c
> @@ -683,11 +683,6 @@ static HRESULT get_audio_session(const GUID *sessionguid,
>      return S_OK;
>  }
>  
> -static void capture_resample(ACImpl *This)
> -{
> -    UNIX_CALL(capture_resample, This->stream);
> -}
> -
>  static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
>          AUDCLNT_SHAREMODE mode, DWORD flags, REFERENCE_TIME duration,
>          REFERENCE_TIME period, const WAVEFORMATEX *fmt,
> @@ -1401,24 +1396,17 @@ static HRESULT WINAPI AudioCaptureClient_GetNextPacketSize(
>          IAudioCaptureClient *iface, UINT32 *frames)
>  {
>      ACImpl *This = impl_from_IAudioCaptureClient(iface);
> +    struct get_next_packet_size_params params;
>  
>      TRACE("(%p)->(%p)\n", This, frames);
>  
>      if(!frames)
>          return E_POINTER;
>  
> -    OSSpinLockLock(&This->stream->lock);
> -
> -    capture_resample(This);
> -
> -    if(This->stream->held_frames >= This->stream->period_frames)
> -        *frames = This->stream->period_frames;
> -    else
> -        *frames = 0;
> -
> -    OSSpinLockUnlock(&This->stream->lock);
> -
> -    return S_OK;
> +    params.stream = This->stream;
> +    params.frames = frames;
> +    UNIX_CALL(get_next_packet_size, &params);
> +    return params.result;
>  }
>  
>  static const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl =
> diff --git a/dlls/winecoreaudio.drv/unixlib.h b/dlls/winecoreaudio.drv/unixlib.h
> index 9bb636fd625..32eb57a866a 100644
> --- a/dlls/winecoreaudio.drv/unixlib.h
> +++ b/dlls/winecoreaudio.drv/unixlib.h
> @@ -166,6 +166,13 @@ struct get_current_padding_params
>      UINT32 *padding;
>  };
>  
> +struct get_next_packet_size_params
> +{
> +    struct coreaudio_stream *stream;
> +    HRESULT result;
> +    UINT32 *frames;
> +};
> +
>  enum unix_funcs
>  {
>      unix_get_endpoint_ids,
> @@ -183,8 +190,7 @@ enum unix_funcs
>      unix_get_buffer_size,
>      unix_get_latency,
>      unix_get_current_padding,
> -
> -    unix_capture_resample /* temporary */
> +    unix_get_next_packet_size,
>  };
>  
>  extern unixlib_handle_t coreaudio_handle;
> -- 
> 2.23.0
> 
> 



More information about the wine-devel mailing list