wineandroid: Implement LOCK/UNLOCK perform() functions on top of the buffer management calls.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f856e102f2
commit
1e46722c67
|
@ -1210,7 +1210,58 @@ static int perform( ANativeWindow *window, int operation, ... )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NATIVE_WINDOW_LOCK:
|
case NATIVE_WINDOW_LOCK:
|
||||||
|
{
|
||||||
|
struct ANativeWindowBuffer *buffer;
|
||||||
|
struct ANativeWindow_Buffer *buffer_ret = va_arg( args, ANativeWindow_Buffer * );
|
||||||
|
ARect *bounds = va_arg( args, ARect * );
|
||||||
|
int ret = window->dequeueBuffer_DEPRECATED( window, &buffer );
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
if (gralloc_module)
|
||||||
|
{
|
||||||
|
if ((ret = gralloc_module->lock( gralloc_module, buffer->handle,
|
||||||
|
GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,
|
||||||
|
0, 0, buffer->width, buffer->height, &buffer_ret->bits )))
|
||||||
|
{
|
||||||
|
WARN( "gralloc->lock %p failed %d %s\n", win->hwnd, ret, strerror(-ret) );
|
||||||
|
window->cancelBuffer( window, buffer, -1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
buffer_ret->bits = ((struct native_buffer_wrapper *)buffer)->bits;
|
||||||
|
}
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
buffer_ret->width = buffer->width;
|
||||||
|
buffer_ret->height = buffer->height;
|
||||||
|
buffer_ret->stride = buffer->stride;
|
||||||
|
buffer_ret->format = buffer->format;
|
||||||
|
win->locked_buffer = buffer;
|
||||||
|
if (bounds)
|
||||||
|
{
|
||||||
|
bounds->left = 0;
|
||||||
|
bounds->top = 0;
|
||||||
|
bounds->right = buffer->width;
|
||||||
|
bounds->bottom = buffer->height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
va_end( args );
|
||||||
|
TRACE( "hwnd %p %s bits %p ret %d %s\n", win->hwnd, names[operation], buffer_ret->bits, ret, strerror(-ret) );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
case NATIVE_WINDOW_UNLOCK_AND_POST:
|
case NATIVE_WINDOW_UNLOCK_AND_POST:
|
||||||
|
{
|
||||||
|
int ret = -EINVAL;
|
||||||
|
if (win->locked_buffer)
|
||||||
|
{
|
||||||
|
if (gralloc_module) gralloc_module->unlock( gralloc_module, win->locked_buffer->handle );
|
||||||
|
ret = window->queueBuffer( window, win->locked_buffer, -1 );
|
||||||
|
win->locked_buffer = NULL;
|
||||||
|
}
|
||||||
|
va_end( args );
|
||||||
|
TRACE( "hwnd %p %s ret %d\n", win->hwnd, names[operation], ret );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
case NATIVE_WINDOW_CONNECT:
|
case NATIVE_WINDOW_CONNECT:
|
||||||
case NATIVE_WINDOW_DISCONNECT:
|
case NATIVE_WINDOW_DISCONNECT:
|
||||||
TRACE( "hwnd %p %s\n", win->hwnd, names[operation] );
|
TRACE( "hwnd %p %s\n", win->hwnd, names[operation] );
|
||||||
|
|
Loading…
Reference in New Issue