Module: wine Branch: master Commit: 3dbb6c7470b7a54e078763501c0db38e4040b047 URL: https://gitlab.winehq.org/wine/wine/-/commit/3dbb6c7470b7a54e078763501c0db38...
Author: Rémi Bernon rbernon@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);