[PATCH 3/4] l3codeca.acm: Simplify error handling in MPEG3_StreamOpen().

Andrew Eikum aeikum at codeweavers.com
Wed Jun 9 14:47:52 CDT 2021


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

On Fri, Jun 04, 2021 at 04:43:38PM -0500, Zebediah Figura wrote:
> Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
> ---
>  dlls/l3codeca.acm/mpegl3.c | 103 +++++++++++++------------------------
>  1 file changed, 35 insertions(+), 68 deletions(-)
> 
> diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c
> index 25097d424c4..fb7c9cf386b 100644
> --- a/dlls/l3codeca.acm/mpegl3.c
> +++ b/dlls/l3codeca.acm/mpegl3.c
> @@ -179,94 +179,59 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
>      *ndst = dpos;
>  }
>  
> -/***********************************************************************
> - *           MPEG3_Reset
> - *
> - */
> -static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad)
> -{
> -    mpg123_feedseek(aad->mh, 0, SEEK_SET, NULL);
> -    mpg123_close(aad->mh);
> -    mpg123_open_feed(aad->mh);
> -}
> -
>  /***********************************************************************
>   *           MPEG3_StreamOpen
>   *
>   */
> -static	LRESULT	MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
> +static LRESULT MPEG3_StreamOpen(ACMDRVSTREAMINSTANCE *instance)
>  {
> -    LRESULT error = MMSYSERR_NOTSUPPORTED;
>      AcmMpeg3Data*	aad;
>      int err;
>  
> -    assert(!(adsi->fdwOpen & ACM_STREAMOPENF_ASYNC));
> +    assert(!(instance->fdwOpen & ACM_STREAMOPENF_ASYNC));
>  
> -    if (MPEG3_GetFormatIndex(adsi->pwfxSrc) == 0xFFFFFFFF ||
> -	MPEG3_GetFormatIndex(adsi->pwfxDst) == 0xFFFFFFFF)
> -	return ACMERR_NOTPOSSIBLE;
> +    if (MPEG3_GetFormatIndex(instance->pwfxSrc) == 0xFFFFFFFF
> +            || MPEG3_GetFormatIndex(instance->pwfxDst) == 0xFFFFFFFF)
> +        return ACMERR_NOTPOSSIBLE;
>  
> -    aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmMpeg3Data));
> -    if (aad == 0) return MMSYSERR_NOMEM;
> +    if (instance->pwfxDst->wFormatTag != WAVE_FORMAT_PCM)
> +        return MMSYSERR_NOTSUPPORTED;
>  
> -    adsi->dwDriver = (DWORD_PTR)aad;
> +    if (instance->pwfxSrc->wFormatTag != WAVE_FORMAT_MPEGLAYER3
> +            && instance->pwfxSrc->wFormatTag != WAVE_FORMAT_MPEG)
> +        return MMSYSERR_NOTSUPPORTED;
>  
> -    if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
> -	adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
> +    if (instance->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3)
>      {
> -	goto theEnd;
> +        MPEGLAYER3WAVEFORMAT *mp3_format = (MPEGLAYER3WAVEFORMAT *)instance->pwfxSrc;
> +
> +        if (instance->pwfxSrc->cbSize < MPEGLAYER3_WFX_EXTRA_BYTES
> +                || mp3_format->wID != MPEGLAYER3_ID_MPEG)
> +            return ACMERR_NOTPOSSIBLE;
>      }
> -    else if ((adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 ||
> -              adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEG) &&
> -             adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
> -    {
> -        if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3)
> -        {
> -            MPEGLAYER3WAVEFORMAT *formatmp3 = (MPEGLAYER3WAVEFORMAT *)adsi->pwfxSrc;
>  
> -            if (adsi->pwfxSrc->cbSize < MPEGLAYER3_WFX_EXTRA_BYTES ||
> -                formatmp3->wID != MPEGLAYER3_ID_MPEG)
> -            {
> -                error = ACMERR_NOTPOSSIBLE;
> -                goto theEnd;
> -            }
> -        }
> +    if (instance->pwfxSrc->nSamplesPerSec != instance->pwfxDst->nSamplesPerSec
> +            || instance->pwfxSrc->nChannels != instance->pwfxDst->nChannels
> +            || instance->pwfxDst->wBitsPerSample != 16)
> +        return MMSYSERR_NOTSUPPORTED;
>  
> -	/* resampling or mono <=> stereo not available
> -         * MPEG3 algo only define 16 bit per sample output
> -         */
> -	if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec ||
> -	    adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels ||
> -            adsi->pwfxDst->wBitsPerSample != 16)
> -	    goto theEnd;
> -        aad->mh = mpg123_new(NULL,&err);
> -        mpg123_open_feed(aad->mh);
> +    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);
>  
>  #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
> -         * to ask for seeks in order to read specific frames in the file.
> -         * 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 may find a XING header in the mp3 and use that information
> +     * to ask for seeks in order to read specific frames in the file.
> +     * 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);
>  #endif
> -    }
> -    else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
> -             (adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3 ||
> -              adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEG))
> -    {
> -        WARN("Encoding to MPEG is not supported\n");
> -        goto theEnd;
> -    }
> -    else goto theEnd;
> -    MPEG3_Reset(adsi, aad);
>  
>      return MMSYSERR_NOERROR;
> -
> - theEnd:
> -    HeapFree(GetProcessHeap(), 0, aad);
> -    adsi->dwDriver = 0L;
> -    return error;
>  }
>  
>  /***********************************************************************
> @@ -568,7 +533,9 @@ static LRESULT MPEG3_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEAD
>       */
>      if ((adsh->fdwConvert & ACM_STREAMCONVERTF_START))
>      {
> -        MPEG3_Reset(adsi, aad);
> +        mpg123_feedseek(aad->mh, 0, SEEK_SET, NULL);
> +        mpg123_close(aad->mh);
> +        mpg123_open_feed(aad->mh);
>      }
>  
>      mp3_horse(adsi, adsh->pbSrc, &nsrc, adsh->pbDst, &ndst);
> -- 
> 2.30.2
> 
> 



More information about the wine-devel mailing list