From: Paul Gofman pgofman@codeweavers.com
--- dlls/mf/tests/transform.c | 11 ++++++++++- dlls/mfplat/buffer.c | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 7d9be831b21..569ec3e9851 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -6765,11 +6765,13 @@ static void test_h264_with_dxgi_manager(void) IMFSample *input_sample, *sample; MFT_OUTPUT_DATA_BUFFER output[1]; IMFTransform *transform = NULL; + BYTE *scanline0, *buffer_start; ID3D11Multithread *multithread; IMFCollection *output_samples; MFT_OUTPUT_STREAM_INFO info; IMFDXGIBuffer *dxgi_buffer; unsigned int width, height; + DWORD status, val, length; D3D11_TEXTURE2D_DESC desc; IMFMediaBuffer *buffer; IMFAttributes *attribs; @@ -6777,12 +6779,12 @@ static void test_h264_with_dxgi_manager(void) IMF2DBuffer2 *buffer2d; ID3D11Device *d3d11; IMFMediaType *type; - DWORD status, val; UINT64 frame_size; MFVideoArea area; const BYTE *data; ULONG data_len; UINT32 value; + LONG pitch; HRESULT hr; UINT token; GUID guid; @@ -6932,6 +6934,13 @@ static void test_h264_with_dxgi_manager(void) hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer2, (void **)&buffer2d); ok(hr == S_OK, "got %#lx\n", hr);
+ hr = IMF2DBuffer2_Lock2DSize(buffer2d, MF2DBuffer_LockFlags_Read, &scanline0, &pitch, &buffer_start, &length); + ok(hr == S_OK, "got %#lx\n", hr); + ok(scanline0 == buffer_start, "got %p, %p.\n", scanline0, buffer_start); + ok(pitch >= aligned_width, "got %ld.\n", pitch); + ok(length == pitch * aligned_height * 3 / 2, "got %lu.\n", length); + IMF2DBuffer2_Unlock2D(buffer2d); + hr = IMFDXGIBuffer_GetResource(dxgi_buffer, &IID_ID3D11Texture2D, (void **)&tex2d); ok(hr == S_OK, "got %#lx\n", hr); memset(&desc, 0xcc, sizeof(desc)); diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c index a221c6d55b8..58eadffa502 100644 --- a/dlls/mfplat/buffer.c +++ b/dlls/mfplat/buffer.c @@ -1045,7 +1045,7 @@ static HRESULT dxgi_surface_buffer_lock(struct buffer *buffer, MF2DBuffer_LockFl if (buffer_start) *buffer_start = *scanline0; if (buffer_length) - *buffer_length = buffer->dxgi_surface.map_desc.RowPitch * buffer->_2d.height; + *buffer_length = buffer->dxgi_surface.map_desc.DepthPitch; }
return hr;