Nikolay Sivov : evr/allocator: Use different buffer implementation for surface buffers.

Alexandre Julliard julliard at winehq.org
Fri Oct 30 16:18:45 CDT 2020


Module: wine
Branch: master
Commit: 959279413ee363293ceb270dc115835893fb7f85
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=959279413ee363293ceb270dc115835893fb7f85

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Oct 30 16:50:42 2020 +0300

evr/allocator: Use different buffer implementation for surface buffers.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/evr/sample.c    | 31 ++++++++++++++++---------------
 dlls/evr/tests/evr.c |  6 +-----
 2 files changed, 17 insertions(+), 20 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,27 +306,28 @@ 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);
+                if (SUCCEEDED(hr = IDirectXVideoProcessorService_CreateSurface(service, width, height,
+                        0, format, D3DPOOL_DEFAULT, 0, DXVA2_VideoProcessorRenderTarget, &surface, NULL)))
+                {
+                    hr = MFCreateDXSurfaceBuffer(&IID_IDirect3DSurface9, (IUnknown *)surface, FALSE, &buffer);
+                    IDirect3DSurface9_Release(surface);
+                }
+            }
+            else
+            {
+                hr = MFCreate2DMediaBuffer(width, height, format, FALSE, &buffer);
             }
-        }
-        else
-        {
-            IMFMediaBuffer *buffer;
 
-            if (SUCCEEDED(hr = MFCreateVideoSampleFromSurface(NULL, &sample)))
+            if (SUCCEEDED(hr))
             {
-                if (SUCCEEDED(hr = MFCreate2DMediaBuffer(width, height, format, FALSE, &buffer)))
-                {
-                    hr = IMFSample_AddBuffer(sample, buffer);
-                    IMFMediaBuffer_Release(buffer);
-                }
+                hr = IMFSample_AddBuffer(sample, buffer);
+                IMFMediaBuffer_Release(buffer);
             }
         }
 
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);




More information about the wine-cvs mailing list