From: Andrew Eikum Subject: Re: [PATCH v2 2/4] winemp3.acm: Disallow operations encoding to MPEG. Message-Id: <20170622131835.GM3954@foghorn.codeweavers.com> Date: Thu, 22 Jun 2017 08:18:35 -0500 In-Reply-To: <20170609230828.20804-1-z.figura12@gmail.com> References: <20170609230828.20804-1-z.figura12@gmail.com> Signed-off-by: Andrew Eikum On Fri, Jun 09, 2017 at 06:08:28PM -0500, Zebediah Figura wrote: > Since the winemp3 driver is currently decode-only, and most Windows > versions do not ship by default with a driver capable of encoding > to mpeg3, we should report the driver's capabilities accordingly. > > v2: remove failing tests > Signed-off-by: Zebediah Figura > --- > dlls/winemp3.acm/mpegl3.c | 80 ++++++++++------------------------------------- > 1 file changed, 17 insertions(+), 63 deletions(-) > > diff --git a/dlls/winemp3.acm/mpegl3.c b/dlls/winemp3.acm/mpegl3.c > index cc6008da59e..c5d71bba524 100644 > --- a/dlls/winemp3.acm/mpegl3.c > +++ b/dlls/winemp3.acm/mpegl3.c > @@ -258,10 +258,13 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) > mpg123_param(aad->mh, MPG123_ADD_FLAGS, MPG123_IGNORE_INFOFRAME, 0); > #endif > } > - /* no encoding yet > else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && > - adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3) > - */ > + (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); > > @@ -736,54 +739,19 @@ static LRESULT MPEG3_FormatTagDetails(PACMFORMATTAGDETAILSW aftd, DWORD dwQuery) > case 1: > aftd->dwFormatTag = WAVE_FORMAT_MPEGLAYER3; > aftd->cbFormatSize = sizeof(MPEGLAYER3WAVEFORMAT); > - aftd->cStandardFormats = NUM_MPEG3_FORMATS; > + aftd->cStandardFormats = 0; > lstrcpyW(aftd->szFormatTag, szMpeg3); > break; > case 2: > aftd->dwFormatTag = WAVE_FORMAT_MPEG; > aftd->cbFormatSize = sizeof(MPEG1WAVEFORMAT); > - aftd->cStandardFormats = NUM_MPEG3_FORMATS; > + aftd->cStandardFormats = 0; > lstrcpyW(aftd->szFormatTag, szMpeg); > break; > } > return MMSYSERR_NOERROR; > } > > -static void fill_in_mp3(unsigned cbwfx, WAVEFORMATEX* wfx, unsigned bit_rate) > -{ > - MPEGLAYER3WAVEFORMAT* mp3wfx = (MPEGLAYER3WAVEFORMAT*)wfx; > - > - wfx->nAvgBytesPerSec = bit_rate / 8; > - if (cbwfx >= sizeof(WAVEFORMATEX)) > - wfx->cbSize = sizeof(MPEGLAYER3WAVEFORMAT) - sizeof(WAVEFORMATEX); > - if (cbwfx >= sizeof(MPEGLAYER3WAVEFORMAT)) > - { > - mp3wfx->wID = MPEGLAYER3_ID_MPEG; > - mp3wfx->fdwFlags = MPEGLAYER3_FLAG_PADDING_OFF; > - mp3wfx->nBlockSize = (bit_rate * 144) / wfx->nSamplesPerSec; > - mp3wfx->nFramesPerBlock = 1; > - mp3wfx->nCodecDelay = 0x0571; > - } > -} > - > -static void fill_in_mpeg(unsigned cbwfx, WAVEFORMATEX* wfx, unsigned bit_rate) > -{ > - MPEG1WAVEFORMAT* mp3wfx = (MPEG1WAVEFORMAT*)wfx; > - > - wfx->nAvgBytesPerSec = bit_rate / 8; > - if (cbwfx >= sizeof(WAVEFORMATEX)) > - wfx->cbSize = sizeof(MPEG1WAVEFORMAT) - sizeof(WAVEFORMATEX); > - if (cbwfx >= sizeof(MPEG1WAVEFORMAT)) > - { > - mp3wfx->fwHeadLayer = ACM_MPEG_LAYER3; > - mp3wfx->dwHeadBitrate = wfx->nAvgBytesPerSec * 8; > - mp3wfx->fwHeadMode = ACM_MPEG_JOINTSTEREO; > - mp3wfx->fwHeadModeExt = 0xf; > - mp3wfx->wHeadEmphasis = 1; > - mp3wfx->fwHeadFlags = ACM_MPEG_ID_MPEG1; > - } > -} > - > /*********************************************************************** > * MPEG3_FormatDetails > * > @@ -814,16 +782,8 @@ static LRESULT MPEG3_FormatDetails(PACMFORMATDETAILSW afd, DWORD dwQuery) > break; > case WAVE_FORMAT_MPEGLAYER3: > case WAVE_FORMAT_MPEG: > - if (afd->dwFormatIndex >= NUM_MPEG3_FORMATS) return ACMERR_NOTPOSSIBLE; > - afd->pwfx->nChannels = MPEG3_Formats[afd->dwFormatIndex].nChannels; > - afd->pwfx->nSamplesPerSec = MPEG3_Formats[afd->dwFormatIndex].rate; > - afd->pwfx->wBitsPerSample = MPEG3_Formats[afd->dwFormatIndex].nBits; > - afd->pwfx->nBlockAlign = 1; > - if (afd->dwFormatTag == WAVE_FORMAT_MPEGLAYER3) > - fill_in_mp3(afd->cbwfx, afd->pwfx, 192000); > - else > - fill_in_mpeg(afd->cbwfx, afd->pwfx, 192000); > - break; > + WARN("Encoding to MPEG is not supported\n"); > + return ACMERR_NOTPOSSIBLE; > default: > WARN("Unsupported tag %08x\n", afd->dwFormatTag); > return MMSYSERR_INVALPARAM; > @@ -856,18 +816,15 @@ static LRESULT MPEG3_FormatSuggest(PACMDRVFORMATSUGGEST adfs) > adfs->pwfxDst->nChannels = adfs->pwfxSrc->nChannels; > if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NSAMPLESPERSEC)) > adfs->pwfxDst->nSamplesPerSec = adfs->pwfxSrc->nSamplesPerSec; > - > if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WBITSPERSAMPLE)) > - { > - if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM) > - adfs->pwfxDst->wBitsPerSample = 4; > - else > - adfs->pwfxDst->wBitsPerSample = 16; > - } > + adfs->pwfxDst->wBitsPerSample = 16; > if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG)) > { > if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM) > - adfs->pwfxDst->wFormatTag = WAVE_FORMAT_MPEGLAYER3; > + { > + WARN("Encoding to MPEG is not supported\n"); > + return ACMERR_NOTPOSSIBLE; > + } > else > adfs->pwfxDst->wFormatTag = WAVE_FORMAT_PCM; > } > @@ -883,12 +840,9 @@ static LRESULT MPEG3_FormatSuggest(PACMDRVFORMATSUGGEST adfs) > adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * adfs->pwfxDst->nBlockAlign; > break; > case WAVE_FORMAT_MPEG: > - adfs->pwfxDst->nBlockAlign = 1; > - fill_in_mpeg(adfs->cbwfxDst, adfs->pwfxDst, 192000); > - break; > case WAVE_FORMAT_MPEGLAYER3: > - adfs->pwfxDst->nBlockAlign = 1; > - fill_in_mp3(adfs->cbwfxDst, adfs->pwfxDst, 192000); > + WARN("Encoding to MPEG is not supported\n"); > + return ACMERR_NOTPOSSIBLE; > break; > default: > FIXME("\n"); > -- > 2.13.0 > > >