XR技术知识:Android Virtual Display

发布网友 发布时间:2024-10-24 09:31

我来回答

1个回答

热心网友 时间:2024-10-25 09:16

Android系统支持三种屏幕类型:主屏、外屏和虚拟屏。其中,虚拟屏即Virtual Display,其用途广泛,如屏幕录制、无线显示等,主要功能是抓取屏幕显示的内容。

实现Virtual Display抓取屏幕内容的方式有多种,例如通过ImageReader进行读取。Android系统中的SurfaceFlinger组件支持内部屏幕、外部屏幕及虚拟屏幕在内的多个输出屏幕。虚拟屏幕可以与主屏共享层堆叠,也可拥有独立的层。内部屏幕的VSYNC信号可触发所有屏幕的合成过程。

在支持虚拟屏幕的HWC实现中,虚拟屏幕能够与OpenGL ES、HWC或GLES以及HWC进行合成。对于不支持虚拟屏幕的实现,虚拟屏幕始终使用GLES进行合成。

创建Virtual Display的示例代码如下:

createVirtualDisplay(name, width, height, densityDpi, surface, flags);



createVirtualDisplay(name, width, height, densityDpi, surface, flags, callback, handler);

其中,参数包括:name(虚拟显示器的名称,非空);width(虚拟显示器的宽度,像素单位,大于0);height(虚拟显示器的高度,像素单位,大于0);densityDpi(以dpi为单位的虚拟显示器密度,大于0);surface(虚拟显示器内容渲染的目标表面,初始无则为null);flags(虚拟显示标志的组合,如公共、展示、安全、仅自定义内容或自动镜像);callback(状态改变时调用的回调);handler(用于调用侦听器的处理程序,如果在调用线程的Looper上调用侦听器,则为null)。

创建后,虚拟显示的内容将被渲染到由应用程序提供的Surface上。虚拟显示的行为受提供的标志控制,通常默认为私有、非展示和非安全。某些标志可能需要特定权限。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com