mirror of
git://git.yoctoproject.org/meta-raspberrypi.git
synced 2025-07-19 12:59:03 +02:00
userland: Implement dispmanx_wrap_buffer
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
parent
d28692dc9e
commit
e82417d33b
|
@ -0,0 +1,80 @@
|
|||
implement buffer wrapping interface for dispmanx
|
||||
|
||||
Courtesy: Zan Dobersek
|
||||
|
||||
diff --git a/interface/khronos/ext/egl_wayland.c b/interface/khronos/ext/egl_wayland.c
|
||||
index 5730743..9ef89cd 100644
|
||||
--- a/interface/khronos/ext/egl_wayland.c
|
||||
+++ b/interface/khronos/ext/egl_wayland.c
|
||||
@@ -133,8 +133,50 @@ dispmanx_create_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||
buffer->handle);
|
||||
}
|
||||
|
||||
+static void
|
||||
+dispmanx_wrap_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||
+ uint32_t id, uint32_t handle, int32_t width, int32_t height,
|
||||
+ uint32_t stride, uint32_t buffer_height, uint32_t format)
|
||||
+{
|
||||
+ struct wl_dispmanx_server_buffer *buffer;
|
||||
+ VC_IMAGE_TYPE_T vc_format = get_vc_format(format);
|
||||
+ uint32_t dummy;
|
||||
+
|
||||
+ if(vc_format == VC_IMAGE_MIN) {
|
||||
+ wl_resource_post_error(resource,
|
||||
+ WL_DISPMANX_ERROR_INVALID_FORMAT,
|
||||
+ "invalid format");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ buffer = calloc(1, sizeof *buffer);
|
||||
+ if (buffer == NULL) {
|
||||
+ wl_resource_post_no_memory(resource);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ buffer->handle = handle;
|
||||
+ buffer->width = width;
|
||||
+ buffer->height = height;
|
||||
+ buffer->format = format;
|
||||
+
|
||||
+ buffer->resource = wl_resource_create(resource->client, &wl_buffer_interface,
|
||||
+ 1, id);
|
||||
+ if (!buffer->resource) {
|
||||
+ wl_resource_post_no_memory(resource);
|
||||
+ vc_dispmanx_resource_delete(buffer->handle);
|
||||
+ free(buffer);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ wl_resource_set_implementation(buffer->resource,
|
||||
+ (void (**)(void)) &dispmanx_buffer_interface,
|
||||
+ buffer, destroy_buffer);
|
||||
+}
|
||||
+
|
||||
static const struct wl_dispmanx_interface dispmanx_interface = {
|
||||
dispmanx_create_buffer,
|
||||
+ dispmanx_wrap_buffer,
|
||||
};
|
||||
|
||||
static void
|
||||
diff --git a/interface/wayland/dispmanx.xml b/interface/wayland/dispmanx.xml
|
||||
index c18626d..11ed1ef 100644
|
||||
--- a/interface/wayland/dispmanx.xml
|
||||
+++ b/interface/wayland/dispmanx.xml
|
||||
@@ -118,6 +118,16 @@
|
||||
<arg name="buffer" type="object" interface="wl_buffer"/>
|
||||
<arg name="handle" type="uint"/>
|
||||
</event>
|
||||
+
|
||||
+ <request name="wrap_buffer">
|
||||
+ <arg name="id" type="new_id" interface="wl_buffer"/>
|
||||
+ <arg name="handle" type="uint"/>
|
||||
+ <arg name="width" type="int"/>
|
||||
+ <arg name="height" type="int"/>
|
||||
+ <arg name="stride" type="uint"/>
|
||||
+ <arg name="buffer_height" type="uint"/>
|
||||
+ <arg name="format" type="uint"/>
|
||||
+ </request>
|
||||
</interface>
|
||||
|
||||
</protocol>
|
|
@ -34,6 +34,7 @@ SRC_URI = "\
|
|||
file://0012-Fix-enum-conversion-warnings.patch \
|
||||
file://0013-Fix-for-framerate-with-nested-composition.patch \
|
||||
file://0014-Fix-errors-due-to-ignored-return-code.patch \
|
||||
file://0015-wl-dispmanx-buffer-wrapping.patch \
|
||||
"
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user