RFC mp3dmod/tests: Fix a couple failures on Vista.

Zebediah Figura (she/her) zfigura at codeweavers.com
Thu Nov 26 10:46:11 CST 2020


On 11/25/20 12:50 PM, Francois Gouget wrote:
> 
> diff --git a/dlls/mp3dmod/tests/mp3dmod.c b/dlls/mp3dmod/tests/mp3dmod.c
> index 61002d59661..b1604c0fbd3 100644
> --- a/dlls/mp3dmod/tests/mp3dmod.c
> +++ b/dlls/mp3dmod/tests/mp3dmod.c
> @@ -448,14 +448,15 @@ static void test_stream_info(void)
>      size = lookahead = alignment = 0xdeadbeef;
>      hr = IMediaObject_GetInputSizeInfo(dmo, 0, &size, &lookahead, &alignment);
>      ok(hr == S_OK, "Got hr %#x.\n", hr);
> -    ok(!size, "Got size %u.\n", size);
> +    ok(size == 0 || broken(size == 2) /* Vista */, "Got size %u.\n", size);
>      ok(lookahead == 0xdeadbeef, "Got lookahead %u.\n", lookahead);
>      ok(alignment == 1, "Got alignment %u.\n", alignment);
>  
>      size = alignment = 0xdeadbeef;
>      hr = IMediaObject_GetOutputSizeInfo(dmo, 0, &size, &alignment);
>      ok(hr == S_OK, "Got hr %#x.\n", hr);
> -    ok(size == 1152 * 4, "Got size %u.\n", size);
> +    ok(size == 1152 * 4 || broken(size == 1152 * 2) /* Vista */,
> +       "Got size %u.\n", size);
>      ok(alignment == 1, "Got alignment %u.\n", alignment);
>  
>      IMediaObject_Release(dmo);
> 
> I'm a bit puzzled by the second chunk because the Vista result looks 
> good to me. The output format is:
> 
>     static const WAVEFORMATEX output_format =
>     {
>         .nChannels = 1,
>         .nSamplesPerSec = 48000,
>         .nAvgBytesPerSec = 2 * 48000,
>         .nBlockAlign = 2,
>         .wBitsPerSample = 16,
>     };
> 
> .wFormatTag is not set but presumably it defaults to something sensible.
> But there's only one channel of 16 bit so that would make it 2 bytes per 
> sample. Multiply by 1152, the number of samples in an MP3 frame, and 
> I'd expect to get 1152 * 2.
> 
> But all Windows versions except Vista return 1152 * 4, so a minimum of 2 
> MP3 frames?
> 
> 

I wrote some more exhaustive tests. Vista returns the expected values,
1152 * channels * (bit depth / 8). Every subsequent version acts as if
channels is 2 for some reason. It might be considered broken, but it's
within reason; the semantics of the function is "the output buffer must
be at least this big".

I'll send a patch to improve the tests and accommodate all versions.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20201126/6ea96b25/attachment.sig>


More information about the wine-devel mailing list