Weston output capture
暴露 Weston 屏幕截图功能的全局接口,用于单次拍摄。
这是一个特权接口。
create(output: object<wl_output>, source: uint<weston_capture_v1.source>, capture_source_new_id: new_id<weston_capture_source_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| output | object<wl_output> | output to shoot |
| source | uint<weston_capture_v1.source> | pixel source |
| capture_source_new_id | new_id<weston_capture_source_v1> | new object |
创建一个对应于给定 wl_output 的 weston_capture_source_v1 对象。 该对象提供用于分配合适缓冲区的信息,并暴露捕获功能。
该对象将使用给定的像素源进行图像捕获。 如果该源不可用,所有捕获尝试将优雅地失败。
'writeback' 源将使用 DRM KMS 的硬件回写功能进行捕获。 这可能允许硬件平面在捕获期间继续使用。此源通常不可用。
'framebuffer' 源复制最终帧缓冲区的内容。 使用此源会临时禁用所有硬件平面和 DRM KMS 颜色管线特性的使用。 此源始终可用。
'full_framebuffer' 与 'framebuffer' 相同,但会包含帧缓冲区可能包含的任何边框(装饰)。
'blending' 源复制中间混合缓冲区的内容,该缓冲区应为线性光格式。 使用此源会临时禁用所有硬件平面的使用。 此源仅在存在混合缓冲区时可用,例如当输出上启用了颜色管理时。
如果像素源不是定义的枚举值之一,将引发 'invalid_source' 协议错误。
source { writeback, framebuffer, full_framebuffer, blending }
参数 | 值 | 描述 |
|---|---|---|
| writeback | 0 | 使用硬件回写 |
| framebuffer | 1 | 从帧缓冲区复制,桌面区域 |
| full_framebuffer | 2 | 复制整个帧缓冲区,包括边框 |
| blending | 3 | 从混合空间复制 |
表示单个源的图像捕获功能的对象。 创建时,当且仅当输出仍然存在且指定的像素源在输出上可用时,才会发送初始事件。
destroy()
如果此对象上正在进行捕获,将取消捕获并使图像缓冲区内容变为未定义。
此对象将被销毁。
如果给定的 wl_buffer 兼容,关联的输出将在此请求被处理后的某个时间进行重绘, 该重绘将执行捕获。 捕获完成后,将发出 'complete' 事件。
如果给定的 wl_buffer 不兼容,将发出 'retry' 事件。
如果捕获失败或缓冲区类型不受支持,将发出 'failed' 事件。
客户端必须等待这些事件之一后才能在此对象上再次尝试 'capture'。 如果在任何事件之前再次请求 'capture',将引发 'sequence' 协议错误。
wl_buffer 对象不会因此请求发出 wl_buffer.release 事件。
wl_buffer 必须引用合成器可写的存储。 如果缓冲区存储不可写,将引发 bad_buffer 或 wl_shm.error.invalid_fd 协议错误。
如果 wl_buffer 在任何事件发出之前被销毁,缓冲区内容变为未定义。
合成器必须实现对 wl_buffer 缓冲区的捕获。 其他缓冲区类型可能支持也可能不支持。
format(drm_format: uint)
参数 | 类型 | 描述 |
|---|---|---|
| drm_format | uint | DRM pixel format code |
此事件传递可用于图像缓冲区的像素格式。 任何不具有由此事件之一传递的像素格式的缓冲区都是不兼容的。
格式修饰符为 linear (DRM_FORMAT_MOD_LINEAR)。
这是一个初始事件,在支持的格式发生变化时发送。
此事件可能会发送多次,后跟 format_done 事件。
此事件传递图像缓冲区应使用的尺寸。 任何不具有此尺寸的缓冲区都是不兼容的。
对于 wl_shm,缓冲区的行对齐必须为 4 字节,且不得包含额外的行填充。 否则缓冲区不受支持。
这是一个初始事件,在所需尺寸发生变化时发送。
complete()
当 'capture' 请求成功完成时,作为响应发出此事件。
如果拍摄中使用的缓冲区是 dmabuf,客户端还需要等待其上的任何隐式围栏后再访问内容。
retry()
当 'capture' 请求由于不兼容的缓冲区而无法成功时,作为响应发出此事件。 客户端已接收到传递新缓冲区参数的事件。客户端应使用新的缓冲区参数重试捕获。
failed(msg: string)
参数 | 类型 | 描述 |
|---|---|---|
| msg | string允许为空 | human-readable hint |
当 'capture' 请求因不兼容缓冲区以外的原因失败时,作为响应发出此事件。 原因可能包括:不受支持的缓冲区类型、不受支持的缓冲区步长、不受支持的图像源、 图像源(输出)已被移除,或合成器策略拒绝了捕获。
字符串 'msg' 可能包含人类可读的失败说明以辅助调试。
error { bad_buffer, sequence }
参数 | 值 | 描述 |
|---|---|---|
| bad_buffer | 0 | wl_buffer 不可写 |
| sequence | 1 | 在上一次捕获完成之前再次请求了捕获 |
合成器支持
Cage | COSMIC | GameScope | Hyprland | Jay | KWin | Labwc | Louvre | Mir | Muffin | Mutter | niri | phoc | river | Sway | Treeland | Wayfire | Weston | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| weston_capture_v1 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | 1 |
Copyright
Copyright 2020, 2022 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.