Please send you patch to upstream ! https://github.com/oneapi-src/oneVPL
> -----Original Message----- > From: [email protected] <[email protected]> > On Behalf Of [email protected] > Sent: Friday, May 28, 2021 1:27 PM > To: [email protected] > Subject: [meta-intel] [PATCH v1] onevpl: Add Wayland support to legacy > tools > > From: jinchung <[email protected]> > > Signed-off-by: jinchung <[email protected]> > --- > ...01-Adding-Wayland-support-to-legacy-tools.patch | 1300 > ++++++++++++++++++++ > recipes-multimedia/onevpl/onevpl_2021.2.2.bb | 1 + > 2 files changed, 1301 insertions(+) > create mode 100644 recipes-multimedia/onevpl/onevpl/0001-Adding- > Wayland-support-to-legacy-tools.patch > > diff --git a/recipes-multimedia/onevpl/onevpl/0001-Adding-Wayland- > support-to-legacy-tools.patch b/recipes-multimedia/onevpl/onevpl/0001- > Adding-Wayland-support-to-legacy-tools.patch > new file mode 100644 > index 0000000..1a53728 > --- /dev/null > +++ b/recipes-multimedia/onevpl/onevpl/0001-Adding-Wayland-support- > to-le > +++ gacy-tools.patch > @@ -0,0 +1,1300 @@ > +From 2f3629a3e4e02b6c82711b868688c05d0d8cbb47 Mon Sep 17 00:00:00 > 2001 > +From: jinchung <[email protected]> > +Date: Fri, 28 May 2021 11:34:01 +0800 > +Subject: [PATCH] Adding Wayland support to legacy tools > + > +Upstream-Status: Pending > + > +Signed-off-by: jinchung <[email protected]> > +--- > + tools/legacy/CMakeLists.txt | 1 + > + tools/legacy/sample_common/CMakeLists.txt | 8 + > + tools/legacy/sample_common/src/vaapi_device.cpp | 2 +- > + tools/legacy/sample_misc/wayland/CMakeLists.txt | 29 ++ > + .../sample_misc/wayland/include/class_wayland.h | 160 +++++++ > + .../sample_misc/wayland/include/listener_wayland.h | 66 +++ > +.../wayland/include/wayland-drm-client-protocol.h | 235 ++++++++++ > + .../sample_misc/wayland/src/class_wayland.cpp | 500 > +++++++++++++++++++++ > + .../sample_misc/wayland/src/listener_wayland.cpp | 105 +++++ > + .../sample_misc/wayland/src/wayland-drm-protocol.c | 84 ++++ > + 10 files changed, 1189 insertions(+), 1 deletion(-) create mode > +100644 tools/legacy/sample_misc/wayland/CMakeLists.txt > + create mode 100644 > +tools/legacy/sample_misc/wayland/include/class_wayland.h > + create mode 100644 > +tools/legacy/sample_misc/wayland/include/listener_wayland.h > + create mode 100644 > +tools/legacy/sample_misc/wayland/include/wayland-drm-client-protocol.h > + create mode 100644 > +tools/legacy/sample_misc/wayland/src/class_wayland.cpp > + create mode 100644 > +tools/legacy/sample_misc/wayland/src/listener_wayland.cpp > + create mode 100644 > +tools/legacy/sample_misc/wayland/src/wayland-drm-protocol.c > + > +diff --git a/tools/legacy/CMakeLists.txt b/tools/legacy/CMakeLists.txt > +index 165a5b2..1d4af73 100644 > +--- a/tools/legacy/CMakeLists.txt > ++++ b/tools/legacy/CMakeLists.txt > +@@ -11,3 +11,4 @@ add_subdirectory(sample_common) > + add_subdirectory(sample_decode) > + add_subdirectory(sample_vpp) > + add_subdirectory(sample_encode) > ++add_subdirectory(sample_misc/wayland) > +diff --git a/tools/legacy/sample_common/CMakeLists.txt > +b/tools/legacy/sample_common/CMakeLists.txt > +index db4de3d..4f04226 100644 > +--- a/tools/legacy/sample_common/CMakeLists.txt > ++++ b/tools/legacy/sample_common/CMakeLists.txt > +@@ -70,6 +70,7 @@ if(UNIX) > + pkg_check_modules(PKG_LIBDRM libdrm) > + pkg_check_modules(PKG_X11 x11) > + pkg_check_modules(PKG_LIBVA_X11 libva-x11>=1.10.0) > ++ pkg_check_modules(PKG_WAYLAND_CLIENT wayland-client) > + if(PKG_LIBVA_FOUND) > + target_compile_definitions(${TARGET} PUBLIC -DLIBVA_SUPPORT) > + target_include_directories(${TARGET} PUBLIC > +${PKG_LIBVA_INCLUDE_DIRS}) @@ -88,6 +89,13 @@ if(UNIX) > + else() > + message(WARNING "x11 modules not found: building without libVA X11 > support") > + endif() > ++ if(PKG_WAYLAND_CLIENT_FOUND) > ++ target_compile_definitions(${TARGET} PUBLIC - > DLIBVA_WAYLAND_SUPPORT) > ++ target_include_directories(${TARGET} PUBLIC > ${PKG_WAYLAND_CLIENT_LIBRARY_DIRS}) > ++ target_include_directories(${TARGET} PUBLIC > ++ ${CMAKE_CURRENT_SOURCE_DIR}/../sample_misc/wayland/include) > ++ else() > ++ message(WARNING "wayland modules not found: building without > ++ Wayland support") > ++ endif() > + > + target_link_libraries(${TARGET} ${CMAKE_DL_LIBS}) > + > +diff --git a/tools/legacy/sample_common/src/vaapi_device.cpp > +b/tools/legacy/sample_common/src/vaapi_device.cpp > +index 3f6d3ba..b034376 100644 > +--- a/tools/legacy/sample_common/src/vaapi_device.cpp > ++++ b/tools/legacy/sample_common/src/vaapi_device.cpp > +@@ -396,7 +396,7 @@ mfxStatus > CVAAPIDeviceWayland::RenderFrame(mfxFrameSurface1* pSurface, > + return mfx_res; > + } > + > +- m_Wayland->RenderBuffer(m_wl_buffer, pSurface->Info.CropW, > pSurface->Info.CropH); > ++ m_Wayland->RenderBuffer(m_wl_buffer, pSurface); > + > + return mfx_res; > + } > +diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt > +b/tools/legacy/sample_misc/wayland/CMakeLists.txt > +new file mode 100644 > +index 0000000..95057d4 > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt > +@@ -0,0 +1,29 @@ > ++if (NOT PKG_WAYLAND_CLIENT_FOUND) > ++ return() > ++endif() > ++ > ++set(TARGET mfx_wayland) > ++ > ++find_package(PkgConfig REQUIRED) > ++pkg_check_modules(PKG_WAYLAND_CLIENT wayland-client) > ++pkg_check_modules(PKG_LIBVA libva libva-drm) > ++pkg_check_modules(PKG_LIBDRM libdrm) > ++ > ++include_directories ( > ++ ${CMAKE_CURRENT_SOURCE_DIR}/../../sample_common/include > ++ ${CMAKE_CURRENT_SOURCE_DIR}/include > ++ ${CMAKE_CURRENT_SOURCE_DIR}/../../../../api/vpl > ++ ${PKG_LIBDRM_INCLUDE_DIRS} > ++ ${PKG_WAYLAND_CLIENT_LIBRARY_DIRS} > ++) > ++ > ++add_definitions(-DLIBVA_WAYLAND_SUPPORT) > ++add_library(${TARGET} SHARED "") > ++target_sources(${TARGET} PRIVATE > ++ ${CMAKE_CURRENT_SOURCE_DIR}/src/class_wayland.cpp > ++ ${CMAKE_CURRENT_SOURCE_DIR}/src/listener_wayland.cpp > ++ ${CMAKE_CURRENT_SOURCE_DIR}/src/wayland-drm-protocol.c) > ++ > ++target_link_libraries(${TARGET} sample_common wayland-client va drm > ++drm_intel) > ++ > ++install( TARGETS ${TARGETS} LIBRARY DESTINATION > ++${CMAKE_INSTALL_BINDIR} ) > +diff --git a/tools/legacy/sample_misc/wayland/include/class_wayland.h > +b/tools/legacy/sample_misc/wayland/include/class_wayland.h > +new file mode 100644 > +index 0000000..1c64f9c > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/include/class_wayland.h > +@@ -0,0 +1,160 @@ > ++/******************************************************** > ************* > ++*********\ Copyright (c) 2005-2019, Intel Corporation All rights > ++reserved. > ++ > ++Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > ++ > ++1. Redistributions of source code must retain the above copyright notice, > this list of conditions and the following disclaimer. > ++ > ++2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in the > documentation and/or other materials provided with the distribution. > ++ > ++3. Neither the name of the copyright holder nor the names of its > contributors may be used to endorse or promote products derived from this > software without specific prior written permission. > ++ > ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR > CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, > EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED > TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > SUCH DAMAGE. > ++ > ++This sample was distributed or derived from the Intel's Media Samples > package. > ++The original version of this sample may be obtained from > ++https://software.intel.com/en-us/intel-media-server-studio > ++or https://software.intel.com/en-us/media-client-solutions-support. > ++\******************************************************** > ************* > ++*************/ > ++ > ++#ifndef WAYLAND_CLASS_H > ++#define WAYLAND_CLASS_H > ++ > ++#if defined(LIBVA_WAYLAND_SUPPORT) > ++ > ++extern "C" > ++{ > ++ #include <intel_bufmgr.h> > ++} > ++#include <poll.h> > ++#include <wayland-client.h> > ++#include <list> > ++#include "wayland-drm-client-protocol.h" > ++#include "vpl/mfxstructures.h" > ++#include "mfx_buffering.h" > ++#include "sample_defs.h" > ++ > ++typedef struct buffer wld_buffer; > ++ > ++/* ShmPool Struct */ > ++struct ShmPool { > ++ int fd; > ++ uint32_t *memory; > ++ unsigned capacity; > ++ unsigned size; > ++}; > ++ > ++class Wayland: public CBuffering { > ++ public: > ++ Wayland(); > ++ virtual ~Wayland(); > ++ virtual bool InitDisplay(); > ++ virtual bool CreateSurface(); > ++ virtual void FreeSurface(); > ++ virtual void SetRenderWinPos(int x, int y); > ++ virtual void RenderBuffer(struct wl_buffer *buffer > ++ , mfxFrameSurface1 *surface); > ++ virtual void RenderBufferWinPosSize(struct wl_buffer *buffer > ++ , int x > ++ , int y > ++ , int32_t width > ++ , int32_t height); > ++ bool CreateShmPool(int fd, int32_t size, int prot); > ++ void FreeShmPool(); > ++ /* Create wl_buffer from shm_pool */ > ++ struct wl_buffer * CreateShmBuffer(unsigned width > ++ , unsigned height > ++ , unsigned stride > ++ , uint32_t PIXEL_FORMAT_ID); > ++ void FreeShmBuffer(struct wl_buffer *buffer); > ++ int Dispatch(); > ++ struct wl_buffer * CreatePlanarBuffer(uint32_t name > ++ , int32_t width > ++ , int32_t height > ++ , uint32_t format > ++ , int32_t offsets[3] > ++ , int32_t pitches[3]); > ++ virtual struct wl_buffer * CreatePrimeBuffer(uint32_t name > ++ , int32_t width > ++ , int32_t height > ++ , uint32_t format > ++ , int32_t offsets[3] > ++ , int32_t pitches[3]); > ++ struct wl_display * GetDisplay() { return m_display; } > ++ struct wl_registry * GetRegistry() { return m_registry; } > ++ struct wl_compositor * GetCompositor() { return m_compositor; } > ++ struct wl_shell * GetShell() { return m_shell; } > ++ struct wl_drm * GetDrm() { return m_drm; } > ++ struct wl_shm * GetShm() { return m_shm; }; > ++ struct wl_shm_pool * GetShmPool() { return m_pool; } > ++ struct wl_surface * GetSurface() { return m_surface; } > ++ struct wl_shell_surface * GetShellSurface() { return > m_shell_surface; } > ++ struct wl_callback * GetCallback() { return m_callback; } > ++ void SetCompositor(struct wl_compositor *compositor) > ++ { > ++ m_compositor = compositor; > ++ } > ++ void SetShell(struct wl_shell *shell) > ++ { > ++ m_shell = shell; > ++ } > ++ void SetShm(struct wl_shm *shm) > ++ { > ++ m_shm = shm; > ++ } > ++ void SetDrm(struct wl_drm *drm) > ++ { > ++ m_drm = drm; > ++ } > ++ void DrmHandleDevice(const char* device); > ++ void DrmHandleAuthenticated(); > ++ void RegistryGlobal(struct wl_registry *registry > ++ , uint32_t name > ++ , const char *interface > ++ , uint32_t version); > ++ void DisplayFlush() > ++ { > ++ wl_display_flush(m_display); > ++ } > ++ virtual int DisplayRoundtrip(); > ++ void DestroyCallback(); > ++ virtual void Sync(); > ++ virtual void SetPerfMode(bool perf_mode); > ++ void AddBufferToList(wld_buffer *buffer); > ++ void RemoveBufferFromList(struct wl_buffer *buffer); > ++ void DestroyBufferList(); > ++ private: > ++ //no copies allowed > ++ Wayland(const Wayland &); > ++ void operator = (const Wayland&); > ++ > ++ struct wl_display *m_display; > ++ struct wl_registry *m_registry; > ++ struct wl_compositor *m_compositor; > ++ struct wl_shell *m_shell; > ++ struct wl_drm *m_drm; > ++ struct wl_shm *m_shm; > ++ struct wl_shm_pool *m_pool; > ++ struct wl_surface *m_surface; > ++ struct wl_shell_surface *m_shell_surface; > ++ struct wl_callback *m_callback; > ++ struct wl_event_queue *m_event_queue; > ++ volatile int m_pending_frame; > ++ struct ShmPool *m_shm_pool; > ++ int m_display_fd; > ++ int m_fd; > ++ struct pollfd m_poll; > ++ drm_intel_bufmgr *m_bufmgr; > ++ char *m_device_name; > ++ int m_x, m_y; > ++ bool m_perf_mode; > ++ protected: > ++ std::list<wld_buffer*> m_buffers_list; }; > ++ > ++extern "C" Wayland* WaylandCreate(); > ++extern "C" void WaylandDestroy(Wayland *pWld); > ++ > ++#endif //LIBVA_WAYLAND_SUPPORT > ++ > ++#endif /* WAYLAND_CLASS_H */ > +diff --git > +a/tools/legacy/sample_misc/wayland/include/listener_wayland.h > +b/tools/legacy/sample_misc/wayland/include/listener_wayland.h > +new file mode 100644 > +index 0000000..1bbaa91 > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/include/listener_wayland.h > +@@ -0,0 +1,66 @@ > ++/******************************************************** > ************* > ++*********\ Copyright (c) 2005-2019, Intel Corporation All rights > ++reserved. > ++ > ++Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > ++ > ++1. Redistributions of source code must retain the above copyright notice, > this list of conditions and the following disclaimer. > ++ > ++2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in the > documentation and/or other materials provided with the distribution. > ++ > ++3. Neither the name of the copyright holder nor the names of its > contributors may be used to endorse or promote products derived from this > software without specific prior written permission. > ++ > ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR > CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, > EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED > TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > SUCH DAMAGE. > ++ > ++This sample was distributed or derived from the Intel's Media Samples > package. > ++The original version of this sample may be obtained from > ++https://software.intel.com/en-us/intel-media-server-studio > ++or https://software.intel.com/en-us/media-client-solutions-support. > ++\******************************************************** > ************* > ++*************/ > ++ > ++#ifndef LISTENER_WAYLAND_H > ++#define LISTENER_WAYLAND_H > ++ > ++#include "class_wayland.h" > ++ > ++/* drm listeners */ > ++void drm_handle_device(void *data > ++ , struct wl_drm *drm > ++ , const char *device); > ++ > ++void drm_handle_format(void *data > ++ , struct wl_drm *drm > ++ , uint32_t format); > ++ > ++void drm_handle_authenticated(void *data > ++ , struct wl_drm *drm); > ++ > ++void drm_handle_capabilities(void *data > ++ , struct wl_drm *drm > ++ , uint32_t value); > ++ > ++/* registry listeners */ > ++void registry_handle_global(void *data > ++ , struct wl_registry *registry > ++ , uint32_t name > ++ , const char *interface > ++ , uint32_t version); > ++ > ++void remove_registry_global(void *data > ++ , struct wl_registry *regsitry > ++ , uint32_t name); > ++ > ++/* surface listener */ > ++void shell_surface_ping(void *data > ++ , struct wl_shell_surface *shell_surface > ++ , uint32_t serial); > ++ > ++void shell_surface_configure(void *data > ++ , struct wl_shell_surface *shell_surface > ++ , uint32_t edges > ++ , int32_t width > ++ , int32_t height); > ++ > ++void handle_done(void *data, struct wl_callback *callback, uint32_t > ++time); > ++ > ++void buffer_release(void *data, struct wl_buffer *buffer); #endif /* > ++LISTENER_WAYLAND_H */ > +diff --git > +a/tools/legacy/sample_misc/wayland/include/wayland-drm-client- > protocol. > +h > +b/tools/legacy/sample_misc/wayland/include/wayland-drm-client- > protocol. > +h > +new file mode 100644 > +index 0000000..e11b35d > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/include/wayland-drm-client- > proto > ++++ col.h > +@@ -0,0 +1,235 @@ > ++/* > ++ * Copyright © 2008-2011 Kristian Høgsberg > ++ * Copyright © 2010-2011 Intel Corporation > ++ * > ++ * Permission to use, copy, modify, distribute, and sell this > ++ * software and its documentation for any purpose is hereby granted > ++ * without fee, provided that\n the above copyright notice appear in > ++ * all copies and that both that copyright notice and this permission > ++ * notice appear in supporting documentation, and that the name of > ++ * the copyright holders not be used in advertising or publicity > ++ * pertaining to distribution of the software without specific, > ++ * written prior permission. The copyright holders make no > ++ * representations about the suitability of this software for any > ++ * purpose. It is provided "as is" without express or implied > ++ * warranty. > ++ * > ++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO > THIS > ++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF > MERCHANTABILITY AND > ++ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR > ANY > ++ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, > WHETHER IN > ++ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, > ++ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE > OF > ++ * THIS SOFTWARE. > ++ */ > ++ > ++#ifndef DRM_CLIENT_PROTOCOL_H > ++#define DRM_CLIENT_PROTOCOL_H > ++ > ++#ifdef __cplusplus > ++extern "C" { > ++#endif > ++ > ++#include <stdint.h> > ++#include <stddef.h> > ++#include "wayland-client.h" > ++ > ++struct wl_client; > ++struct wl_resource; > ++ > ++struct wl_drm; > ++ > ++extern const struct wl_interface wl_drm_interface; > ++ > ++#ifndef WL_DRM_ERROR_ENUM > ++#define WL_DRM_ERROR_ENUM > ++enum wl_drm_error { > ++ WL_DRM_ERROR_AUTHENTICATE_FAIL = 0, > ++ WL_DRM_ERROR_INVALID_FORMAT = 1, > ++ WL_DRM_ERROR_INVALID_NAME = 2, > ++}; > ++#endif /* WL_DRM_ERROR_ENUM */ > ++ > ++#ifndef WL_DRM_FORMAT_ENUM > ++#define WL_DRM_FORMAT_ENUM > ++enum wl_drm_format { > ++ WL_DRM_FORMAT_C8 = 0x20203843, > ++ WL_DRM_FORMAT_RGB332 = 0x38424752, > ++ WL_DRM_FORMAT_BGR233 = 0x38524742, > ++ WL_DRM_FORMAT_XRGB4444 = 0x32315258, > ++ WL_DRM_FORMAT_XBGR4444 = 0x32314258, > ++ WL_DRM_FORMAT_RGBX4444 = 0x32315852, > ++ WL_DRM_FORMAT_BGRX4444 = 0x32315842, > ++ WL_DRM_FORMAT_ARGB4444 = 0x32315241, > ++ WL_DRM_FORMAT_ABGR4444 = 0x32314241, > ++ WL_DRM_FORMAT_RGBA4444 = 0x32314152, > ++ WL_DRM_FORMAT_BGRA4444 = 0x32314142, > ++ WL_DRM_FORMAT_XRGB1555 = 0x35315258, > ++ WL_DRM_FORMAT_XBGR1555 = 0x35314258, > ++ WL_DRM_FORMAT_RGBX5551 = 0x35315852, > ++ WL_DRM_FORMAT_BGRX5551 = 0x35315842, > ++ WL_DRM_FORMAT_ARGB1555 = 0x35315241, > ++ WL_DRM_FORMAT_ABGR1555 = 0x35314241, > ++ WL_DRM_FORMAT_RGBA5551 = 0x35314152, > ++ WL_DRM_FORMAT_BGRA5551 = 0x35314142, > ++ WL_DRM_FORMAT_RGB565 = 0x36314752, > ++ WL_DRM_FORMAT_BGR565 = 0x36314742, > ++ WL_DRM_FORMAT_RGB888 = 0x34324752, > ++ WL_DRM_FORMAT_BGR888 = 0x34324742, > ++ WL_DRM_FORMAT_XRGB8888 = 0x34325258, > ++ WL_DRM_FORMAT_XBGR8888 = 0x34324258, > ++ WL_DRM_FORMAT_RGBX8888 = 0x34325852, > ++ WL_DRM_FORMAT_BGRX8888 = 0x34325842, > ++ WL_DRM_FORMAT_ARGB8888 = 0x34325241, > ++ WL_DRM_FORMAT_ABGR8888 = 0x34324241, > ++ WL_DRM_FORMAT_RGBA8888 = 0x34324152, > ++ WL_DRM_FORMAT_BGRA8888 = 0x34324142, > ++ WL_DRM_FORMAT_XRGB2101010 = 0x30335258, > ++ WL_DRM_FORMAT_XBGR2101010 = 0x30334258, > ++ WL_DRM_FORMAT_RGBX1010102 = 0x30335852, > ++ WL_DRM_FORMAT_BGRX1010102 = 0x30335842, > ++ WL_DRM_FORMAT_ARGB2101010 = 0x30335241, > ++ WL_DRM_FORMAT_ABGR2101010 = 0x30334241, > ++ WL_DRM_FORMAT_RGBA1010102 = 0x30334152, > ++ WL_DRM_FORMAT_BGRA1010102 = 0x30334142, > ++ WL_DRM_FORMAT_YUYV = 0x56595559, > ++ WL_DRM_FORMAT_YVYU = 0x55595659, > ++ WL_DRM_FORMAT_UYVY = 0x59565955, > ++ WL_DRM_FORMAT_VYUY = 0x59555956, > ++ WL_DRM_FORMAT_AYUV = 0x56555941, > ++ WL_DRM_FORMAT_NV12 = 0x3231564e, > ++ WL_DRM_FORMAT_NV21 = 0x3132564e, > ++ WL_DRM_FORMAT_NV16 = 0x3631564e, > ++ WL_DRM_FORMAT_NV61 = 0x3136564e, > ++ WL_DRM_FORMAT_YUV410 = 0x39565559, > ++ WL_DRM_FORMAT_YVU410 = 0x39555659, > ++ WL_DRM_FORMAT_YUV411 = 0x31315559, > ++ WL_DRM_FORMAT_YVU411 = 0x31315659, > ++ WL_DRM_FORMAT_YUV420 = 0x32315559, > ++ WL_DRM_FORMAT_YVU420 = 0x32315659, > ++ WL_DRM_FORMAT_YUV422 = 0x36315559, > ++ WL_DRM_FORMAT_YVU422 = 0x36315659, > ++ WL_DRM_FORMAT_YUV444 = 0x34325559, > ++ WL_DRM_FORMAT_YVU444 = 0x34325659, }; #endif /* > WL_DRM_FORMAT_ENUM > ++*/ > ++ > ++#ifndef WL_DRM_CAPABILITY_ENUM > ++#define WL_DRM_CAPABILITY_ENUM > ++/** > ++ * wl_drm_capability - wl_drm capability bitmask > ++ * @WL_DRM_CAPABILITY_PRIME: wl_drm prime available > ++ * > ++ * Bitmask of capabilities. > ++ */ > ++enum wl_drm_capability { > ++ WL_DRM_CAPABILITY_PRIME = 1, > ++}; > ++#endif /* WL_DRM_CAPABILITY_ENUM */ > ++ > ++struct wl_drm_listener { > ++ /** > ++ * device - (none) > ++ * @name: (none) > ++ */ > ++ void (*device)(void *data, > ++ struct wl_drm *wl_drm, > ++ const char *name); > ++ /** > ++ * format - (none) > ++ * @format: (none) > ++ */ > ++ void (*format)(void *data, > ++ struct wl_drm *wl_drm, > ++ uint32_t format); > ++ /** > ++ * authenticated - (none) > ++ */ > ++ void (*authenticated)(void *data, > ++ struct wl_drm *wl_drm); > ++ /** > ++ * capabilities - (none) > ++ * @value: (none) > ++ */ > ++ void (*capabilities)(void *data, > ++ struct wl_drm *wl_drm, > ++ uint32_t value); > ++}; > ++ > ++static inline int > ++wl_drm_add_listener(struct wl_drm *wl_drm, > ++ const struct wl_drm_listener *listener, void *data) { > ++ return wl_proxy_add_listener((struct wl_proxy *) wl_drm, > ++ (void (**)(void)) listener, data); } > ++ > ++#define WL_DRM_AUTHENTICATE 0 > ++#define WL_DRM_CREATE_BUFFER 1 > ++#define WL_DRM_CREATE_PLANAR_BUFFER 2 > ++#define WL_DRM_CREATE_PRIME_BUFFER 3 > ++ > ++static inline void > ++wl_drm_set_user_data(struct wl_drm *wl_drm, void *user_data) { > ++ wl_proxy_set_user_data((struct wl_proxy *) wl_drm, user_data); } > ++ > ++static inline void * > ++wl_drm_get_user_data(struct wl_drm *wl_drm) { > ++ return wl_proxy_get_user_data((struct wl_proxy *) wl_drm); } > ++ > ++static inline void > ++wl_drm_destroy(struct wl_drm *wl_drm) > ++{ > ++ wl_proxy_destroy((struct wl_proxy *) wl_drm); } > ++ > ++static inline void > ++wl_drm_authenticate(struct wl_drm *wl_drm, uint32_t id) { > ++ wl_proxy_marshal((struct wl_proxy *) wl_drm, > ++ WL_DRM_AUTHENTICATE, id); } > ++ > ++static inline struct wl_buffer * > ++wl_drm_create_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t > ++width, int32_t height, uint32_t stride, uint32_t format) { > ++ struct wl_proxy *id; > ++ > ++ id = wl_proxy_marshal_constructor((struct wl_proxy *) wl_drm, > ++ WL_DRM_CREATE_BUFFER, &wl_buffer_interface, NULL, name, > ++ width, height, stride, format); > ++ > ++ return (struct wl_buffer *) id; > ++} > ++ > ++static inline struct wl_buffer * > ++wl_drm_create_planar_buffer(struct wl_drm *wl_drm, uint32_t name, > ++int32_t width, int32_t height, uint32_t format, int32_t offset0, int32_t > stride0, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2) { > ++ struct wl_proxy *id; > ++ > ++ id = wl_proxy_marshal_constructor((struct wl_proxy *) wl_drm, > ++ WL_DRM_CREATE_PLANAR_BUFFER, &wl_buffer_interface, NULL, > ++ name, width, height, format, offset0, stride0, offset1, stride1, > ++ offset2, stride2); > ++ > ++ return (struct wl_buffer *) id; > ++} > ++ > ++static inline struct wl_buffer * > ++wl_drm_create_prime_buffer(struct wl_drm *wl_drm, int32_t name, > ++int32_t width, int32_t height, uint32_t format, int32_t offset0, int32_t > stride0, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2) { > ++ struct wl_proxy *id; > ++ > ++ id = wl_proxy_marshal_constructor((struct wl_proxy *) wl_drm, > ++ WL_DRM_CREATE_PRIME_BUFFER, &wl_buffer_interface, NULL, > ++ name, width, height, format, offset0, stride0, offset1, stride1, > ++ offset2, stride2); > ++ > ++ return (struct wl_buffer *) id; > ++} > ++ > ++#ifdef __cplusplus > ++} > ++#endif > ++ > ++#endif > +diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp > +b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp > +new file mode 100644 > +index 0000000..2bafdb2 > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp > +@@ -0,0 +1,500 @@ > ++/******************************************************** > ************* > ++*********\ Copyright (c) 2005-2019, Intel Corporation All rights > ++reserved. > ++ > ++Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > ++ > ++1. Redistributions of source code must retain the above copyright notice, > this list of conditions and the following disclaimer. > ++ > ++2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in the > documentation and/or other materials provided with the distribution. > ++ > ++3. Neither the name of the copyright holder nor the names of its > contributors may be used to endorse or promote products derived from this > software without specific prior written permission. > ++ > ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR > CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, > EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED > TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > SUCH DAMAGE. > ++ > ++This sample was distributed or derived from the Intel's Media Samples > package. > ++The original version of this sample may be obtained from > ++https://software.intel.com/en-us/intel-media-server-studio > ++or https://software.intel.com/en-us/media-client-solutions-support. > ++\******************************************************** > ************* > ++*************/ > ++ > ++#include <iostream> > ++#include <exception> > ++#include <cstring> > ++#include <fcntl.h> > ++#include <unistd.h> > ++#include <poll.h> > ++#include <sys/mman.h> > ++extern "C" { > ++#include <drm.h> > ++#include <xf86drm.h> > ++#include <intel_bufmgr.h> > ++} > ++#include "class_wayland.h" > ++#include "listener_wayland.h" > ++#include "wayland-drm-client-protocol.h" > ++ > ++#define BATCH_SIZE 0x80000 > ++ > ++struct buffer { > ++ struct wl_buffer *buffer; > ++ mfxFrameSurface1 *pInSurface; > ++}; > ++ > ++static const struct wl_callback_listener frame_listener = { > ++ handle_done > ++}; > ++ > ++static const struct wl_buffer_listener buffer_listener = { > ++ buffer_release > ++}; > ++ > ++Wayland::Wayland() > ++ : m_display(NULL) > ++ , m_registry(NULL) > ++ , m_compositor(NULL) > ++ , m_shell(NULL) > ++ , m_drm(NULL) > ++ , m_shm(NULL) > ++ , m_pool(NULL) > ++ , m_surface(NULL) > ++ , m_shell_surface(NULL) > ++ , m_callback(NULL) > ++ , m_event_queue(NULL) > ++ , m_pending_frame(0) > ++ , m_shm_pool(NULL) > ++ , m_display_fd(-1) > ++ , m_fd(-1) > ++ , m_bufmgr(NULL) > ++ , m_device_name(NULL) > ++ , m_x(0), m_y(0) > ++ , m_perf_mode(false) > ++{ > ++ std::memset(&m_poll, 0, sizeof(m_poll)); } > ++ > ++bool Wayland::InitDisplay() > ++{ > ++ static const struct wl_registry_listener registry_listener = { > ++ .global = registry_handle_global, > ++ .global_remove = remove_registry_global > ++ }; > ++ > ++ m_display = wl_display_connect(NULL); > ++ if (NULL == m_display) { > ++ std::cout << "Error: Cannot connect to wayland display\n"; > ++ return false; > ++ } > ++ m_registry = wl_display_get_registry(m_display); > ++ wl_registry_add_listener(m_registry > ++ , ®istry_listener > ++ , this); > ++ > ++ m_display_fd = wl_display_get_fd(m_display); > ++ wl_display_roundtrip(m_display); > ++ wl_display_roundtrip(m_display); > ++ m_event_queue = wl_display_create_queue(m_display); > ++ if(NULL == m_event_queue) > ++ return false; > ++ > ++ m_poll.fd = m_display_fd; > ++ m_poll.events = POLLIN; > ++ return true; > ++} > ++ > ++int Wayland::DisplayRoundtrip() > ++{ > ++ return wl_display_roundtrip(m_display); } > ++ > ++bool Wayland::CreateSurface() > ++{ > ++ static const struct wl_shell_surface_listener > ++ shell_surface_listener = { > ++ shell_surface_ping, > ++ shell_surface_configure > ++ }; > ++ > ++ m_surface = wl_compositor_create_surface(m_compositor); > ++ if (NULL == m_surface) > ++ return false; > ++ > ++ m_shell_surface = wl_shell_get_shell_surface(m_shell > ++ , m_surface); > ++ if(NULL == m_shell_surface) > ++ { > ++ wl_surface_destroy(m_surface); > ++ return false; > ++ } > ++ > ++ wl_shell_surface_add_listener(m_shell_surface > ++ , &shell_surface_listener > ++ , 0); > ++ wl_shell_surface_set_toplevel(m_shell_surface); > ++ wl_shell_surface_set_user_data(m_shell_surface, m_surface); > ++ wl_surface_set_user_data(m_surface, NULL); > ++ return true; > ++} > ++ > ++ > ++void Wayland::FreeSurface() > ++{ > ++ if(NULL != m_shell_surface) > ++ wl_shell_surface_destroy(m_shell_surface); > ++ if(NULL != m_surface) > ++ wl_surface_destroy(m_surface); } > ++ > ++void Wayland::Sync() > ++{ > ++ int ret; > ++ while(NULL != m_callback) > ++ { > ++ while(wl_display_prepare_read_queue(m_display, m_event_queue) > < 0) > ++ wl_display_dispatch_queue_pending(m_display, > ++m_event_queue); > ++ > ++ wl_display_flush(m_display); > ++ > ++ ret = poll(&m_poll,1,-1); > ++ if(ret < 0 ) > ++ wl_display_cancel_read(m_display); > ++ else > ++ wl_display_read_events(m_display); > ++ wl_display_dispatch_queue_pending(m_display, m_event_queue); > ++ } > ++} > ++ > ++void Wayland::SetPerfMode(bool perf_mode) { > ++ m_perf_mode = perf_mode; > ++} > ++ > ++void Wayland::SetRenderWinPos(int x, int y) { > ++ m_x = x; m_y = y; > ++} > ++ > ++void Wayland::RenderBuffer(struct wl_buffer *buffer > ++ , mfxFrameSurface1 *surface) > ++{ > ++ wld_buffer *m_buffer = new wld_buffer; > ++ if (m_buffer == NULL) > ++ return; > ++ > ++ m_buffer->buffer = buffer; > ++ m_buffer->pInSurface = surface; > ++ > ++ wl_surface_attach(m_surface, buffer, 0, 0); > ++ wl_surface_damage(m_surface, m_x, m_y, surface->Info.CropW, > ++ surface->Info.CropH); > ++ > ++ wl_proxy_set_queue((struct wl_proxy *) buffer, m_event_queue); > ++ > ++ AddBufferToList(m_buffer); > ++ wl_buffer_add_listener(buffer, &buffer_listener, this); > ++ m_pending_frame=1; > ++ if (m_perf_mode) > ++ m_callback = wl_display_sync(m_display); > ++ else > ++ m_callback = wl_surface_frame(m_surface); > ++ wl_callback_add_listener(m_callback, &frame_listener, this); > ++ wl_proxy_set_queue((struct wl_proxy *) m_callback, > m_event_queue); > ++ wl_surface_commit(m_surface); > ++ wl_display_dispatch_queue(m_display, m_event_queue); > ++ /* Force a Sync before and after render to ensure client handles > ++ wayland events in a timely fashion. This also fixes the one time > ++ flicker issue on wl_shell_surface pointer enter */ > ++ Sync(); > ++ > ++} > ++ > ++void Wayland::RenderBufferWinPosSize(struct wl_buffer *buffer > ++ , int x > ++ , int y > ++ , int32_t width > ++ , int32_t height) > ++{ > ++ wl_surface_attach(m_surface, buffer, 0, 0); > ++ wl_surface_damage(m_surface, x, y, width, height); > ++ > ++ wl_proxy_set_queue((struct wl_proxy *) buffer, m_event_queue); > ++ > ++ wl_buffer_add_listener(buffer, &buffer_listener, NULL); > ++ m_pending_frame=1; > ++ if (m_perf_mode) > ++ m_callback = wl_display_sync(m_display); > ++ else > ++ m_callback = wl_surface_frame(m_surface); > ++ wl_callback_add_listener(m_callback, &frame_listener, this); > ++ wl_proxy_set_queue((struct wl_proxy *) m_callback, > m_event_queue); > ++ wl_surface_commit(m_surface); > ++ wl_display_dispatch_queue(m_display, m_event_queue); } > ++ > ++ > ++void Wayland::DestroyCallback() > ++{ > ++ if(m_callback) > ++ { > ++ wl_callback_destroy(m_callback); > ++ m_callback = NULL; > ++ m_pending_frame=0; > ++ } > ++} > ++ > ++//ShmPool > ++bool Wayland::CreateShmPool(int fd, int32_t size, int prot) { > ++ m_shm_pool = new struct ShmPool; > ++ if (NULL == m_shm_pool) > ++ return false; > ++ > ++ m_shm_pool->capacity = size; > ++ m_shm_pool->size = 0; > ++ m_shm_pool->fd = fd; > ++ > ++ m_shm_pool->memory = static_cast<uint32_t*>(mmap(0 > ++ , size > ++ , prot > ++ , MAP_SHARED > ++ , m_shm_pool->fd > ++ , 0)); > ++ if (MAP_FAILED == m_shm_pool->memory) > ++ { > ++ delete m_shm_pool; > ++ return false; > ++ } > ++ > ++ m_pool = wl_shm_create_pool(m_shm > ++ , m_shm_pool->fd > ++ , size); > ++ if (NULL == m_pool) > ++ { > ++ munmap(m_shm_pool->memory, size); > ++ delete m_shm_pool; > ++ return false; > ++ } > ++ wl_shm_pool_set_user_data(m_pool, m_shm_pool); > ++ return true; > ++} > ++ > ++ > ++void Wayland::FreeShmPool() > ++{ > ++ wl_shm_pool_destroy(m_pool); > ++ munmap(m_shm_pool->memory, m_shm_pool->capacity); > ++ delete m_shm_pool; > ++} > ++ > ++ > ++struct wl_buffer * Wayland::CreateShmBuffer(unsigned width > ++ , unsigned height > ++ , unsigned stride > ++ , uint32_t PIXEL_FORMAT_ID) > ++{ > ++ struct wl_buffer *buffer; > ++ buffer = wl_shm_pool_create_buffer(m_pool > ++ , m_shm_pool->size*sizeof(uint32_t) > ++ , width > ++ , height > ++ , stride > ++ , PIXEL_FORMAT_ID); > ++ if(NULL == buffer) > ++ return NULL; > ++ > ++ m_shm_pool->size += stride*height; > ++ return buffer; > ++} > ++ > ++void Wayland::FreeShmBuffer(struct wl_buffer *buffer) { > ++ wl_buffer_destroy(buffer); > ++} > ++ > ++int Wayland::Dispatch() > ++{ > ++ return wl_display_dispatch(m_display); } > ++ > ++struct wl_buffer * Wayland::CreatePlanarBuffer(uint32_t name > ++ , int32_t width > ++ , int32_t height > ++ , uint32_t format > ++ , int32_t offsets[3] > ++ , int32_t pitches[3]) > ++{ > ++ struct wl_buffer * buffer = NULL; > ++ if(NULL == m_drm) > ++ return NULL; > ++ > ++ buffer = wl_drm_create_planar_buffer(m_drm > ++ , name > ++ , width > ++ , height > ++ , format > ++ , offsets[0] > ++ , pitches[0] > ++ , offsets[1] > ++ , pitches[1] > ++ , offsets[2] > ++ , pitches[2]); > ++ return buffer; > ++} > ++ > ++struct wl_buffer * Wayland::CreatePrimeBuffer(uint32_t name > ++ , int32_t width > ++ , int32_t height > ++ , uint32_t format > ++ , int32_t offsets[3] > ++ , int32_t pitches[3]) > ++{ > ++ struct wl_buffer * buffer = NULL; > ++ if(NULL == m_drm) > ++ return NULL; > ++ > ++ buffer = wl_drm_create_prime_buffer(m_drm > ++ , name > ++ , width > ++ , height > ++ , format > ++ , offsets[0] > ++ , pitches[0] > ++ , offsets[1] > ++ , pitches[1] > ++ , offsets[2] > ++ , pitches[2]); > ++ return buffer; > ++} > ++ > ++Wayland::~Wayland() > ++{ > ++ if(NULL != m_shell) > ++ wl_shell_destroy(m_shell); > ++ if(NULL != m_shm) > ++ wl_shm_destroy(m_shm); > ++ if(NULL != m_bufmgr) { > ++ drm_intel_bufmgr_destroy(m_bufmgr); > ++ } > ++ if(NULL != m_compositor) > ++ wl_compositor_destroy(m_compositor); > ++ if(NULL != m_event_queue) > ++ wl_event_queue_destroy(m_event_queue); > ++ if(0 != m_buffers_list.size()) > ++ DestroyBufferList(); > ++ if(NULL != m_registry) > ++ wl_registry_destroy(m_registry); > ++ if(NULL != m_display) > ++ wl_display_disconnect(m_display); > ++ if(NULL != m_device_name) > ++ delete m_device_name; > ++} > ++ > ++// Registry > ++void Wayland::RegistryGlobal(struct wl_registry *registry > ++ , uint32_t name > ++ , const char *interface > ++ , uint32_t version) > ++{ > ++ if(0 == strcmp(interface, "wl_compositor")) > ++ m_compositor = static_cast<wl_compositor*> > ++ (wl_registry_bind(registry > ++ , name > ++ , &wl_compositor_interface > ++ , version)); > ++ else if(0 == strcmp(interface, "wl_shell")) > ++ m_shell = static_cast<wl_shell*> > ++ (wl_registry_bind(registry > ++ , name > ++ , &wl_shell_interface > ++ , version)); > ++ else if(0 == strcmp(interface, "wl_drm")) { > ++ static const struct wl_drm_listener drm_listener = { > ++ drm_handle_device, > ++ drm_handle_format, > ++ drm_handle_authenticated, > ++ drm_handle_capabilities > ++ }; > ++ m_drm = static_cast<wl_drm*>(wl_registry_bind(registry > ++ , name > ++ , &wl_drm_interface > ++ , 2)); > ++ wl_drm_add_listener(m_drm, &drm_listener, this); > ++ } > ++} > ++ > ++void Wayland::DrmHandleDevice(const char *name) { > ++ m_device_name = strdup(name); > ++ if (!m_device_name) > ++ return; > ++ > ++ drm_magic_t magic; > ++ m_fd = open(m_device_name, O_RDWR | O_CLOEXEC); > ++ if (-1 == m_fd) { > ++ std::cout << "Error: Could not open " << > ++ m_device_name << "\n"; > ++ return; > ++ } > ++ int type = drmGetNodeTypeFromFd(m_fd); > ++ if (type != DRM_NODE_RENDER) { > ++ drmGetMagic(m_fd, &magic); > ++ wl_drm_authenticate(m_drm, magic); > ++ } > ++} > ++ > ++void Wayland::DrmHandleAuthenticated() { > ++ m_bufmgr = drm_intel_bufmgr_gem_init(m_fd, BATCH_SIZE); } > ++ > ++void Wayland::AddBufferToList(wld_buffer *buffer) { > ++ if (buffer == NULL) > ++ return; > ++ > ++ if (buffer->pInSurface) { > ++ msdkFrameSurface *surface = FindUsedSurface(buffer->pInSurface); > ++ msdk_atomic_inc16(&(surface->render_lock)); > ++ m_buffers_list.push_back(buffer); > ++ } > ++} > ++ > ++void Wayland::RemoveBufferFromList(struct wl_buffer *buffer) { > ++ wld_buffer *m_buffer = NULL; > ++ m_buffer = m_buffers_list.front(); > ++ if (NULL != m_buffer && (m_buffer->buffer == buffer)) { > ++ if (m_buffer->pInSurface) { > ++ msdkFrameSurface *surface = FindUsedSurface(m_buffer- > >pInSurface); > ++ msdk_atomic_dec16(&(surface->render_lock)); > ++ } > ++ m_buffer->buffer = NULL; > ++ m_buffer->pInSurface = NULL; > ++ m_buffers_list.pop_front(); > ++ delete m_buffer; > ++ } > ++} > ++ > ++void Wayland::DestroyBufferList() > ++{ > ++ wld_buffer *m_buffer = NULL; > ++ while (!m_buffers_list.empty()) > ++ { > ++ m_buffer = m_buffers_list.front(); > ++ if (m_buffer->pInSurface) > ++ { > ++ msdkFrameSurface *surface = FindUsedSurface(m_buffer- > >pInSurface); > ++ msdk_atomic_dec16(&(surface->render_lock)); > ++ } > ++ m_buffers_list.pop_front(); > ++ delete m_buffer; > ++ } > ++} > ++ > ++Wayland* WaylandCreate() > ++{ > ++ return new Wayland; > ++} > ++ > ++void WaylandDestroy(Wayland *pWld) > ++{ > ++ delete pWld; > ++} > +diff --git a/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp > +b/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp > +new file mode 100644 > +index 0000000..90f582a > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp > +@@ -0,0 +1,105 @@ > ++/******************************************************** > ************* > ++*********\ Copyright (c) 2005-2019, Intel Corporation All rights > ++reserved. > ++ > ++Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > ++ > ++1. Redistributions of source code must retain the above copyright notice, > this list of conditions and the following disclaimer. > ++ > ++2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in the > documentation and/or other materials provided with the distribution. > ++ > ++3. Neither the name of the copyright holder nor the names of its > contributors may be used to endorse or promote products derived from this > software without specific prior written permission. > ++ > ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR > CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, > EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED > TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > SUCH DAMAGE. > ++ > ++This sample was distributed or derived from the Intel's Media Samples > package. > ++The original version of this sample may be obtained from > ++https://software.intel.com/en-us/intel-media-server-studio > ++or https://software.intel.com/en-us/media-client-solutions-support. > ++\******************************************************** > ************* > ++*************/ > ++ > ++#include <iostream> > ++#include "listener_wayland.h" > ++#include "class_wayland.h" > ++ > ++/* drm listener */ > ++void drm_handle_device(void *data > ++ , struct wl_drm *drm > ++ , const char *device) > ++{ > ++ Wayland *wayland = static_cast<Wayland*>(data); > ++ wayland->DrmHandleDevice(device); > ++} > ++ > ++void drm_handle_format(void *data > ++ , struct wl_drm *drm > ++ , uint32_t format) > ++{ > ++ /* NOT IMPLEMENTED */ > ++} > ++ > ++void drm_handle_capabilities(void *data > ++ , struct wl_drm *drm > ++ , uint32_t value) > ++{ > ++ /* NOT IMPLEMENTED */ > ++} > ++ > ++void drm_handle_authenticated(void *data > ++ , struct wl_drm *drm) > ++{ > ++ Wayland *wayland = static_cast<Wayland*>(data); > ++ wayland->DrmHandleAuthenticated(); > ++} > ++ > ++/* registry listener */ > ++void registry_handle_global(void *data > ++ , struct wl_registry *registry > ++ , uint32_t name > ++ , const char *interface > ++ , uint32_t version) > ++{ > ++ Wayland *wayland = static_cast<Wayland*>(data); > ++ wayland->RegistryGlobal(registry > ++ , name > ++ , interface > ++ , version); > ++} > ++ > ++void remove_registry_global(void *data > ++ , struct wl_registry *registy > ++ , uint32_t name) > ++{ > ++ /* NOT IMPLEMENTED */ > ++} > ++ > ++ > ++/* surface listener */ > ++void shell_surface_ping(void *data > ++ , struct wl_shell_surface *shell_surface > ++ , uint32_t serial) > ++{ > ++ wl_shell_surface_pong(shell_surface, serial); } > ++ > ++void shell_surface_configure(void *data > ++ , struct wl_shell_surface *shell_surface > ++ , uint32_t edges > ++ , int32_t width > ++ , int32_t height) > ++{ > ++ /* NOT IMPLEMENTED */ > ++} > ++ > ++void handle_done(void *data, struct wl_callback *callback, uint32_t > ++time) { > ++ Wayland *wayland = static_cast<Wayland*>(data); > ++ wayland->DestroyCallback(); > ++} > ++ > ++void buffer_release(void *data, struct wl_buffer *buffer) { > ++ Wayland *wayland = static_cast<Wayland*>(data); > ++ wayland->RemoveBufferFromList(buffer); > ++ wl_buffer_destroy(buffer); > ++ buffer = NULL; > ++} > +diff --git > +a/tools/legacy/sample_misc/wayland/src/wayland-drm-protocol.c > +b/tools/legacy/sample_misc/wayland/src/wayland-drm-protocol.c > +new file mode 100644 > +index 0000000..8e1fd50 > +--- /dev/null > ++++ b/tools/legacy/sample_misc/wayland/src/wayland-drm-protocol.c > +@@ -0,0 +1,84 @@ > ++/* > ++ * Copyright © 2008-2011 Kristian Høgsberg > ++ * Copyright © 2010-2011 Intel Corporation > ++ * > ++ * Permission to use, copy, modify, distribute, and sell this > ++ * software and its documentation for any purpose is hereby granted > ++ * without fee, provided that\n the above copyright notice appear in > ++ * all copies and that both that copyright notice and this permission > ++ * notice appear in supporting documentation, and that the name of > ++ * the copyright holders not be used in advertising or publicity > ++ * pertaining to distribution of the software without specific, > ++ * written prior permission. The copyright holders make no > ++ * representations about the suitability of this software for any > ++ * purpose. It is provided "as is" without express or implied > ++ * warranty. > ++ * > ++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO > THIS > ++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF > MERCHANTABILITY AND > ++ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR > ANY > ++ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, > WHETHER IN > ++ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, > ++ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE > OF > ++ * THIS SOFTWARE. > ++ */ > ++ > ++#include <stdlib.h> > ++#include <stdint.h> > ++#include "wayland-util.h" > ++ > ++extern const struct wl_interface wl_buffer_interface; > ++ > ++static const struct wl_interface *types[] = { > ++ NULL, > ++ &wl_buffer_interface, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ &wl_buffer_interface, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ &wl_buffer_interface, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++ NULL, > ++}; > ++ > ++static const struct wl_message wl_drm_requests[] = { > ++ { "authenticate", "u", types + 0 }, > ++ { "create_buffer", "nuiiuu", types + 1 }, > ++ { "create_planar_buffer", "nuiiuiiiiii", types + 7 }, > ++ { "create_prime_buffer", "2nhiiuiiiiii", types + 18 }, }; > ++ > ++static const struct wl_message wl_drm_events[] = { > ++ { "device", "s", types + 0 }, > ++ { "format", "u", types + 0 }, > ++ { "authenticated", "", types + 0 }, > ++ { "capabilities", "u", types + 0 }, }; > ++ > ++WL_EXPORT const struct wl_interface wl_drm_interface = { > ++ "wl_drm", 2, > ++ 4, wl_drm_requests, > ++ 4, wl_drm_events, > ++}; > ++ > +-- > +2.7.4 > + > diff --git a/recipes-multimedia/onevpl/onevpl_2021.2.2.bb b/recipes- > multimedia/onevpl/onevpl_2021.2.2.bb > index 566d84d..a508432 100644 > --- a/recipes-multimedia/onevpl/onevpl_2021.2.2.bb > +++ b/recipes-multimedia/onevpl/onevpl_2021.2.2.bb > @@ -11,6 +11,7 @@ LIC_FILES_CHKSUM = > "file://LICENSE;md5=c18ea6bb4786a26bf4eee88a7424a408 \ SRC_URI = > "git://github.com/oneapi-src/oneVPL.git;protocol=https \ > file://0001-cmake-Allow-build-env-to-set-variables.patch \ > file://0001-Add-X11-support-to-legacy-tools.patch \ > + file://0001-Adding-Wayland-support-to-legacy-tools.patch \ > " > SRCREV = "17968d8d2299352f5a9e09388d24e81064c81c87" > S = "${WORKDIR}/git" > -- > 2.7.4
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#7061): https://lists.yoctoproject.org/g/meta-intel/message/7061 Mute This Topic: https://lists.yoctoproject.org/mt/83142896/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/meta-intel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
