Add comments on a test which crashes on XP, Vista Modify broken test for Win 8
From: Michael Müller michael@fds-team.de
Signed-off-by: Vijay Kiran Kamuju infyquest@gmail.com --- dlls/l3codeca.acm/mpegl3.c | 15 ++++++- dlls/msacm32/tests/msacm.c | 83 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c index 8ad6ae83dc..2e929371ae 100644 --- a/dlls/l3codeca.acm/mpegl3.c +++ b/dlls/l3codeca.acm/mpegl3.c @@ -212,6 +212,7 @@ static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad) */ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) { + LRESULT error = MMSYSERR_NOTSUPPORTED; AcmMpeg3Data* aad; int err;
@@ -235,6 +236,18 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) 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; + } + } + /* resampling or mono <=> stereo not available * MPEG3 algo only define 16 bit per sample output */ @@ -270,7 +283,7 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) theEnd: HeapFree(GetProcessHeap(), 0, aad); adsi->dwDriver = 0L; - return MMSYSERR_NOTSUPPORTED; + return error; }
/*********************************************************************** diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c index 180639fa54..a6b17e8441 100644 --- a/dlls/msacm32/tests/msacm.c +++ b/dlls/msacm32/tests/msacm.c @@ -1276,6 +1276,88 @@ static void test_acmFormatChoose(void) HeapFree(GetProcessHeap(), 0, pwfx); }
+static void test_mp3(void) +{ + MPEGLAYER3WAVEFORMAT src; + WAVEFORMATEX dst; + HACMSTREAM has; + DWORD output; + MMRESULT mr; + + src.wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3; + src.wfx.nSamplesPerSec = 11025; + src.wfx.wBitsPerSample = 0; + src.wfx.nChannels = 1; + src.wfx.nBlockAlign = 576; + src.wfx.nAvgBytesPerSec = 2000; + + src.wID = MPEGLAYER3_ID_MPEG; + src.fdwFlags = 0; + src.nBlockSize = 576; + src.nFramesPerBlock = 1; + src.nCodecDelay = 0; + + dst.cbSize = 0; + dst.wFormatTag = WAVE_FORMAT_PCM; + dst.nSamplesPerSec = 11025; + dst.wBitsPerSample = 16; + dst.nChannels = 1; + dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8; + dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign; + + src.wfx.cbSize = 0; + + mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0); + ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE, got 0x%x\n", mr); + if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0); + + src.wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES; + src.wID = 0; + + mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0); + ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE, got 0x%x\n", mr); + if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0); + + src.wID = MPEGLAYER3_ID_MPEG; + src.nBlockSize = 0; + + mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0); + ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */, + "failed with error 0x%x\n", mr); + if (mr == MMSYSERR_NOERROR) + { + mr = acmStreamClose(has, 0); + ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr); + } + src.nBlockSize = 576; + src.wfx.nAvgBytesPerSec = 0; + + mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0); + ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */, + "failed with error 0x%x\n", mr); + if (mr == MMSYSERR_NOERROR) + { + /* causes a division by zero exception in XP, Vista, + but throws ACMERR_NOTPOSSIBLE on others */ + if (0) acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE); + mr = acmStreamClose(has, 0); + ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr); + } + + src.wfx.nAvgBytesPerSec = 2000; + + mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0); + ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */, + "failed with error 0x%x\n", mr); + if (mr == MMSYSERR_NOERROR) + { + mr = acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE); + ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr); + mr = acmStreamClose(has, 0); + ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr); + } +} + static struct { struct @@ -1446,6 +1528,7 @@ START_TEST(msacm) test_acmFormatSuggest(); test_acmFormatTagDetails(); test_acmFormatChoose(); + test_mp3(); /* Test acmDriverAdd in the end as it may conflict * with other tests due to codec lookup order */ test_acmDriverAdd();
Just curious, do you know what this fixes? I wasn't able to find any information in the wine-staging repo, nor anything relevant on the Wine bug tracker.
Andrew
On Mon, Apr 01, 2019 at 01:37:31AM +0200, Vijay Kiran Kamuju wrote:
Add comments on a test which crashes on XP, Vista Modify broken test for Win 8
From: Michael Müller michael@fds-team.de
Signed-off-by: Vijay Kiran Kamuju infyquest@gmail.com
dlls/l3codeca.acm/mpegl3.c | 15 ++++++- dlls/msacm32/tests/msacm.c | 83 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c index 8ad6ae83dc..2e929371ae 100644 --- a/dlls/l3codeca.acm/mpegl3.c +++ b/dlls/l3codeca.acm/mpegl3.c @@ -212,6 +212,7 @@ static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad) */ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) {
- LRESULT error = MMSYSERR_NOTSUPPORTED; AcmMpeg3Data* aad; int err;
@@ -235,6 +236,18 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) 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;
}
}
- /* resampling or mono <=> stereo not available * MPEG3 algo only define 16 bit per sample output */
@@ -270,7 +283,7 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) theEnd: HeapFree(GetProcessHeap(), 0, aad); adsi->dwDriver = 0L;
- return MMSYSERR_NOTSUPPORTED;
- return error;
}
/*********************************************************************** diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c index 180639fa54..a6b17e8441 100644 --- a/dlls/msacm32/tests/msacm.c +++ b/dlls/msacm32/tests/msacm.c @@ -1276,6 +1276,88 @@ static void test_acmFormatChoose(void) HeapFree(GetProcessHeap(), 0, pwfx); }
+static void test_mp3(void) +{
- MPEGLAYER3WAVEFORMAT src;
- WAVEFORMATEX dst;
- HACMSTREAM has;
- DWORD output;
- MMRESULT mr;
- src.wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
- src.wfx.nSamplesPerSec = 11025;
- src.wfx.wBitsPerSample = 0;
- src.wfx.nChannels = 1;
- src.wfx.nBlockAlign = 576;
- src.wfx.nAvgBytesPerSec = 2000;
- src.wID = MPEGLAYER3_ID_MPEG;
- src.fdwFlags = 0;
- src.nBlockSize = 576;
- src.nFramesPerBlock = 1;
- src.nCodecDelay = 0;
- dst.cbSize = 0;
- dst.wFormatTag = WAVE_FORMAT_PCM;
- dst.nSamplesPerSec = 11025;
- dst.wBitsPerSample = 16;
- dst.nChannels = 1;
- dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8;
- dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign;
- src.wfx.cbSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE, got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES;
- src.wID = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE, got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wID = MPEGLAYER3_ID_MPEG;
- src.nBlockSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.nBlockSize = 576;
- src.wfx.nAvgBytesPerSec = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
/* causes a division by zero exception in XP, Vista,
but throws ACMERR_NOTPOSSIBLE on others */
if (0) acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.wfx.nAvgBytesPerSec = 2000;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
+}
static struct { struct @@ -1446,6 +1528,7 @@ START_TEST(msacm) test_acmFormatSuggest(); test_acmFormatTagDetails(); test_acmFormatChoose();
- test_mp3(); /* Test acmDriverAdd in the end as it may conflict
test_acmDriverAdd();
- with other tests due to codec lookup order */
-- 2.21.0
Hi Andrew,
There is no bug associated with this, but it brings in a valid fix with tests from staging repo. There are a few patches like this in staging repo.
--- Vijay
On Tuesday, April 2, 2019, Andrew Eikum aeikum@codeweavers.com wrote:
Just curious, do you know what this fixes? I wasn't able to find any information in the wine-staging repo, nor anything relevant on the Wine bug tracker.
Andrew
On Mon, Apr 01, 2019 at 01:37:31AM +0200, Vijay Kiran Kamuju wrote:
Add comments on a test which crashes on XP, Vista Modify broken test for Win 8
From: Michael Müller michael@fds-team.de
Signed-off-by: Vijay Kiran Kamuju infyquest@gmail.com
dlls/l3codeca.acm/mpegl3.c | 15 ++++++- dlls/msacm32/tests/msacm.c | 83 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c index 8ad6ae83dc..2e929371ae 100644 --- a/dlls/l3codeca.acm/mpegl3.c +++ b/dlls/l3codeca.acm/mpegl3.c @@ -212,6 +212,7 @@ static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi,
AcmMpeg3Data* aad)
*/ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) {
- LRESULT error = MMSYSERR_NOTSUPPORTED; AcmMpeg3Data* aad; int err;
@@ -235,6 +236,18 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE
adsi)
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;
}
}
/* resampling or mono <=> stereo not available * MPEG3 algo only define 16 bit per sample output */
@@ -270,7 +283,7 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE
adsi)
theEnd: HeapFree(GetProcessHeap(), 0, aad); adsi->dwDriver = 0L;
- return MMSYSERR_NOTSUPPORTED;
- return error;
}
/***********************************************************
diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c index 180639fa54..a6b17e8441 100644 --- a/dlls/msacm32/tests/msacm.c +++ b/dlls/msacm32/tests/msacm.c @@ -1276,6 +1276,88 @@ static void test_acmFormatChoose(void) HeapFree(GetProcessHeap(), 0, pwfx); }
+static void test_mp3(void) +{
- MPEGLAYER3WAVEFORMAT src;
- WAVEFORMATEX dst;
- HACMSTREAM has;
- DWORD output;
- MMRESULT mr;
- src.wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
- src.wfx.nSamplesPerSec = 11025;
- src.wfx.wBitsPerSample = 0;
- src.wfx.nChannels = 1;
- src.wfx.nBlockAlign = 576;
- src.wfx.nAvgBytesPerSec = 2000;
- src.wID = MPEGLAYER3_ID_MPEG;
- src.fdwFlags = 0;
- src.nBlockSize = 576;
- src.nFramesPerBlock = 1;
- src.nCodecDelay = 0;
- dst.cbSize = 0;
- dst.wFormatTag = WAVE_FORMAT_PCM;
- dst.nSamplesPerSec = 11025;
- dst.wBitsPerSample = 16;
- dst.nChannels = 1;
- dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8;
- dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign;
- src.wfx.cbSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE,
got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES;
- src.wID = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE,
got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wID = MPEGLAYER3_ID_MPEG;
- src.nBlockSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /*
Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.nBlockSize = 576;
- src.wfx.nAvgBytesPerSec = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /*
Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
/* causes a division by zero exception in XP, Vista,
but throws ACMERR_NOTPOSSIBLE on others */
if (0) acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.wfx.nAvgBytesPerSec = 2000;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /*
Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
+}
static struct { struct @@ -1446,6 +1528,7 @@ START_TEST(msacm) test_acmFormatSuggest(); test_acmFormatTagDetails(); test_acmFormatChoose();
- test_mp3(); /* Test acmDriverAdd in the end as it may conflict
test_acmDriverAdd();
- with other tests due to codec lookup order */
-- 2.21.0
On Tue, Apr 02, 2019 at 03:39:22PM +0200, Vijay Kiran Kamuju wrote:
There is no bug associated with this, but it brings in a valid fix with tests from staging repo. There are a few patches like this in staging repo.
Yes, unfortunately. It'd be nice to verify the fix and report to users that it's fixed. Oh well.
Thanks for getting them upstreamed!
Andrew
On Tuesday, April 2, 2019, Andrew Eikum aeikum@codeweavers.com wrote:
Just curious, do you know what this fixes? I wasn't able to find any information in the wine-staging repo, nor anything relevant on the Wine bug tracker.
Andrew
On Mon, Apr 01, 2019 at 01:37:31AM +0200, Vijay Kiran Kamuju wrote:
Add comments on a test which crashes on XP, Vista Modify broken test for Win 8
From: Michael Müller michael@fds-team.de
Signed-off-by: Vijay Kiran Kamuju infyquest@gmail.com
dlls/l3codeca.acm/mpegl3.c | 15 ++++++- dlls/msacm32/tests/msacm.c | 83 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c index 8ad6ae83dc..2e929371ae 100644 --- a/dlls/l3codeca.acm/mpegl3.c +++ b/dlls/l3codeca.acm/mpegl3.c @@ -212,6 +212,7 @@ static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi,
AcmMpeg3Data* aad)
*/ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) {
- LRESULT error = MMSYSERR_NOTSUPPORTED; AcmMpeg3Data* aad; int err;
@@ -235,6 +236,18 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE
adsi)
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;
}
}
/* resampling or mono <=> stereo not available * MPEG3 algo only define 16 bit per sample output */
@@ -270,7 +283,7 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE
adsi)
theEnd: HeapFree(GetProcessHeap(), 0, aad); adsi->dwDriver = 0L;
- return MMSYSERR_NOTSUPPORTED;
- return error;
}
/***********************************************************
diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c index 180639fa54..a6b17e8441 100644 --- a/dlls/msacm32/tests/msacm.c +++ b/dlls/msacm32/tests/msacm.c @@ -1276,6 +1276,88 @@ static void test_acmFormatChoose(void) HeapFree(GetProcessHeap(), 0, pwfx); }
+static void test_mp3(void) +{
- MPEGLAYER3WAVEFORMAT src;
- WAVEFORMATEX dst;
- HACMSTREAM has;
- DWORD output;
- MMRESULT mr;
- src.wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
- src.wfx.nSamplesPerSec = 11025;
- src.wfx.wBitsPerSample = 0;
- src.wfx.nChannels = 1;
- src.wfx.nBlockAlign = 576;
- src.wfx.nAvgBytesPerSec = 2000;
- src.wID = MPEGLAYER3_ID_MPEG;
- src.fdwFlags = 0;
- src.nBlockSize = 576;
- src.nFramesPerBlock = 1;
- src.nCodecDelay = 0;
- dst.cbSize = 0;
- dst.wFormatTag = WAVE_FORMAT_PCM;
- dst.nSamplesPerSec = 11025;
- dst.wBitsPerSample = 16;
- dst.nChannels = 1;
- dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8;
- dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign;
- src.wfx.cbSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE,
got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES;
- src.wID = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE,
got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wID = MPEGLAYER3_ID_MPEG;
- src.nBlockSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /*
Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.nBlockSize = 576;
- src.wfx.nAvgBytesPerSec = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /*
Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
/* causes a division by zero exception in XP, Vista,
but throws ACMERR_NOTPOSSIBLE on others */
if (0) acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.wfx.nAvgBytesPerSec = 2000;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0,
0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /*
Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
+}
static struct { struct @@ -1446,6 +1528,7 @@ START_TEST(msacm) test_acmFormatSuggest(); test_acmFormatTagDetails(); test_acmFormatChoose();
- test_mp3(); /* Test acmDriverAdd in the end as it may conflict
test_acmDriverAdd();
- with other tests due to codec lookup order */
-- 2.21.0
Signed-off-by: Andrew Eikum aeikum@codeweavers.com
On Mon, Apr 01, 2019 at 01:37:31AM +0200, Vijay Kiran Kamuju wrote:
Add comments on a test which crashes on XP, Vista Modify broken test for Win 8
From: Michael Müller michael@fds-team.de
Signed-off-by: Vijay Kiran Kamuju infyquest@gmail.com
dlls/l3codeca.acm/mpegl3.c | 15 ++++++- dlls/msacm32/tests/msacm.c | 83 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/dlls/l3codeca.acm/mpegl3.c b/dlls/l3codeca.acm/mpegl3.c index 8ad6ae83dc..2e929371ae 100644 --- a/dlls/l3codeca.acm/mpegl3.c +++ b/dlls/l3codeca.acm/mpegl3.c @@ -212,6 +212,7 @@ static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad) */ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) {
- LRESULT error = MMSYSERR_NOTSUPPORTED; AcmMpeg3Data* aad; int err;
@@ -235,6 +236,18 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) 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;
}
}
- /* resampling or mono <=> stereo not available * MPEG3 algo only define 16 bit per sample output */
@@ -270,7 +283,7 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) theEnd: HeapFree(GetProcessHeap(), 0, aad); adsi->dwDriver = 0L;
- return MMSYSERR_NOTSUPPORTED;
- return error;
}
/*********************************************************************** diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c index 180639fa54..a6b17e8441 100644 --- a/dlls/msacm32/tests/msacm.c +++ b/dlls/msacm32/tests/msacm.c @@ -1276,6 +1276,88 @@ static void test_acmFormatChoose(void) HeapFree(GetProcessHeap(), 0, pwfx); }
+static void test_mp3(void) +{
- MPEGLAYER3WAVEFORMAT src;
- WAVEFORMATEX dst;
- HACMSTREAM has;
- DWORD output;
- MMRESULT mr;
- src.wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
- src.wfx.nSamplesPerSec = 11025;
- src.wfx.wBitsPerSample = 0;
- src.wfx.nChannels = 1;
- src.wfx.nBlockAlign = 576;
- src.wfx.nAvgBytesPerSec = 2000;
- src.wID = MPEGLAYER3_ID_MPEG;
- src.fdwFlags = 0;
- src.nBlockSize = 576;
- src.nFramesPerBlock = 1;
- src.nCodecDelay = 0;
- dst.cbSize = 0;
- dst.wFormatTag = WAVE_FORMAT_PCM;
- dst.nSamplesPerSec = 11025;
- dst.wBitsPerSample = 16;
- dst.nChannels = 1;
- dst.nBlockAlign = dst.wBitsPerSample * dst.nChannels / 8;
- dst.nAvgBytesPerSec = dst.nSamplesPerSec * dst.nBlockAlign;
- src.wfx.cbSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE, got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES;
- src.wID = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == ACMERR_NOTPOSSIBLE, "expected error ACMERR_NOTPOSSIBLE, got 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR) acmStreamClose(has, 0);
- src.wID = MPEGLAYER3_ID_MPEG;
- src.nBlockSize = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.nBlockSize = 576;
- src.wfx.nAvgBytesPerSec = 0;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
/* causes a division by zero exception in XP, Vista,
but throws ACMERR_NOTPOSSIBLE on others */
if (0) acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
- src.wfx.nAvgBytesPerSec = 2000;
- mr = acmStreamOpen(&has, NULL, (WAVEFORMATEX*)&src, &dst, NULL, 0, 0, 0);
- ok(mr == MMSYSERR_NOERROR || broken(mr == ACMERR_NOTPOSSIBLE) /* Win 2008 */,
"failed with error 0x%x\n", mr);
- if (mr == MMSYSERR_NOERROR)
- {
mr = acmStreamSize(has, 4000, &output, ACM_STREAMSIZEF_SOURCE);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
mr = acmStreamClose(has, 0);
ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr);
- }
+}
static struct { struct @@ -1446,6 +1528,7 @@ START_TEST(msacm) test_acmFormatSuggest(); test_acmFormatTagDetails(); test_acmFormatChoose();
- test_mp3(); /* Test acmDriverAdd in the end as it may conflict
test_acmDriverAdd();
- with other tests due to codec lookup order */
-- 2.21.0