[PATCH v5 4/7] mfplat/buffer: Deduplicate common code between Lock2D() and Lock2DSize().

Nikolay Sivov nsivov at codeweavers.com
Mon Jun 27 13:20:17 CDT 2022



On 6/24/22 10:48, Giovanni Mascellani wrote:
>   
> -static HRESULT WINAPI dxgi_surface_buffer_Lock2D(IMF2DBuffer2 *iface, BYTE **scanline0, LONG *pitch)
> +static HRESULT dxgi_surface_buffer_lock2d(struct buffer *buffer, MF2DBuffer_LockFlags flags,
> +        BYTE **scanline0, LONG *pitch, BYTE **buffer_start, DWORD *buffer_length)
>   {
> -    struct buffer *buffer = impl_from_IMF2DBuffer2(iface);
>       HRESULT hr = S_OK;
>   
> -    TRACE("%p, %p, %p.\n", iface, scanline0, pitch);
> -
> -    if (!scanline0 || !pitch)
> -        return E_POINTER;
> -
> -    EnterCriticalSection(&buffer->cs);
> -
>       if (buffer->_2d.linear_buffer)
>           hr = MF_E_UNEXPECTED;
>       else if (!buffer->_2d.locks++)
> @@ -1051,6 +1042,10 @@ static HRESULT WINAPI dxgi_surface_buffer_Lock2D(IMF2DBuffer2 *iface, BYTE **sca
>       {
>           *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);
> @@ -1058,6 +1053,25 @@ static HRESULT WINAPI dxgi_surface_buffer_Lock2D(IMF2DBuffer2 *iface, BYTE **sca
>       return hr;
>   }
You forgot to remove LeaveCriticalSection() here. That's actually 
visible in the test output when running on Wine.

For consistency between d3d9 and dxgi cases, let's pick one suffix - 
_lock2d() or _lock().




More information about the wine-devel mailing list