summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLim Siew Hoon <siew.hoon.lim@intel.com>2022-10-06 12:39:49 +0800
committerAnuj Mittal <anuj.mittal@intel.com>2022-10-06 12:44:56 +0800
commit8a664853cad253e52b97b4ab768052dfaa1c9a3d (patch)
treea43d3fa05c59c3a55f45ccd656be83288b48724d
parentc4f1331c49175b39f85c43f0971a4586c07b0734 (diff)
downloadmeta-intel-8a664853cad253e52b97b4ab768052dfaa1c9a3d.tar.gz
onevpl: fixed sample rendering failed in weston10
Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-Enable-xdg_shell-for-weston10.patch291
-rw-r--r--recipes-multimedia/onevpl/onevpl_2022.1.5.bb1
2 files changed, 292 insertions, 0 deletions
diff --git a/recipes-multimedia/onevpl/onevpl/0001-Enable-xdg_shell-for-weston10.patch b/recipes-multimedia/onevpl/onevpl/0001-Enable-xdg_shell-for-weston10.patch
new file mode 100644
index 00000000..17e4e380
--- /dev/null
+++ b/recipes-multimedia/onevpl/onevpl/0001-Enable-xdg_shell-for-weston10.patch
@@ -0,0 +1,291 @@
1From 38bd0f212bf6cfd65f836913dca1098113fa2e8d Mon Sep 17 00:00:00 2001
2From: "Cheah, Vincent Beng Keat" <vincent.beng.keat.cheah@intel.com>
3Date: Mon, 3 Oct 2022 16:06:38 +0800
4Subject: [PATCH] Enable xdg_shell for weston10
5
6Tested command: ./sample_decode h264 -vaapi -hw -i test.h264 -rwld
7
8Upstream-Status: Submitted [innersource PR: #518 ]
9
10Signed-off-by: Cheah, Vincent Beng Keat <vincent.beng.keat.cheah@intel.com>
11---
12 tools/legacy/sample_common/CMakeLists.txt | 15 +++++
13 .../legacy/sample_misc/wayland/CMakeLists.txt | 34 ++++++++++
14 .../wayland/include/class_wayland.h | 8 +++
15 .../wayland/include/listener_wayland.h | 16 +++++
16 .../sample_misc/wayland/src/class_wayland.cpp | 66 ++++++++++++++++---
17 .../wayland/src/listener_wayland.cpp | 23 +++++++
18 6 files changed, 153 insertions(+), 9 deletions(-)
19
20diff --git a/tools/legacy/sample_common/CMakeLists.txt b/tools/legacy/sample_common/CMakeLists.txt
21index c13749a..3f70465 100644
22--- a/tools/legacy/sample_common/CMakeLists.txt
23+++ b/tools/legacy/sample_common/CMakeLists.txt
24@@ -200,6 +200,12 @@ if(CMAKE_SYSTEM_NAME MATCHES Linux)
25 WAYLAND_LINUX_DMABUF_XML_PATH linux-dmabuf-unstable-v1.xml
26 PATHS ${WAYLAND_PROTOCOLS_PATH}/unstable/linux-dmabuf
27 NO_DEFAULT_PATH)
28+
29+ find_file(
30+ WAYLAND_LINUX_XDG_SHELL_XML_PATH xdg-shell.xml
31+ PATHS ${WAYLAND_PROTOCOLS_PATH}/stable/xdg-shell
32+ NO_DEFAULT_PATH)
33+
34 endif()
35 else()
36 message(
37@@ -216,6 +222,15 @@ if(CMAKE_SYSTEM_NAME MATCHES Linux)
38 PUBLIC ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
39 endif()
40
41+ if(WAYLAND_LINUX_XDG_SHELL_XML_PATH)
42+ target_compile_definitions(${TARGET}
43+ PUBLIC WAYLAND_LINUX_XDG_SHELL_SUPPORT)
44+
45+ target_include_directories(
46+ ${TARGET}
47+ PUBLIC ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
48+ endif()
49+
50 else()
51 message(
52 SEND_ERROR
53diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt b/tools/legacy/sample_misc/wayland/CMakeLists.txt
54index 9a272f9..470a763 100644
55--- a/tools/legacy/sample_misc/wayland/CMakeLists.txt
56+++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt
57@@ -36,6 +36,40 @@ if(PKGConfig_LIBDRM_FOUND)
58 ${CMAKE_CURRENT_SOURCE_DIR}/src/listener_wayland.cpp
59 ${CMAKE_CURRENT_SOURCE_DIR}/src/wayland-drm-protocol.c)
60
61+ if(WAYLAND_SCANNER_BIN
62+ AND PKG_WAYLAND_PROTCOLS_FOUND
63+ AND WAYLAND_LINUX_XDG_SHELL_XML_PATH)
64+ execute_process(
65+ COMMAND
66+ "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}" "client-header"
67+ "${WAYLAND_LINUX_XDG_SHELL_XML_PATH}"
68+ "tools/legacy/sample_misc/wayland/xdg-shell-client-protocol.h"
69+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
70+ RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
71+ if(WAYLAND_SCANNER_RESULT)
72+ message(FATAL_ERROR "Failed to generate xdg-shell-client-protocol.h")
73+ endif()
74+
75+ execute_process(
76+ COMMAND
77+ "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}" "private-code"
78+ "${WAYLAND_LINUX_XDG_SHELL_XML_PATH}"
79+ "tools/legacy/sample_misc/wayland/xdg-shell-protocol.c"
80+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
81+ RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
82+ if(WAYLAND_SCANNER_RESULT)
83+ message(FATAL_ERROR "Failed to generate xdg-shell-protocol.c")
84+ endif()
85+
86+ target_include_directories(
87+ ${TARGET} PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
88+ target_sources(
89+ ${TARGET}
90+ PRIVATE
91+ ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/xdg-shell-protocol.c
92+ )
93+ endif()
94+
95 if(WAYLAND_SCANNER_BIN
96 AND PKG_WAYLAND_PROTCOLS_FOUND
97 AND WAYLAND_LINUX_DMABUF_XML_PATH)
98diff --git a/tools/legacy/sample_misc/wayland/include/class_wayland.h b/tools/legacy/sample_misc/wayland/include/class_wayland.h
99index edaeefd..02c361c 100644
100--- a/tools/legacy/sample_misc/wayland/include/class_wayland.h
101+++ b/tools/legacy/sample_misc/wayland/include/class_wayland.h
102@@ -22,6 +22,9 @@ extern "C" {
103 #if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
104 #include "linux-dmabuf-unstable-v1.h"
105 #endif
106+ #if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
107+ #include "xdg-shell-client-protocol.h"
108+ #endif
109
110 typedef struct buffer wld_buffer;
111
112@@ -158,6 +161,11 @@ private:
113 struct wl_event_queue* m_event_queue;
114 volatile int m_pending_frame;
115 struct ShmPool* m_shm_pool;
116+ #if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
117+ struct xdg_wm_base* m_xdg_wm_base;
118+ struct xdg_surface* m_xdg_surface;
119+ struct xdg_toplevel* m_xdg_toplevel;
120+ #endif
121 int m_display_fd;
122 int m_fd;
123 struct pollfd m_poll;
124diff --git a/tools/legacy/sample_misc/wayland/include/listener_wayland.h b/tools/legacy/sample_misc/wayland/include/listener_wayland.h
125index 25ee3a1..8401e2b 100644
126--- a/tools/legacy/sample_misc/wayland/include/listener_wayland.h
127+++ b/tools/legacy/sample_misc/wayland/include/listener_wayland.h
128@@ -40,4 +40,20 @@ void shell_surface_configure(void* data,
129 void handle_done(void* data, struct wl_callback* callback, uint32_t time);
130
131 void buffer_release(void* data, struct wl_buffer* buffer);
132+
133+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
134+/* xdg shell */
135+void xdg_wm_base_ping(void* data, struct xdg_wm_base* xdg_wm_base, uint32_t serial);
136+
137+void xdg_surface_configure(void* data, struct xdg_surface* xdg_surface, uint32_t serial);
138+
139+void xdg_toplevel_configure(void* data,
140+ struct xdg_toplevel* xdg_toplevel,
141+ int32_t width,
142+ int32_t height,
143+ struct wl_array* states);
144+
145+void xdg_toplevel_close(void* data, struct xdg_toplevel* xdg_toplevel);
146+#endif
147+
148 #endif /* LISTENER_WAYLAND_H */
149diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
150index 41b7969..428b844 100644
151--- a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
152+++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
153@@ -49,6 +49,11 @@ Wayland::Wayland()
154 m_event_queue(NULL),
155 m_pending_frame(0),
156 m_shm_pool(NULL),
157+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
158+ m_xdg_wm_base(NULL),
159+ m_xdg_surface(NULL),
160+ m_xdg_toplevel(NULL),
161+#endif
162 m_display_fd(-1),
163 m_fd(-1),
164 m_bufmgr(NULL),
165@@ -89,6 +94,11 @@ int Wayland::DisplayRoundtrip() {
166 }
167
168 bool Wayland::CreateSurface() {
169+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
170+ static struct xdg_surface_listener xdg_surface_listener = { xdg_surface_configure };
171+ static struct xdg_toplevel_listener xdg_toplevel_listener = { xdg_toplevel_configure,
172+ xdg_toplevel_close };
173+#endif
174 static const struct wl_shell_surface_listener shell_surface_listener = {
175 shell_surface_ping,
176 shell_surface_configure
177@@ -98,16 +108,38 @@ bool Wayland::CreateSurface() {
178 if (NULL == m_surface)
179 return false;
180
181- m_shell_surface = wl_shell_get_shell_surface(m_shell, m_surface);
182- if (NULL == m_shell_surface) {
183- wl_surface_destroy(m_surface);
184- return false;
185+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
186+ if (m_xdg_wm_base) {
187+ m_shell = NULL;
188+ m_xdg_surface = xdg_wm_base_get_xdg_surface(m_xdg_wm_base, m_surface);
189+ if (nullptr == m_xdg_surface) {
190+ xdg_surface_destroy(m_xdg_surface);
191+ return false;
192+ }
193+
194+ xdg_surface_add_listener(m_xdg_surface, &xdg_surface_listener, 0);
195+ m_xdg_toplevel = xdg_surface_get_toplevel(m_xdg_surface);
196+ if (nullptr == m_xdg_toplevel)
197+ return false;
198+
199+ xdg_toplevel_add_listener(m_xdg_toplevel, &xdg_toplevel_listener, 0);
200+ wl_surface_commit(m_surface);
201+ wl_display_dispatch(m_display);
202 }
203+#endif
204
205- wl_shell_surface_add_listener(m_shell_surface, &shell_surface_listener, 0);
206- wl_shell_surface_set_toplevel(m_shell_surface);
207- wl_shell_surface_set_user_data(m_shell_surface, m_surface);
208- wl_surface_set_user_data(m_surface, NULL);
209+ if (m_shell) {
210+ m_shell_surface = wl_shell_get_shell_surface(m_shell, m_surface);
211+ if (NULL == m_shell_surface) {
212+ wl_surface_destroy(m_surface);
213+ return false;
214+ }
215+
216+ wl_shell_surface_add_listener(m_shell_surface, &shell_surface_listener, 0);
217+ wl_shell_surface_set_toplevel(m_shell_surface);
218+ wl_shell_surface_set_user_data(m_shell_surface, m_surface);
219+ wl_surface_set_user_data(m_surface, NULL);
220+ }
221 return true;
222 }
223
224@@ -116,6 +148,12 @@ void Wayland::FreeSurface() {
225 wl_shell_surface_destroy(m_shell_surface);
226 if (NULL != m_surface)
227 wl_surface_destroy(m_surface);
228+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
229+ if (nullptr != m_xdg_toplevel)
230+ xdg_toplevel_destroy(m_xdg_toplevel);
231+ if (nullptr != m_xdg_surface)
232+ xdg_surface_destroy(m_xdg_surface);
233+#endif
234 }
235
236 void Wayland::Sync() {
237@@ -370,9 +408,19 @@ void Wayland::RegistryGlobal(struct wl_registry* registry,
238 if (0 == strcmp(interface, "wl_compositor"))
239 m_compositor = static_cast<wl_compositor*>(
240 wl_registry_bind(registry, name, &wl_compositor_interface, version));
241- else if (0 == strcmp(interface, "wl_shell"))
242+ else if (0 == strcmp(interface, "wl_shell")) {
243 m_shell =
244 static_cast<wl_shell*>(wl_registry_bind(registry, name, &wl_shell_interface, version));
245+ }
246+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
247+ else if (0 == strcmp(interface, "xdg_wm_base")) {
248+ static const struct xdg_wm_base_listener xdg_wm_base_listener = { xdg_wm_base_ping };
249+ m_xdg_wm_base =
250+ static_cast<xdg_wm_base*>(wl_registry_bind(registry, name, &xdg_wm_base_interface, 1));
251+
252+ xdg_wm_base_add_listener(m_xdg_wm_base, &xdg_wm_base_listener, this);
253+ }
254+#endif
255 else if (0 == strcmp(interface, "wl_drm")) {
256 static const struct wl_drm_listener drm_listener = { drm_handle_device,
257 drm_handle_format,
258diff --git a/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp b/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp
259index 71d617e..b62cd70 100644
260--- a/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp
261+++ b/tools/legacy/sample_misc/wayland/src/listener_wayland.cpp
262@@ -65,3 +65,26 @@ void buffer_release(void* data, struct wl_buffer* buffer) {
263 wl_buffer_destroy(buffer);
264 buffer = NULL;
265 }
266+
267+#if defined(WAYLAND_LINUX_XDG_SHELL_SUPPORT)
268+/* xdg shell */
269+void xdg_wm_base_ping(void* data, struct xdg_wm_base* xdg_wm_base, uint32_t serial) {
270+ xdg_wm_base_pong(xdg_wm_base, serial);
271+}
272+
273+void xdg_surface_configure(void* data, struct xdg_surface* xdg_surface, uint32_t serial) {
274+ xdg_surface_ack_configure(xdg_surface, serial);
275+}
276+
277+void xdg_toplevel_configure(void* data,
278+ struct xdg_toplevel* xdg_toplevel,
279+ int32_t width,
280+ int32_t height,
281+ struct wl_array* states) {
282+ /* NOT IMPLEMENTED */
283+}
284+
285+void xdg_toplevel_close(void* data, struct xdg_toplevel* xdg_toplevel) {
286+ /* NOT IMPLEMENTED */
287+}
288+#endif
289--
2902.37.2
291
diff --git a/recipes-multimedia/onevpl/onevpl_2022.1.5.bb b/recipes-multimedia/onevpl/onevpl_2022.1.5.bb
index e0da2d60..12432689 100644
--- a/recipes-multimedia/onevpl/onevpl_2022.1.5.bb
+++ b/recipes-multimedia/onevpl/onevpl_2022.1.5.bb
@@ -10,6 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=c18ea6bb4786a26bf4eee88a7424a408 \
10 10
11SRC_URI = "git://github.com/oneapi-src/oneVPL.git;protocol=https;branch=master \ 11SRC_URI = "git://github.com/oneapi-src/oneVPL.git;protocol=https;branch=master \
12 file://0001-Fix-missing-UYVY-VA_FOURCC-causing-encode-failure.patch \ 12 file://0001-Fix-missing-UYVY-VA_FOURCC-causing-encode-failure.patch \
13 file://0001-Enable-xdg_shell-for-weston10.patch \
13 " 14 "
14SRCREV = "b90dbc9e673ee119f841e67184194446069c45a6" 15SRCREV = "b90dbc9e673ee119f841e67184194446069c45a6"
15S = "${WORKDIR}/git" 16S = "${WORKDIR}/git"