a few fixes in PCM conversion
eric pouech
eric.pouech at wanadoo.fr
Fri Apr 13 15:34:07 CDT 2001
A+
--
---------------
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/)
"The future will be better tomorrow", Vice President Dan Quayle
-------------- next part --------------
Name: msacm_pcm
ChangeLog: A few fixes...
GenDate: 2001/04/13 20:26:32 UTC
ModifiedFiles: dlls/msacm/pcmconverter.c
AddedFiles:
===================================================================
RCS file: /usr/share/cvs/cvsroot/wine/wine/dlls/msacm/pcmconverter.c,v
retrieving revision 1.4
diff -u -u -r1.4 pcmconverter.c
--- dlls/msacm/pcmconverter.c 2001/01/26 20:43:43 1.4
+++ dlls/msacm/pcmconverter.c 2001/03/25 16:49:13
@@ -30,9 +30,11 @@
/***********************************************************************
* PCM_drvOpen
*/
-static DWORD PCM_drvOpen(LPCSTR str)
+static DWORD PCM_drvOpen(LPCSTR str, PACMDRVOPENDESCW adod)
{
- return 1;
+ return
+ adod->fccType == ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC &&
+ adod->fccComp == ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
}
/***********************************************************************
@@ -726,7 +728,7 @@
break;
case ACM_FORMATTAGDETAILSF_LARGESTSIZE:
if (aftd->dwFormatTag != WAVE_FORMAT_UNKNOWN &&
- aftd->dwFormatTag != WAVE_FORMAT_UNKNOWN)
+ aftd->dwFormatTag != WAVE_FORMAT_PCM)
return ACMERR_NOTPOSSIBLE;
break;
default:
@@ -752,8 +754,7 @@
{
switch (dwQuery) {
case ACM_FORMATDETAILSF_FORMAT:
- afd->dwFormatIndex = PCM_GetFormatIndex(afd->pwfx);
- if (afd->dwFormatIndex == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
+ if (PCM_GetFormatIndex(afd->pwfx) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
break;
case ACM_FORMATDETAILSF_INDEX:
assert(afd->dwFormatIndex < NUM_PCM_FORMATS);
@@ -875,18 +876,21 @@
*/
static LRESULT PCM_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE adss)
{
+ DWORD srcMask = ~(adsi->pwfxSrc->nBlockAlign - 1);
+ DWORD dstMask = ~(adsi->pwfxDst->nBlockAlign - 1);
+
switch (adss->fdwSize) {
case ACM_STREAMSIZEF_DESTINATION:
/* cbDstLength => cbSrcLength */
- adss->cbSrcLength = PCM_round(adss->cbDstLength,
+ adss->cbSrcLength = PCM_round(adss->cbDstLength & dstMask,
adsi->pwfxSrc->nAvgBytesPerSec,
- adsi->pwfxDst->nAvgBytesPerSec);
+ adsi->pwfxDst->nAvgBytesPerSec) & srcMask;
break;
case ACM_STREAMSIZEF_SOURCE:
/* cbSrcLength => cbDstLength */
- adss->cbDstLength = PCM_round(adss->cbSrcLength,
+ adss->cbDstLength = PCM_round(adss->cbSrcLength & srcMask,
adsi->pwfxDst->nAvgBytesPerSec,
- adsi->pwfxSrc->nAvgBytesPerSec);
+ adsi->pwfxSrc->nAvgBytesPerSec) & dstMask;
break;
default:
WARN("Unsupported query %08lx\n", adss->fdwSize);
@@ -954,7 +958,7 @@
switch (wMsg) {
case DRV_LOAD: return 1;
case DRV_FREE: return 1;
- case DRV_OPEN: return PCM_drvOpen((LPSTR)dwParam1);
+ case DRV_OPEN: return PCM_drvOpen((LPSTR)dwParam1, (PACMDRVOPENDESCW)dwParam2);
case DRV_CLOSE: return PCM_drvClose(dwDevID);
case DRV_ENABLE: return 1;
case DRV_DISABLE: return 1;
More information about the wine-patches
mailing list