Nikolay Sivov : mfplat: Implement Lock2DSize() for d3d11 buffers.
Alexandre Julliard
julliard at winehq.org
Thu Mar 25 16:49:22 CDT 2021
Module: wine
Branch: master
Commit: 78ab39559429838ad15208b3c42144b201917375
URL: https://source.winehq.org/git/wine.git/?a=commit;h=78ab39559429838ad15208b3c42144b201917375
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Mar 25 12:40:35 2021 +0300
mfplat: Implement Lock2DSize() for d3d11 buffers.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfplat/buffer.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index dd88a661e45..77767c27d94 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -1019,9 +1019,34 @@ static HRESULT WINAPI dxgi_surface_buffer_GetScanline0AndPitch(IMF2DBuffer2 *ifa
static HRESULT WINAPI dxgi_surface_buffer_Lock2DSize(IMF2DBuffer2 *iface, MF2DBuffer_LockFlags flags,
BYTE **scanline0, LONG *pitch, BYTE **buffer_start, DWORD *buffer_length)
{
- FIXME("%p, %#x, %p, %p, %p, %p.\n", iface, flags, scanline0, pitch, buffer_start, buffer_length);
+ struct buffer *buffer = impl_from_IMF2DBuffer2(iface);
+ HRESULT hr = S_OK;
- return E_NOTIMPL;
+ TRACE("%p, %#x, %p, %p, %p, %p.\n", iface, flags, scanline0, pitch, buffer_start, buffer_length);
+
+ if (!scanline0 || !pitch || !buffer_start || !buffer_length)
+ return E_POINTER;
+
+ EnterCriticalSection(&buffer->cs);
+
+ if (buffer->_2d.linear_buffer)
+ hr = MF_E_UNEXPECTED;
+ else if (!buffer->_2d.locks++)
+ hr = dxgi_surface_buffer_map(buffer);
+
+ if (SUCCEEDED(hr))
+ {
+ *scanline0 = buffer->dxgi_surface.map_desc.pData;
+ *pitch = buffer->dxgi_surface.map_desc.RowPitch;
+ if (buffer_start)
+ *buffer_start = *scanline0;
+ if (buffer_length)
+ *buffer_length = buffer->dxgi_surface.map_desc.RowPitch * buffer->_2d.height;
+ }
+
+ LeaveCriticalSection(&buffer->cs);
+
+ return hr;
}
static HRESULT WINAPI dxgi_buffer_QueryInterface(IMFDXGIBuffer *iface, REFIID riid, void **obj)
More information about the wine-cvs
mailing list