/* * va_wayland.h - Wayland API * * Copyright (c) 2012 Intel Corporation. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef VA_WAYLAND_H #define VA_WAYLAND_H #include <va/va.h> #include <wayland-client.h> /** * \file va_wayland.h * \brief The Wayland rendering API * * This file contains the \ref api_wayland "Wayland rendering API". */ #ifdef __cplusplus extern "C" { #endif /** * \defgroup api_wayland Wayland rendering API * * @{ * * Theory of operations: * - Create a VA display for an active Wayland display ; * - Perform normal VA-API operations, e.g. decode to a VA surface ; * - Get wl_buffer associated to the VA surface ; * - Attach wl_buffer to wl_surface ; */ /** * \brief Returns a VA display wrapping the specified Wayland display. * * This functions returns a (possibly cached) VA display from the * specified Wayland @display. * * @param[in] display the native Wayland display * @return the VA display */ VADisplay vaGetDisplayWl(struct wl_display *display); /** * \brief Returns the Wayland buffer associated with a VA surface. * * This function returns a wl_buffer handle that can be used as an * argument to wl_surface_attach(). This buffer references the * underlying VA @surface. As such, the VA @surface and Wayland * @out_buffer have the same size and color format. Should specific * color conversion be needed, then VA/VPP API can fulfill this * purpose. * * The @flags describe the desired picture structure. This is useful * to expose a de-interlaced buffer. If the VA driver does not support * any of the supplied flags, then #VA_STATUS_ERROR_FLAG_NOT_SUPPORTED * is returned. The following flags are allowed: \c VA_FRAME_PICTURE, * \c VA_TOP_FIELD, \c VA_BOTTOM_FIELD. * * @param[in] dpy the VA display * @param[in] surface the VA surface * @param[in] flags the deinterlacing flags * @param[out] out_buffer a wl_buffer wrapping the VA @surface * @return VA_STATUS_SUCCESS if successful */ VAStatus vaGetSurfaceBufferWl( VADisplay dpy, VASurfaceID surface, unsigned int flags, struct wl_buffer **out_buffer ); /** * \brief Returns the Wayland buffer associated with a VA image. * * This function returns a wl_buffer handle that can be used as an * argument to wl_surface_attach(). This buffer references the * underlying VA @image. As such, the VA @image and Wayland * @out_buffer have the same size and color format. Should specific * color conversion be needed, then VA/VPP API can fulfill this * purpose. * * The @flags describe the desired picture structure. See * vaGetSurfaceBufferWl() description for more details. * * @param[in] dpy the VA display * @param[in] image the VA image * @param[in] flags the deinterlacing flags * @param[out] out_buffer a wl_buffer wrapping the VA @image * @return VA_STATUS_SUCCESS if successful */ VAStatus vaGetImageBufferWl( VADisplay dpy, VAImageID image, unsigned int flags, struct wl_buffer **out_buffer ); /**@}*/ #ifdef __cplusplus } #endif #endif /* VA_WAYLAND_H */