[PATCH] xaudio2_9: Use new FAudioCreateReverb9 interface.

Andrew Eikum aeikum at codeweavers.com
Mon Aug 10 08:13:48 CDT 2020


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

On Wed, Aug 05, 2020 at 09:08:10AM +0200, Rémi Bernon wrote:
> XAudio 2.9 and Windows 10 introduced a new SideDelay field in the middle
> of the XAUDIO2FX_REVERB_PARAMETERS structure, which causes other fields
> to be offseted and incorrectly read from the parameter buffer.
> 
> FAudio 20.08 introduces this new interface to create reverb effects that
> use the new parameter structure layout.
> 
> This fixes audio glitches in Dragon Quest Builders 2.
> 
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
>  configure.ac          |  3 ++-
>  dlls/xaudio2_7/xapo.c | 11 +++++++++++
>  include/config.h.in   |  3 +++
>  3 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 65a7c5d6252..0573cb65e20 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1778,7 +1778,8 @@ then
>              [WINE_CHECK_SONAME(FAudio,FAudioCreate,,,[$FAUDIO_LIBS],[[libFAudio*]])])
>               WINE_CHECK_LIB_FUNCS([FAudio_CommitOperationSet \
>                                     F3DAudioInitialize8 \
> -                                   FAudioLinkedVersion], [$FAUDIO_LIBS])
> +                                   FAudioLinkedVersion \
> +                                   FAudioCreateReverb9WithCustomAllocatorEXT], [$FAUDIO_LIBS])
>              ])
>  fi
>  WINE_NOTICE_WITH(faudio,[test "x$ac_cv_lib_soname_FAudio" = "x"],
> diff --git a/dlls/xaudio2_7/xapo.c b/dlls/xaudio2_7/xapo.c
> index e64523ea199..e47442959d3 100644
> --- a/dlls/xaudio2_7/xapo.c
> +++ b/dlls/xaudio2_7/xapo.c
> @@ -313,6 +313,16 @@ static inline HRESULT get_fapo_from_clsid(REFCLSID clsid, FAPO **fapo)
>              XAudio_Internal_Free,
>              XAudio_Internal_Realloc
>          );
> +#if XAUDIO2_VER >= 9 && HAVE_FAUDIOCREATEREVERB9WITHCUSTOMALLOCATOREXT
> +    if(IsEqualGUID(clsid, &CLSID_AudioReverb27))
> +        return FAudioCreateReverb9WithCustomAllocatorEXT(
> +            fapo,
> +            0,
> +            XAudio_Internal_Malloc,
> +            XAudio_Internal_Free,
> +            XAudio_Internal_Realloc
> +        );
> +#else
>      if(IsEqualGUID(clsid, &CLSID_AudioReverb27))
>          return FAudioCreateReverbWithCustomAllocatorEXT(
>              fapo,
> @@ -322,6 +332,7 @@ static inline HRESULT get_fapo_from_clsid(REFCLSID clsid, FAPO **fapo)
>              XAudio_Internal_Realloc
>          );
>  #endif
> +#endif
>  #if XAUDIO2_VER >= 8 || defined XAPOFX1_VER
>      if(IsEqualGUID(clsid, &CLSID_FXReverb) ||
>              IsEqualGUID(clsid, &CLSID_FXEQ) ||
> diff --git a/include/config.h.in b/include/config.h.in
> index 4d479a6cb3d..292ac55eeb8 100644
> --- a/include/config.h.in
> +++ b/include/config.h.in
> @@ -152,6 +152,9 @@
>  /* Define to 1 if you have the `fallocate' function. */
>  #undef HAVE_FALLOCATE
>  
> +/* Define to 1 if you have the `FAudioCreateReverb9WithCustomAllocatorEXT' function. */
> +#undef HAVE_FAUDIOCREATEREVERB9WITHCUSTOMALLOCATOREXT
> +
>  /* Define to 1 if you have the `FAudioLinkedVersion' function. */
>  #undef HAVE_FAUDIOLINKEDVERSION
>  
> -- 
> 2.27.0
> 
> 



More information about the wine-devel mailing list