[PATCH 4/4] l3codeca.acm: Store the mpg123 handle directly as the ACM driver data.

Andrew Eikum aeikum at codeweavers.com
Wed Jun 9 14:48:01 CDT 2021


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

On Fri, Jun 04, 2021 at 04:43:39PM -0500, Zebediah Figura wrote:
> Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
> ---
>  dlls/l3codeca.acm/mpegl3.c | 51 ++++++++++++++++----------------------
>  1 file changed, 21 insertions(+), 30 deletions(-)
> 
> diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c
> index fb7c9cf386b..fa9f38258e5 100644
> --- a/dlls/l3codeca.acm/mpegl3.c
> +++ b/dlls/l3codeca.acm/mpegl3.c
> @@ -111,11 +111,6 @@ static	DWORD	MPEG3_GetFormatIndex(LPWAVEFORMATEX wfx)
>      return 0xFFFFFFFF;
>  }
>  
> -typedef struct tagAcmMpeg3Data
> -{
> -    mpg123_handle *mh;
> -} AcmMpeg3Data;
> -
>  /***********************************************************************
>   *           MPEG3_drvOpen
>   */
> @@ -135,11 +130,9 @@ static LRESULT MPEG3_drvClose(DWORD_PTR dwDevID)
>  }
>  
>  
> -static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
> -                      const unsigned char* src, LPDWORD nsrc,
> -                      unsigned char* dst, LPDWORD ndst)
> +static void mp3_horse(mpg123_handle *handle, const unsigned char *src,
> +        DWORD *nsrc, unsigned char *dst, DWORD *ndst)
>  {
> -    AcmMpeg3Data*       amd = (AcmMpeg3Data*)adsi->dwDriver;
>      int                 ret;
>      size_t              size;
>      DWORD               dpos = 0;
> @@ -147,7 +140,7 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
>  
>      if (*nsrc > 0)
>      {
> -        ret = mpg123_feed(amd->mh, src, *nsrc);
> +        ret = mpg123_feed(handle, src, *nsrc);
>          if (ret != MPG123_OK)
>          {
>              ERR("Error feeding data\n");
> @@ -158,7 +151,7 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
>  
>      do {
>          size = 0;
> -        ret = mpg123_read(amd->mh, dst + dpos, *ndst - dpos, &size);
> +        ret = mpg123_read(handle, dst + dpos, *ndst - dpos, &size);
>          if (ret == MPG123_ERR)
>          {
>              FIXME("Error occurred during decoding!\n");
> @@ -170,7 +163,7 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
>          {
>              long rate;
>              int channels, enc;
> -            mpg123_getformat(amd->mh, &rate, &channels, &enc);
> +            mpg123_getformat(handle, &rate, &channels, &enc);
>              TRACE("New format: %li Hz, %i channels, encoding value %i\n", rate, channels, enc);
>          }
>          dpos += size;
> @@ -185,7 +178,7 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
>   */
>  static LRESULT MPEG3_StreamOpen(ACMDRVSTREAMINSTANCE *instance)
>  {
> -    AcmMpeg3Data*	aad;
> +    mpg123_handle *handle;
>      int err;
>  
>      assert(!(instance->fdwOpen & ACM_STREAMOPENF_ASYNC));
> @@ -215,12 +208,9 @@ static LRESULT MPEG3_StreamOpen(ACMDRVSTREAMINSTANCE *instance)
>              || instance->pwfxDst->wBitsPerSample != 16)
>          return MMSYSERR_NOTSUPPORTED;
>  
> -    if (!(aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmMpeg3Data))))
> -        return MMSYSERR_NOMEM;
> -    instance->dwDriver = (DWORD_PTR)aad;
> -
> -    aad->mh = mpg123_new(NULL, &err);
> -    mpg123_open_feed(aad->mh);
> +    handle = mpg123_new(NULL, &err);
> +    instance->dwDriver = (DWORD_PTR)handle;
> +    mpg123_open_feed(handle);
>  
>  #if MPG123_API_VERSION >= 31 /* needed for MPG123_IGNORE_FRAMEINFO enum value */
>      /* mpg123 may find a XING header in the mp3 and use that information
> @@ -228,7 +218,7 @@ static LRESULT MPEG3_StreamOpen(ACMDRVSTREAMINSTANCE *instance)
>       * We cannot allow that since the caller application is feeding us.
>       * This fixes problems for mp3 files encoded with LAME (bug 42361)
>       */
> -    mpg123_param(aad->mh, MPG123_ADD_FLAGS, MPG123_IGNORE_INFOFRAME, 0);
> +    mpg123_param(handle, MPG123_ADD_FLAGS, MPG123_IGNORE_INFOFRAME, 0);
>  #endif
>  
>      return MMSYSERR_NOERROR;
> @@ -238,11 +228,12 @@ static LRESULT MPEG3_StreamOpen(ACMDRVSTREAMINSTANCE *instance)
>   *           MPEG3_StreamClose
>   *
>   */
> -static	LRESULT	MPEG3_StreamClose(PACMDRVSTREAMINSTANCE adsi)
> +static LRESULT MPEG3_StreamClose(ACMDRVSTREAMINSTANCE *instance)
>  {
> -    mpg123_close(((AcmMpeg3Data*)adsi->dwDriver)->mh);
> -    mpg123_delete(((AcmMpeg3Data*)adsi->dwDriver)->mh);
> -    HeapFree(GetProcessHeap(), 0, (void*)adsi->dwDriver);
> +    mpg123_handle *handle = (mpg123_handle *)instance->dwDriver;
> +
> +    mpg123_close(handle);
> +    mpg123_delete(handle);
>      return MMSYSERR_NOERROR;
>  }
>  
> @@ -513,9 +504,9 @@ static	LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad
>   *           MPEG3_StreamConvert
>   *
>   */
> -static LRESULT MPEG3_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEADER adsh)
> +static LRESULT MPEG3_StreamConvert(ACMDRVSTREAMINSTANCE *instance, ACMDRVSTREAMHEADER *adsh)
>  {
> -    AcmMpeg3Data*	aad = (AcmMpeg3Data*)adsi->dwDriver;
> +    mpg123_handle *handle = (mpg123_handle *)instance->dwDriver;
>      DWORD		nsrc = adsh->cbSrcLength;
>      DWORD		ndst = adsh->cbDstLength;
>  
> @@ -533,12 +524,12 @@ static LRESULT MPEG3_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEAD
>       */
>      if ((adsh->fdwConvert & ACM_STREAMCONVERTF_START))
>      {
> -        mpg123_feedseek(aad->mh, 0, SEEK_SET, NULL);
> -        mpg123_close(aad->mh);
> -        mpg123_open_feed(aad->mh);
> +        mpg123_feedseek(handle, 0, SEEK_SET, NULL);
> +        mpg123_close(handle);
> +        mpg123_open_feed(handle);
>      }
>  
> -    mp3_horse(adsi, adsh->pbSrc, &nsrc, adsh->pbDst, &ndst);
> +    mp3_horse(handle, adsh->pbSrc, &nsrc, adsh->pbDst, &ndst);
>      adsh->cbSrcLengthUsed = nsrc;
>      adsh->cbDstLengthUsed = ndst;
>  
> -- 
> 2.30.2
> 
> 



More information about the wine-devel mailing list