Rémi Bernon : mf/tests: Add required SAR media type attributes tests.

Alexandre Julliard julliard at winehq.org
Tue Aug 2 14:53:35 CDT 2022


Module: wine
Branch: master
Commit: 3dbb6c7470b7a54e078763501c0db38e4040b047
URL:    https://gitlab.winehq.org/wine/wine/-/commit/3dbb6c7470b7a54e078763501c0db38e4040b047

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Fri Jul 29 17:48:16 2022 +0200

mf/tests: Add required SAR media type attributes tests.

---

 dlls/mf/tests/mf.c | 74 +++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 57 insertions(+), 17 deletions(-)

diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 996829c5e9a..c3d80c3dccc 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -4434,6 +4434,29 @@ static void check_sar_rate_support(IMFMediaSink *sink)
 
 static void test_sar(void)
 {
+    static const struct attribute_desc input_type_desc_48000[] =
+    {
+        ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio),
+        ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float),
+        ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 48000),
+        ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2),
+        ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32),
+        ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 8),
+        ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 8 * 48000),
+        {0},
+    };
+    static const struct attribute_desc input_type_desc_44100[] =
+    {
+        ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio),
+        ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float),
+        ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 44100),
+        ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2),
+        ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32),
+        ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 8),
+        ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 8 * 44100),
+        {0},
+    };
+
     IMFPresentationClock *present_clock, *present_clock2;
     IMFMediaType *mediatype, *mediatype2, *mediatype3;
     IMFClockStateSink *state_sink, *state_sink2;
@@ -4443,17 +4466,16 @@ static void test_sar(void)
     IMFAudioStreamVolume *stream_volume;
     IMFMediaSink *sink, *sink2;
     IMFStreamSink *stream_sink;
+    UINT32 channel_count, rate;
     IMFAttributes *attributes;
-    DWORD i, id, flags, count;
+    DWORD id, flags, count;
     IMFActivate *activate;
-    UINT32 channel_count;
     MFCLOCK_STATE state;
     IMFClock *clock;
     IUnknown *unk;
     HRESULT hr;
     GUID guid;
     BOOL mute;
-    int found;
     LONG ref;
 
     hr = CoInitialize(NULL);
@@ -4613,21 +4635,40 @@ if (SUCCEEDED(hr))
     ok(hr == S_OK, "Failed to get type count, hr %#lx.\n", hr);
     ok(!!count, "Unexpected type count %lu.\n", count);
 
-    /* A number of same major/subtype entries are returned, with different degrees of finer format
-       details. Some incomplete types are not accepted, check that at least one of them is considered supported. */
+    hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, count, &mediatype);
+    todo_wine
+    ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#lx.\n", hr);
+
+    hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, 0, &mediatype);
+    ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+    hr = IMFMediaType_GetUINT32(mediatype, &MF_MT_AUDIO_SAMPLES_PER_SECOND, &rate);
+    ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+    ok(rate == 48000 || rate == 44100, "got rate %u.\n", rate);
+    IMFMediaType_Release(mediatype);
 
-    for (i = 0, found = -1; i < count; ++i)
-    {
-        hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, i, &mediatype);
-        ok(hr == S_OK, "Failed to get media type, hr %#lx.\n", hr);
 
-        if (SUCCEEDED(IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL)))
-            found = i;
-        IMFMediaType_Release(mediatype);
+    /* check required output media type attributes */
 
-        if (found != -1) break;
+    hr = MFCreateMediaType(&mediatype);
+    ok(hr == S_OK, "MFCreateMediaType returned %#lx\n", hr);
+    hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL);
+    todo_wine
+    ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
+    init_media_type(mediatype, rate == 44100 ? input_type_desc_44100 : input_type_desc_48000, 2);
+    for (int i = 1; i < (rate == 44100 ? ARRAY_SIZE(input_type_desc_44100) : ARRAY_SIZE(input_type_desc_48000)) - 1; ++i)
+    {
+        hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL);
+        todo_wine
+        ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#lx.\n", hr);
+        init_media_type(mediatype, rate == 44100 ? input_type_desc_44100 : input_type_desc_48000, i + 1);
     }
-    ok(found != -1, "Haven't found a supported type.\n");
+    hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL);
+    ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+    init_media_type(mediatype, rate == 44100 ? input_type_desc_44100 : input_type_desc_48000, -1);
+    hr = IMFMediaTypeHandler_IsMediaTypeSupported(handler, mediatype, NULL);
+    ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+    IMFMediaType_Release(mediatype);
+
 
     hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &mediatype);
     ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#lx.\n", hr);
@@ -4652,10 +4693,9 @@ if (SUCCEEDED(hr))
     hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, mediatype);
     ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#lx.\n", hr);
 
-    hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, found, &mediatype2);
+    hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, count - 1, &mediatype2);
     ok(hr == S_OK, "Failed to get media type, hr %#lx.\n", hr);
-
-    hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, found, &mediatype3);
+    hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, count - 1, &mediatype3);
     ok(hr == S_OK, "Failed to get media type, hr %#lx.\n", hr);
     ok(mediatype2 == mediatype3, "Unexpected instance.\n");
     IMFMediaType_Release(mediatype3);




More information about the wine-cvs mailing list