Hi Jin Chung,
On Wed, 2021-06-16 at 17:45 +0800, [email protected] wrote:
> From: "Teng, Jin Chung" <[email protected]>
>
> Signed-off-by: Teng, Jin Chung <[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_common/src/vaapi_utils.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 ++++
> 11 files changed, 1190 insertions(+), 2 deletions(-)
This patch doesn't apply. It looks like it's a patch to oneVPL and not
to meta-intel.
Please also include a description in the commit message explaining the
change.
Thanks,
Anuj
> 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 5cf69d3..7632bb4 100644
> --- a/tools/legacy/sample_common/CMakeLists.txt
> +++ b/tools/legacy/sample_common/CMakeLists.txt
> @@ -67,6 +67,7 @@ if(UNIX)
> find_package(PkgConfig REQUIRED)
> pkg_check_modules(PKG_LIBVA libva libva-drm)
> pkg_check_modules(PKG_LIBDRM libdrm)
> + 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})
> @@ -79,6 +80,13 @@ if(UNIX)
> else()
> message(WARNING "libva-drm not found: building without libVA DRM
> 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_common/src/vaapi_utils.cpp
> b/tools/legacy/sample_common/src/vaapi_utils.cpp
> index 833b4c1..23edf86 100644
> --- a/tools/legacy/sample_common/src/vaapi_utils.cpp
> +++ b/tools/legacy/sample_common/src/vaapi_utils.cpp
> @@ -163,7 +163,7 @@ Xcbpresent_Proxy::~Xcbpresent_Proxy() {}
> #if defined(LIBVA_WAYLAND_SUPPORT)
>
> VA_WaylandClientProxy::VA_WaylandClientProxy()
> - : lib("libmfx_wayland.so"),
> + : lib("libvpl_wayland.so"),
> SIMPLE_LOADER_FUNCTION(WaylandCreate) {}
>
> VA_WaylandClientProxy::~VA_WaylandClientProxy() {}
> diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt
> b/tools/legacy/sample_misc/wayland/CMakeLists.txt
> new file mode 100644
> index 0000000..2ca2a1c
> --- /dev/null
> +++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt
> @@ -0,0 +1,29 @@
> +if (NOT PKG_WAYLAND_CLIENT_FOUND)
> + return()
> +endif()
> +
> +set(TARGET vpl_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-
> protocol.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,
> +};
> +
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#7105):
https://lists.yoctoproject.org/g/meta-intel/message/7105
Mute This Topic: https://lists.yoctoproject.org/mt/83576896/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/meta-intel/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-