mfplat: Implement GetScanline0AndPitch() for d3d11 buffers.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9932a1943b
commit
01059d5946
|
@ -985,9 +985,31 @@ static HRESULT WINAPI dxgi_surface_buffer_Unlock2D(IMF2DBuffer2 *iface)
|
||||||
|
|
||||||
static HRESULT WINAPI dxgi_surface_buffer_GetScanline0AndPitch(IMF2DBuffer2 *iface, BYTE **scanline0, LONG *pitch)
|
static HRESULT WINAPI dxgi_surface_buffer_GetScanline0AndPitch(IMF2DBuffer2 *iface, BYTE **scanline0, LONG *pitch)
|
||||||
{
|
{
|
||||||
FIXME("%p, %p, %p.\n", iface, scanline0, pitch);
|
struct memory_buffer *buffer = impl_from_IMF2DBuffer2(iface);
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %p, %p.\n", iface, scanline0, pitch);
|
||||||
|
|
||||||
|
if (!scanline0 || !pitch)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
|
EnterCriticalSection(&buffer->cs);
|
||||||
|
|
||||||
|
if (!buffer->_2d.locks)
|
||||||
|
{
|
||||||
|
*scanline0 = NULL;
|
||||||
|
*pitch = 0;
|
||||||
|
hr = HRESULT_FROM_WIN32(ERROR_WAS_UNLOCKED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*scanline0 = buffer->dxgi_surface.map_desc.pData;
|
||||||
|
*pitch = buffer->dxgi_surface.map_desc.RowPitch;
|
||||||
|
}
|
||||||
|
|
||||||
|
LeaveCriticalSection(&buffer->cs);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dxgi_surface_buffer_Lock2DSize(IMF2DBuffer2 *iface, MF2DBuffer_LockFlags flags,
|
static HRESULT WINAPI dxgi_surface_buffer_Lock2DSize(IMF2DBuffer2 *iface, MF2DBuffer_LockFlags flags,
|
||||||
|
|
|
@ -6346,11 +6346,11 @@ static void test_dxgi_surface_buffer(void)
|
||||||
IMFMediaBuffer *buffer;
|
IMFMediaBuffer *buffer;
|
||||||
ID3D11Device *device;
|
ID3D11Device *device;
|
||||||
BYTE buff[64 * 64 * 4];
|
BYTE buff[64 * 64 * 4];
|
||||||
|
BYTE *data, *data2;
|
||||||
|
LONG pitch, pitch2;
|
||||||
UINT index, size;
|
UINT index, size;
|
||||||
IUnknown *obj;
|
IUnknown *obj;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
BYTE *data;
|
|
||||||
LONG pitch;
|
|
||||||
|
|
||||||
if (!pMFCreateDXGISurfaceBuffer)
|
if (!pMFCreateDXGISurfaceBuffer)
|
||||||
{
|
{
|
||||||
|
@ -6485,6 +6485,9 @@ todo_wine
|
||||||
hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&_2d_buffer);
|
hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&_2d_buffer);
|
||||||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMF2DBuffer_GetScanline0AndPitch(_2d_buffer, &data2, &pitch2);
|
||||||
|
ok(hr == HRESULT_FROM_WIN32(ERROR_WAS_UNLOCKED), "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = IMF2DBuffer_Lock2D(_2d_buffer, &data, &pitch);
|
hr = IMF2DBuffer_Lock2D(_2d_buffer, &data, &pitch);
|
||||||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
ok(!!data && pitch == desc.Width * 4, "Unexpected pitch %d.\n", pitch);
|
ok(!!data && pitch == desc.Width * 4, "Unexpected pitch %d.\n", pitch);
|
||||||
|
@ -6493,6 +6496,10 @@ todo_wine
|
||||||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
ok(!!data && pitch == desc.Width * 4, "Unexpected pitch %d.\n", pitch);
|
ok(!!data && pitch == desc.Width * 4, "Unexpected pitch %d.\n", pitch);
|
||||||
|
|
||||||
|
hr = IMF2DBuffer_GetScanline0AndPitch(_2d_buffer, &data2, &pitch2);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(data2 == data && pitch2 == pitch, "Unexpected data/pitch.\n");
|
||||||
|
|
||||||
hr = IMFMediaBuffer_Lock(buffer, &data, &max_length, &cur_length);
|
hr = IMFMediaBuffer_Lock(buffer, &data, &max_length, &cur_length);
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
|
ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
|
||||||
|
@ -6509,6 +6516,27 @@ todo_wine
|
||||||
IMF2DBuffer_Release(_2d_buffer);
|
IMF2DBuffer_Release(_2d_buffer);
|
||||||
IMFMediaBuffer_Release(buffer);
|
IMFMediaBuffer_Release(buffer);
|
||||||
|
|
||||||
|
/* Bottom up. */
|
||||||
|
hr = pMFCreateDXGISurfaceBuffer(&IID_ID3D11Texture2D, (IUnknown *)texture, 0, TRUE, &buffer);
|
||||||
|
ok(hr == S_OK, "Failed to create a buffer, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&_2d_buffer);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMF2DBuffer_Lock2D(_2d_buffer, &data, &pitch);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(!!data && pitch == desc.Width * 4, "Unexpected pitch %d.\n", pitch);
|
||||||
|
|
||||||
|
hr = IMF2DBuffer_GetScanline0AndPitch(_2d_buffer, &data2, &pitch2);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(data2 == data && pitch2 == pitch, "Unexpected data/pitch.\n");
|
||||||
|
|
||||||
|
hr = IMF2DBuffer_Unlock2D(_2d_buffer);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
IMF2DBuffer_Release(_2d_buffer);
|
||||||
|
IMFMediaBuffer_Release(buffer);
|
||||||
|
|
||||||
ID3D11Texture2D_Release(texture);
|
ID3D11Texture2D_Release(texture);
|
||||||
|
|
||||||
/* Subresource index 1. */
|
/* Subresource index 1. */
|
||||||
|
|
Loading…
Reference in New Issue