Signed-off-by: Francois Gouget fgouget@codeweavers.com --- dlls/evr/tests/evr.c | 161 ++++++++++++++++++++++--------------------- 1 file changed, 84 insertions(+), 77 deletions(-)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index cfab5e73070..ce791db21b1 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -1364,6 +1364,8 @@ static void test_MFCreateVideoSampleAllocator(void) HRESULT hr; BYTE *data;
+ video_type = create_video_type(&MFVideoFormat_RGB32); + hr = MFCreateVideoSampleAllocator(&IID_IUnknown, (void **)&unk); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); IUnknown_Release(unk); @@ -1372,111 +1374,116 @@ static void test_MFCreateVideoSampleAllocator(void) ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFVideoSampleAllocator_QueryInterface(allocator, &IID_IMFVideoSampleAllocatorCallback, (void **)&allocator_cb); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - - hr = IMFVideoSampleAllocatorCallback_SetCallback(allocator_cb, NULL); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - - hr = IMFVideoSampleAllocatorCallback_SetCallback(allocator_cb, &test_notify); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - - hr = IMFVideoSampleAllocatorCallback_SetCallback(allocator_cb, NULL); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + if (hr == E_NOINTERFACE) /* Vista */ + win_skip("IID_IMFVideoSampleAllocatorCallback is not supported\n"); + else + { + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, NULL); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocatorCallback_SetCallback(allocator_cb, NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- count = 10; - hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - ok(!count, "Unexpected count %d.\n", count); + hr = IMFVideoSampleAllocatorCallback_SetCallback(allocator_cb, &test_notify); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocator_UninitializeSampleAllocator(allocator); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocatorCallback_SetCallback(allocator_cb, NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample); - ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocator_SetDirectXManager(allocator, NULL); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + count = 10; + hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!count, "Unexpected count %d.\n", count);
- hr = MFCreateMediaType(&media_type); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocator_UninitializeSampleAllocator(allocator); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- /* It expects IMFVideoMediaType aka video major type. Exact return code is E_NOINTERFACE, - likely coming from querying for IMFVideoMediaType. Does not seem valuable to match it. */ - hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 2, media_type); - ok(FAILED(hr), "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample); + ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#x.\n", hr);
- video_type = create_video_type(&MFVideoFormat_RGB32); + hr = IMFVideoSampleAllocator_SetDirectXManager(allocator, NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 2, video_type); - ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr); + hr = MFCreateMediaType(&media_type); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- /* Frame size is required. */ - hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64) 320 << 32 | 240); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 0, video_type); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + /* It expects IMFVideoMediaType aka video major type. Exact return + * code is E_NOINTERFACE, likely coming from querying for + * IMFVideoMediaType. Does not seem valuable to match it. + */ + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 2, media_type); + ok(FAILED(hr), "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - ok(count == 1, "Unexpected count %d.\n", count); + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 2, video_type); + ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr);
- sample = NULL; - hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - refcount = get_refcount(sample); + /* Frame size is required. */ + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64) 320 << 32 | 240); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 0, video_type); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample2); - ok(hr == MF_E_SAMPLEALLOCATOR_EMPTY, "Unexpected hr %#x.\n", hr); + hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(count == 1, "Unexpected count %d.\n", count);
- /* Reinitialize with active sample. */ - hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 4, video_type); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - ok(refcount == get_refcount(sample), "Unexpected refcount %u.\n", get_refcount(sample)); + sample = NULL; + hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + refcount = get_refcount(sample);
- hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - ok(count == 4, "Unexpected count %d.\n", count); + hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample2); + ok(hr == MF_E_SAMPLEALLOCATOR_EMPTY, "Unexpected hr %#x.\n", hr);
- hr = IMFSample_QueryInterface(sample, &IID_IMFDesiredSample, (void **)&unk); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - IUnknown_Release(unk); + /* Reinitialize with active sample. */ + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 4, video_type); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(refcount == get_refcount(sample), "Unexpected refcount %u.\n", get_refcount(sample));
- hr = IMFSample_QueryInterface(sample, &IID_IMFTrackedSample, (void **)&unk); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - IUnknown_Release(unk); + hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(count == 4, "Unexpected count %d.\n", count);
- hr = IMFSample_GetBufferByIndex(sample, 0, &buffer); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFSample_QueryInterface(sample, &IID_IMFDesiredSample, (void **)&unk); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + IUnknown_Release(unk);
- hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMFGetService, (void **)&gs); - ok(hr == S_OK || broken(hr == E_NOINTERFACE) /* Win7 */, "Unexpected hr %#x.\n", hr); + hr = IMFSample_QueryInterface(sample, &IID_IMFTrackedSample, (void **)&unk); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + IUnknown_Release(unk);
- /* Device manager wasn't set, sample gets regular memory buffers. */ - if (SUCCEEDED(hr)) - { - hr = IMFGetService_GetService(gs, &MR_BUFFER_SERVICE, &IID_IDirect3DSurface9, (void **)&surface); - ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); - IMFGetService_Release(gs); - } + hr = IMFSample_GetBufferByIndex(sample, 0, &buffer); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&unk); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - IUnknown_Release(unk); + hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMFGetService, (void **)&gs); + ok(hr == S_OK || broken(hr == E_NOINTERFACE) /* Win7 */, "Unexpected hr %#x.\n", hr);
- IMFMediaBuffer_Release(buffer); + /* Device manager wasn't set, sample gets regular memory buffers. */ + if (SUCCEEDED(hr)) + { + hr = IMFGetService_GetService(gs, &MR_BUFFER_SERVICE, &IID_IDirect3DSurface9, (void **)&surface); + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + IMFGetService_Release(gs); + }
- IMFSample_Release(sample); + hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&unk); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + IUnknown_Release(unk);
- IMFVideoSampleAllocatorCallback_Release(allocator_cb); + IMFMediaBuffer_Release(buffer); + IMFSample_Release(sample); + IMFVideoSampleAllocatorCallback_Release(allocator_cb); + }
IMFVideoSampleAllocator_Release(allocator);
hr = MFCreateVideoSampleAllocator(&IID_IMFVideoSampleAllocatorCallback, (void **)&unk); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - IUnknown_Release(unk); + ok(hr == S_OK || broken(hr == E_NOINTERFACE) /* Vista */, + "Unexpected hr %#x.\n", hr); + if (SUCCEEDED(hr)) + IUnknown_Release(unk);
/* Using device manager */ window = create_window();