summaryrefslogtreecommitdiffstats
path: root/protocol
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2020-09-15 18:12:24 +0300
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2020-09-30 13:43:12 +0000
commit991714fc7f92aea3d07c7225247a821e3461027e (patch)
tree9054e78451203614aaf190c1a9a30e3d2bc49be1 /protocol
parent1f888f2050ac50ec8c1750ff4f0e2c485936d7ed (diff)
screenshooter: Add agl-screenshooter protocol
Just like weston, we add a private protocol. Underneath we make use of the weston renderer to get a hold of the pixels and transfer them to a user-supplied buffer. This only brings up the server side implementation of the protocol. Bug-AGL: SPEC-3580 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I02a07ad5eb492ef2ecad74efb34d1453ebcbedc0
Diffstat (limited to 'protocol')
-rw-r--r--protocol/agl-screenshooter.xml84
1 files changed, 84 insertions, 0 deletions
diff --git a/protocol/agl-screenshooter.xml b/protocol/agl-screenshooter.xml
new file mode 100644
index 0000000..6ed1457
--- /dev/null
+++ b/protocol/agl-screenshooter.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="agl_screenshooter">
+
+ <copyright>
+ Copyright © 2020 Collabora. Ltd,
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+ </copyright>
+
+ <interface name="agl_screenshooter" version="1">
+ <description summary="agl screenshooter">
+ agl compositor extension that performs a screenshot of the output, which
+ is represented by a 'wl_output' object.
+
+ A client would call 'take_shot' request and wait until the compositor
+ finishes to write the data to a wayland buffer, moment in which signals
+ back the client with the help of the 'done' event. Clients should wait
+ until the 'done' event is received, if they want to take another
+ screenshot, or take another screnshot of a different output.
+
+ The client must provide a wl_shm-based wl_buffer of the correct size when
+ taking a shot. The compositor will write the shot into the wl_buffer and then
+ send the 'done' event that signals completion of writing the data.
+
+ Once the compositor has finished to transfer the data back into the supplied
+ wayland buffer, the client should be able to transfer it to a popular
+ file format on the disk.
+ </description>
+
+ <enum name="done_status">
+ <entry name="success" value="0"/>
+ <entry name="no_memory" value="1"/>
+ <entry name="bad_buffer" value="2"/>
+ </enum>
+
+ <request name="take_shot">
+ <description summary="performs a screenshot">
+ Takes a screenshot of the wayland output represented by a 'wl_output'
+ object. Clients should first retrieve it using global registry, as well
+ as the 'wl_shm' object in order to create a wayland buffer type of
+ object ('wl_buffer').
+
+ Clients can derive the stride and size from the 'wl_output' object, and
+ later on use those when creating shm-based 'wl_buffer', as well as supplying
+ the pixel format.
+ </description>
+
+ <arg name="output" type="object" interface="wl_output"/>
+ <arg name="buffer" type="object" interface="wl_buffer"/>
+ </request>
+
+ <event name="done">
+ <description summary="sent when 'take_shot' finished">
+ Even sent back to nofify client 'take_shot' request has completed.
+ </description>
+ <arg name="status" type="uint" enum="done_status" />
+ </event>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy main object">
+ Destroys the 'weston_screenshooter' interface.
+ </description>
+ </request>
+
+ </interface>
+
+</protocol>