From: Zhao halley <halley.z...@intel.com> --- test/common/va_display_wayland.c | 29 ++++++++++++++------------- test/putsurface/putsurface_wayland.c | 35 +++++++++++++++------------------ 2 files changed, 31 insertions(+), 33 deletions(-) mode change 100644 => 100755 test/common/va_display_wayland.c mode change 100644 => 100755 test/putsurface/putsurface_wayland.c
diff --git a/test/common/va_display_wayland.c b/test/common/va_display_wayland.c old mode 100644 new mode 100755 index a022740..1a32068 --- a/test/common/va_display_wayland.c +++ b/test/common/va_display_wayland.c @@ -36,7 +36,6 @@ struct display { unsigned int ref_count; int event_fd; unsigned int event_mask; - VASurfaceWL va_surface_wl; }; static struct display *g_display; @@ -106,11 +105,6 @@ va_close_display_wayland(VADisplay va_dpy) if (!d || --d->ref_count > 0) return; - if (d->va_surface_wl) { - vaDestroySurfaceWL(va_dpy, d->va_surface_wl); - d->va_surface_wl = NULL; - } - if (d->surface) { wl_surface_destroy(d->surface); d->surface = NULL; @@ -161,11 +155,6 @@ ensure_window(VADisplay va_dpy, unsigned int width, unsigned int height) wl_shell_surface_set_toplevel(d->shell_surface); } - if (!d->va_surface_wl) { - va_status = vaCreateSurfaceWL(va_dpy, d->surface, &d->va_surface_wl); - if (va_status != VA_STATUS_SUCCESS) - return 0; - } return 1; } @@ -179,19 +168,31 @@ va_put_surface_wayland( { struct display * const d = g_display; VAStatus va_status; + struct wl_buffer *buffer; if (!ensure_window(va_dpy, dst_rect->width, dst_rect->height)) return VA_STATUS_ERROR_ALLOCATION_FAILED; - va_status = vaAttachSurfaceWL( + va_status = vaGetSurfaceBufferWl( va_dpy, - d->va_surface_wl, surface, - VA_FRAME_PICTURE + &buffer ); if (va_status != VA_STATUS_SUCCESS) return va_status; + + wl_surface_attach( + d->surface, + buffer, + 0, 0 + ); + + wl_surface_damage( + d->surface, + dst_rect->x, dst_rect->y, dst_rect->width, dst_rect->height + ); + wl_display_flush(d->display); return VA_STATUS_SUCCESS; } diff --git a/test/putsurface/putsurface_wayland.c b/test/putsurface/putsurface_wayland.c old mode 100644 new mode 100755 index afadf8b..2386e0c --- a/test/putsurface/putsurface_wayland.c +++ b/test/putsurface/putsurface_wayland.c @@ -105,7 +105,6 @@ struct display { struct drawable { struct wl_display *display; struct wl_surface *surface; - VASurfaceWL va_wl_surface; unsigned int redraw_pending : 1; }; @@ -116,6 +115,7 @@ frame_redraw_callback(void *data, struct wl_callback *callback, uint32_t time) drawable->redraw_pending = 0; wl_callback_destroy(callback); + // todo, release wl_buffer and vaSurface } static const struct wl_callback_listener frame_callback_listener = { @@ -137,22 +137,11 @@ va_put_surface( struct display *d; struct wl_callback *callback; VAStatus va_status; + struct wl_buffer *buffer; if (!wl_drawable) return VA_STATUS_ERROR_INVALID_SURFACE; - if (!wl_drawable->va_wl_surface) { - va_status = vaCreateSurfaceWL( - dpy, - wl_drawable->surface, - &wl_drawable->va_wl_surface - ); - if (va_status != VA_STATUS_SUCCESS) { - fprintf(stderr, "error: failed to create VA/WL surface\n"); - return va_status; - } - } - d = wl_display_get_user_data(wl_drawable->display); if (!d) return VA_STATUS_ERROR_INVALID_DISPLAY; @@ -164,14 +153,24 @@ va_put_surface( wl_display_iterate(wl_drawable->display, WL_DISPLAY_READABLE); } - va_status = vaAttachSurfaceWL( - dpy, - wl_drawable->va_wl_surface, + va_status = vaGetSurfaceBufferWl( + va_dpy, va_surface, - flags + &buffer ); if (va_status != VA_STATUS_SUCCESS) return va_status; + + wl_surface_attach( + wl_drawable->surface, + buffer, + 0, 0 + ); + + wl_surface_damage( + wl_drawable->surface, + dst_rect->x, dst_rect->y, dst_rect->width, dst_rect->height + ); wl_display_flush(d->display); wl_drawable->redraw_pending = 1; @@ -252,7 +251,6 @@ create_window(void *win_display, int x, int y, int width, int height) drawable1 = malloc(sizeof(*drawable1)); drawable1->display = display; drawable1->surface = surface1; - drawable1->va_wl_surface = NULL; drawable1->redraw_pending = 0; /* global out */ @@ -268,7 +266,6 @@ create_window(void *win_display, int x, int y, int width, int height) drawable2 = malloc(sizeof(*drawable2)); drawable2->display = display; drawable1->surface = surface2; - drawable2->va_wl_surface = NULL; drawable2->redraw_pending = 0; /* global out */ -- 1.7.5.4 _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva