Nikolay Sivov : mfplat/tests: Add some tests for sample allocator using D3D9 device.
Alexandre Julliard
julliard at winehq.org
Wed Feb 3 15:39:29 CST 2021
Module: wine
Branch: master
Commit: 467a96e9e5b5a2b8974181ce6ce87c91798cb0ae
URL: https://source.winehq.org/git/wine.git/?a=commit;h=467a96e9e5b5a2b8974181ce6ce87c91798cb0ae
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Feb 3 14:28:00 2021 +0300
mfplat/tests: Add some tests for sample allocator using D3D9 device.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfplat/tests/Makefile.in | 2 +-
dlls/mfplat/tests/mfplat.c | 81 ++++++++++++++++++++++++++++++++++++++++---
2 files changed, 78 insertions(+), 5 deletions(-)
diff --git a/dlls/mfplat/tests/Makefile.in b/dlls/mfplat/tests/Makefile.in
index 4e9413e8da0..ae9cc378933 100644
--- a/dlls/mfplat/tests/Makefile.in
+++ b/dlls/mfplat/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = mfplat.dll
-IMPORTS = ole32 mfplat user32 d3d9 mfuuid propsys uuid strmiids
+IMPORTS = ole32 mfplat user32 d3d9 dxva2 mfuuid propsys uuid strmiids
C_SRCS = \
mfplat.c
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 2e2610a3827..3d6e553ce35 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -46,6 +46,7 @@
#include "d3d9types.h"
#include "ks.h"
#include "ksmedia.h"
+#include "dxva2api.h"
DEFINE_GUID(DUMMY_CLSID, 0x12345678,0x1234,0x1234,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19);
DEFINE_GUID(DUMMY_GUID1, 0x12345678,0x1234,0x1234,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21);
@@ -6290,15 +6291,20 @@ static void test_sample_allocator(void)
IMFDXGIDeviceManager *manager;
IMFSample *sample, *sample2;
IMFDXGIBuffer *dxgi_buffer;
+ IMFAttributes *attributes;
D3D11_TEXTURE2D_DESC desc;
+ unsigned int buffer_count, token;
ID3D11Texture2D *texture;
IMFMediaBuffer *buffer;
ID3D11Device *device;
LONG refcount, count;
- unsigned int token;
IUnknown *unk;
HRESULT hr;
BYTE *data;
+ IDirect3D9 *d3d9;
+ HWND window;
+ IDirect3DDeviceManager9 *d3d9_manager;
+ IDirect3DDevice9 *d3d9_device;
if (!pMFCreateVideoSampleAllocatorEx)
{
@@ -6407,12 +6413,20 @@ todo_wine
check_interface(buffer, &IID_IMFDXGIBuffer, FALSE);
IMFMediaBuffer_Release(buffer);
+
+ hr = IMFSample_GetBufferCount(sample, &buffer_count);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(buffer_count == 1, "Unexpected buffer count %u.\n", buffer_count);
+
IMFSample_Release(sample);
IMFVideoSampleAllocatorCallback_Release(allocator_cb);
IMFVideoSampleAllocator_Release(allocator);
/* IMFVideoSampleAllocatorEx */
+ hr = MFCreateAttributes(&attributes, 0);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
hr = pMFCreateVideoSampleAllocatorEx(&IID_IMFVideoSampleAllocatorEx, (void **)&allocatorex);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -6422,9 +6436,15 @@ todo_wine
hr = IMFVideoSampleAllocatorEx_InitializeSampleAllocatorEx(allocatorex, 1, 0, NULL, video_type);
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
- hr = IMFVideoSampleAllocatorEx_InitializeSampleAllocatorEx(allocatorex, 0, 0, NULL, video_type);
+ hr = IMFAttributes_SetUINT32(attributes, &MF_SA_BUFFERS_PER_SAMPLE, 2);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ EXPECT_REF(attributes, 1);
+ hr = IMFVideoSampleAllocatorEx_InitializeSampleAllocatorEx(allocatorex, 0, 0, attributes, video_type);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+todo_wine
+ EXPECT_REF(attributes, 2);
+
count = 0;
hr = IMFVideoSampleAllocatorCallback_GetFreeSampleCount(allocator_cb, &count);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -6433,6 +6453,11 @@ todo_wine
hr = IMFVideoSampleAllocatorEx_AllocateSample(allocatorex, &sample);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFSample_GetBufferCount(sample, &buffer_count);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+todo_wine
+ ok(buffer_count == 2, "Unexpected buffer count %u.\n", buffer_count);
+
hr = IMFVideoSampleAllocatorEx_AllocateSample(allocatorex, &sample2);
ok(hr == MF_E_SAMPLEALLOCATOR_EMPTY, "Unexpected hr %#x.\n", hr);
@@ -6440,6 +6465,7 @@ todo_wine
IMFVideoSampleAllocatorCallback_Release(allocator_cb);
IMFVideoSampleAllocatorEx_Release(allocatorex);
+ IMFAttributes_Release(attributes);
/* Using device manager */
if (!(device = create_d3d11_device()))
@@ -6511,10 +6537,57 @@ todo_wine
IMFSample_Release(sample);
IMFVideoSampleAllocator_Release(allocator);
-
- IMFMediaType_Release(media_type);
IMFDXGIDeviceManager_Release(manager);
ID3D11Device_Release(device);
+
+ /* Use D3D9 device manager. */
+ window = create_window();
+ d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
+ ok(!!d3d9, "Failed to create a D3D9 object.\n");
+ if (!(d3d9_device = create_device(d3d9, window)))
+ {
+ skip("Failed to create a D3D9 device, skipping tests.\n");
+ goto done;
+ }
+
+ hr = DXVA2CreateDirect3DDeviceManager9(&token, &d3d9_manager);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IDirect3DDeviceManager9_ResetDevice(d3d9_manager, d3d9_device, token);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = pMFCreateVideoSampleAllocatorEx(&IID_IMFVideoSampleAllocator, (void **)&allocator);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFVideoSampleAllocator_SetDirectXManager(allocator, (IUnknown *)d3d9_manager);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 1, video_type);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFVideoSampleAllocator_AllocateSample(allocator, &sample);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ check_interface(sample, &IID_IMFTrackedSample, TRUE);
+ check_interface(sample, &IID_IMFDesiredSample, FALSE);
+
+ hr = IMFSample_GetBufferByIndex(sample, 0, &buffer);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ check_interface(buffer, &IID_IMF2DBuffer, TRUE);
+ check_interface(buffer, &IID_IMF2DBuffer2, TRUE);
+ check_interface(buffer, &IID_IMFGetService, TRUE);
+ check_interface(buffer, &IID_IMFDXGIBuffer, FALSE);
+
+ IMFSample_Release(sample);
+ IMFMediaBuffer_Release(buffer);
+
+ IMFVideoSampleAllocator_Release(allocator);
+ IMFMediaType_Release(media_type);
+
+done:
+ IDirect3D9_Release(d3d9);
+ DestroyWindow(window);
}
START_TEST(mfplat)
More information about the wine-cvs
mailing list