From 959279413ee363293ceb270dc115835893fb7f85 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 30 Oct 2020 16:50:42 +0300 Subject: [PATCH] evr/allocator: Use different buffer implementation for surface buffers. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/evr/sample.c | 33 +++++++++++++++++---------------- dlls/evr/tests/evr.c | 6 +----- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/dlls/evr/sample.c b/dlls/evr/sample.c index b65cc45a662..39520cb6020 100644 --- a/dlls/evr/sample.c +++ b/dlls/evr/sample.c @@ -306,28 +306,29 @@ static HRESULT sample_allocator_create_samples(struct sample_allocator *allocato for (i = 0; i < sample_count; ++i) { struct queued_sample *queued_sample = heap_alloc(sizeof(*queued_sample)); + IMFMediaBuffer *buffer; - if (service) + if (SUCCEEDED(hr = MFCreateVideoSampleFromSurface(NULL, &sample))) { - if (SUCCEEDED(hr = IDirectXVideoProcessorService_CreateSurface(service, width, height, 0, format, - D3DPOOL_DEFAULT, 0, DXVA2_VideoProcessorRenderTarget, &surface, NULL))) + if (service) { - hr = MFCreateVideoSampleFromSurface((IUnknown *)surface, &sample); - IDirect3DSurface9_Release(surface); - } - } - else - { - IMFMediaBuffer *buffer; - - if (SUCCEEDED(hr = MFCreateVideoSampleFromSurface(NULL, &sample))) - { - if (SUCCEEDED(hr = MFCreate2DMediaBuffer(width, height, format, FALSE, &buffer))) + if (SUCCEEDED(hr = IDirectXVideoProcessorService_CreateSurface(service, width, height, + 0, format, D3DPOOL_DEFAULT, 0, DXVA2_VideoProcessorRenderTarget, &surface, NULL))) { - hr = IMFSample_AddBuffer(sample, buffer); - IMFMediaBuffer_Release(buffer); + hr = MFCreateDXSurfaceBuffer(&IID_IDirect3DSurface9, (IUnknown *)surface, FALSE, &buffer); + IDirect3DSurface9_Release(surface); } } + else + { + hr = MFCreate2DMediaBuffer(width, height, format, FALSE, &buffer); + } + + if (SUCCEEDED(hr)) + { + hr = IMFSample_AddBuffer(sample, buffer); + IMFMediaBuffer_Release(buffer); + } } if (FAILED(hr)) diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index e4f45396ae8..a711be7ad21 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -1468,17 +1468,13 @@ todo_wine IDirect3DSurface9_Release(surface); hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&unk); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - if (SUCCEEDED(hr)) - IUnknown_Release(unk); + IUnknown_Release(unk); hr = IMFMediaBuffer_Lock(buffer, &data, NULL, NULL); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); hr = IMFMediaBuffer_Unlock(buffer); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); IMFSample_Release(sample);