Nikolay Sivov : mfplat: Fix SetCurrentLength() for d3d9 buffer.
Alexandre Julliard
julliard at winehq.org
Wed Mar 24 16:20:40 CDT 2021
Module: wine
Branch: master
Commit: ff056c3f86b3c0d582b4bf41bc74571dbf1ff6d8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ff056c3f86b3c0d582b4bf41bc74571dbf1ff6d8
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Mar 24 12:37:18 2021 +0300
mfplat: Fix SetCurrentLength() for d3d9 buffer.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfplat/buffer.c | 13 ++++++++++++-
dlls/mfplat/tests/mfplat.c | 18 +++++++++++++-----
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index 6a4f4605450..8dd076c1e9f 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -406,6 +406,17 @@ static HRESULT WINAPI d3d9_surface_buffer_Unlock(IMFMediaBuffer *iface)
return hr;
}
+static HRESULT WINAPI d3d9_surface_buffer_SetCurrentLength(IMFMediaBuffer *iface, DWORD current_length)
+{
+ struct memory_buffer *buffer = impl_from_IMFMediaBuffer(iface);
+
+ TRACE("%p, %u.\n", iface, current_length);
+
+ buffer->current_length = current_length;
+
+ return S_OK;
+}
+
static const IMFMediaBufferVtbl d3d9_surface_1d_buffer_vtbl =
{
memory_1d_2d_buffer_QueryInterface,
@@ -414,7 +425,7 @@ static const IMFMediaBufferVtbl d3d9_surface_1d_buffer_vtbl =
d3d9_surface_buffer_Lock,
d3d9_surface_buffer_Unlock,
memory_buffer_GetCurrentLength,
- memory_buffer_SetCurrentLength,
+ d3d9_surface_buffer_SetCurrentLength,
memory_buffer_GetMaxLength,
};
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 879240ae1a4..8355be18b9f 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -5852,6 +5852,7 @@ static void test_MFCreateDXSurfaceBuffer(void)
{
IDirect3DSurface9 *backbuffer = NULL, *surface;
IDirect3DSwapChain9 *swapchain;
+ DWORD length, max_length;
IDirect3DDevice9 *device;
IMF2DBuffer2 *_2dbuffer2;
IMFMediaBuffer *buffer;
@@ -5859,7 +5860,6 @@ static void test_MFCreateDXSurfaceBuffer(void)
BYTE *data, *data2;
IMFGetService *gs;
IDirect3D9 *d3d;
- DWORD length;
HWND window;
HRESULT hr;
LONG pitch;
@@ -5904,17 +5904,25 @@ static void test_MFCreateDXSurfaceBuffer(void)
IDirect3DSurface9_Release(surface);
IMFGetService_Release(gs);
- length = 0;
- hr = IMFMediaBuffer_GetMaxLength(buffer, &length);
+ max_length = 0;
+ hr = IMFMediaBuffer_GetMaxLength(buffer, &max_length);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- ok(!!length, "Unexpected length %u.\n", length);
+ ok(!!max_length, "Unexpected length %u.\n", max_length);
hr = IMFMediaBuffer_GetCurrentLength(buffer, &length);
ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr);
ok(!length, "Unexpected length %u.\n", length);
- hr = IMFMediaBuffer_Lock(buffer, &data, NULL, NULL);
+ hr = IMFMediaBuffer_SetCurrentLength(buffer, 2 * max_length);
+ ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr);
+
+ hr = IMFMediaBuffer_GetCurrentLength(buffer, &length);
+ ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr);
+ ok(length == 2 * max_length, "Unexpected length %u.\n", length);
+
+ hr = IMFMediaBuffer_Lock(buffer, &data, NULL, &length);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(length == max_length, "Unexpected length.\n");
/* Unlock twice. */
hr = IMFMediaBuffer_Unlock(buffer);
More information about the wine-cvs
mailing list