msadp32: ADPCM allows other sample rates other than 8000, 11025, 22050 and 44100.
This commit is contained in:
parent
fbcc18754d
commit
c262d5b649
|
@ -128,6 +128,25 @@ static DWORD ADPCM_GetFormatIndex(const WAVEFORMATEX* wfx)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (wfx->wFormatTag)
|
||||||
|
{
|
||||||
|
case WAVE_FORMAT_PCM:
|
||||||
|
if(3 > wfx->nChannels &&
|
||||||
|
wfx->nChannels > 0 &&
|
||||||
|
wfx->nAvgBytesPerSec == 2 * wfx->nSamplesPerSec * wfx->nChannels &&
|
||||||
|
wfx->nBlockAlign == 2 * wfx->nChannels &&
|
||||||
|
wfx->wBitsPerSample == 16)
|
||||||
|
return hi;
|
||||||
|
break;
|
||||||
|
case WAVE_FORMAT_ADPCM:
|
||||||
|
if(3 > wfx->nChannels &&
|
||||||
|
wfx->nChannels > 0 &&
|
||||||
|
wfx->wBitsPerSample == 4 &&
|
||||||
|
wfx->cbSize == 32)
|
||||||
|
return hi;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0xFFFFFFFF;
|
return 0xFFFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,8 +165,8 @@ static void init_wfx_adpcm(ADPCMWAVEFORMAT* awfx)
|
||||||
case 8000: pwfx->nBlockAlign = 256; break;
|
case 8000: pwfx->nBlockAlign = 256; break;
|
||||||
case 11025: pwfx->nBlockAlign = 256; break;
|
case 11025: pwfx->nBlockAlign = 256; break;
|
||||||
case 22050: pwfx->nBlockAlign = 512; break;
|
case 22050: pwfx->nBlockAlign = 512; break;
|
||||||
default:
|
|
||||||
case 44100: pwfx->nBlockAlign = 1024; break;
|
case 44100: pwfx->nBlockAlign = 1024; break;
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
pwfx->cbSize = 2 * sizeof(WORD) + 7 * sizeof(ADPCMCOEFSET);
|
pwfx->cbSize = 2 * sizeof(WORD) + 7 * sizeof(ADPCMCOEFSET);
|
||||||
/* 7 is the size of the block head (which contains two samples) */
|
/* 7 is the size of the block head (which contains two samples) */
|
||||||
|
@ -477,18 +496,19 @@ static LRESULT ADPCM_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
|
||||||
adfs->pwfxDst->wFormatTag = WAVE_FORMAT_PCM;
|
adfs->pwfxDst->wFormatTag = WAVE_FORMAT_PCM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if result is ok */
|
|
||||||
if (ADPCM_GetFormatIndex(adfs->pwfxDst) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
|
||||||
|
|
||||||
/* recompute other values */
|
/* recompute other values */
|
||||||
switch (adfs->pwfxDst->wFormatTag)
|
switch (adfs->pwfxDst->wFormatTag)
|
||||||
{
|
{
|
||||||
case WAVE_FORMAT_PCM:
|
case WAVE_FORMAT_PCM:
|
||||||
adfs->pwfxDst->nBlockAlign = (adfs->pwfxDst->nChannels * adfs->pwfxDst->wBitsPerSample) / 8;
|
adfs->pwfxDst->nBlockAlign = (adfs->pwfxDst->nChannels * adfs->pwfxDst->wBitsPerSample) / 8;
|
||||||
adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * adfs->pwfxDst->nBlockAlign;
|
adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * adfs->pwfxDst->nBlockAlign;
|
||||||
|
/* check if result is ok */
|
||||||
|
if (ADPCM_GetFormatIndex(adfs->pwfxDst) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||||
break;
|
break;
|
||||||
case WAVE_FORMAT_ADPCM:
|
case WAVE_FORMAT_ADPCM:
|
||||||
init_wfx_adpcm((ADPCMWAVEFORMAT*)adfs->pwfxDst);
|
init_wfx_adpcm((ADPCMWAVEFORMAT*)adfs->pwfxDst);
|
||||||
|
/* check if result is ok */
|
||||||
|
if (ADPCM_GetFormatIndex(adfs->pwfxDst) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("\n");
|
FIXME("\n");
|
||||||
|
|
Loading…
Reference in New Issue