Nikolay Sivov : mfplat: Fix SetCurrentLength() for d3d11 buffer.
Module: wine Branch: master Commit: dae643d2edfb402b2396424b6ad6f6aa649e07f9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=dae643d2edfb402b2396424b6... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Wed Mar 24 12:37:19 2021 +0300 mfplat: Fix SetCurrentLength() for d3d11 buffer. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/buffer.c | 13 ++++++++++++- dlls/mfplat/tests/mfplat.c | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c index 8dd076c1e9f..3710843fd52 100644 --- a/dlls/mfplat/buffer.c +++ b/dlls/mfplat/buffer.c @@ -856,6 +856,17 @@ static HRESULT WINAPI dxgi_surface_buffer_Unlock(IMFMediaBuffer *iface) return E_NOTIMPL; } +static HRESULT WINAPI dxgi_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 HRESULT WINAPI dxgi_surface_buffer_Lock2D(IMF2DBuffer2 *iface, BYTE **scanline0, LONG *pitch) { FIXME("%p, %p, %p.\n", iface, scanline0, pitch); @@ -977,7 +988,7 @@ static const IMFMediaBufferVtbl dxgi_surface_1d_buffer_vtbl = dxgi_surface_buffer_Lock, dxgi_surface_buffer_Unlock, memory_buffer_GetCurrentLength, - memory_buffer_SetCurrentLength, + dxgi_surface_buffer_SetCurrentLength, memory_buffer_GetMaxLength, }; diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 8355be18b9f..1c236bdb655 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -6350,6 +6350,22 @@ static void test_dxgi_surface_buffer(void) check_interface(buffer, &IID_IMFDXGIBuffer, TRUE); check_interface(buffer, &IID_IMFGetService, FALSE); + max_length = 0; + hr = IMFMediaBuffer_GetMaxLength(buffer, &max_length); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!!max_length, "Unexpected length %u.\n", max_length); + + hr = IMFMediaBuffer_GetCurrentLength(buffer, &cur_length); + ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr); + ok(!cur_length, "Unexpected length %u.\n", cur_length); + + hr = IMFMediaBuffer_SetCurrentLength(buffer, 2 * max_length); + ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr); + + hr = IMFMediaBuffer_GetCurrentLength(buffer, &cur_length); + ok(hr == S_OK, "Failed to get length, hr %#x.\n", hr); + ok(cur_length == 2 * max_length, "Unexpected length %u.\n", cur_length); + hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMFDXGIBuffer, (void **)&dxgi_buffer); ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
participants (1)
-
Alexandre Julliard