HiSilicon352 android9.0 系统显示方向旋转与截屏问题分析

04-11 1523阅读

一,系统显示方向

1. 概述

Android的旋转显示,主要运用于广告机。Android的旋转,包括图形UI的旋转、鼠标和遥控器的旋转及媒体旋转。

下图为竖屏UI的绘制坐标系和显示坐标系。

HiSilicon352 android9.0 系统显示方向旋转与截屏问题分析

2. 功能说明

方案依据Android原生的旋转原理设计,在Android启动时,根据设置旋转配置项,来设置旋转的方向和宽高比信息,Android原生旋转系统根据这两个值,更新对应的display等信息,达到旋转的目的。

App在竖屏绘制时,使用竖屏的layout和资源,按上图的左边的坐标系;显示时,根据更新后的旋转方向和display等信息计算出Device的tr变换矩阵,根据变换矩阵进行坐标系变换,将多层layer叠加到屏幕上显示。

3. 属性设置

属性配置项,如下:

setprop persist.prop.screenorientation landscape ---------0度
setprop persist.prop.screenorientation portrait ---------90度
setprop persist.prop.screenorientation seascape ---------180度
setprop persist.prop.screenorientation upsideDown --------270度

在串口设置后, 切换UI界面(比如退出当前Activity或者进入其它Activity)后会立即生效,并且在重启依然生效,版本默认为0度横屏。

4. 调试

  1. 配置项的设置问题

    在串口配置旋转项后,需要sync一下,以免配置未保存到单板。

  2. 如何设置系统默认方向

源码路径:device/hisilicon/Hi3751V350/device.mk
# rotation, default landscape
# default rotation , 0=landscape, 90=portrait, 180=seascape, 270=upsideDown
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
    persist.prop.screenorientation=landscape

二,截屏

1. 概述

Android上层APP通过SurfaceControl类的screenshot接口可以获取导致当前屏幕上显示内容的bitmap数据,即截屏功能。Android原生已有该接口,但是当前的海思平台上私有的视频输出到视频层、图形输出到图形层架构,Android原生截屏流程仅能获取到图形层数据,也就是说播放视频时进行截屏无法获取到视频数据,没有做到“所见即所得”。

针对上述问题,海思方案做了不同的实现支持视频数据截屏,即“所见即所得”,称之为私有截屏方案。

HiSilicon352 android9.0 系统显示方向旋转与截屏问题分析

2. 功能说明

私有截屏方案功能如下:
1. 屏幕上全部为图形层信息时,可以正确截取屏幕信息
2. 屏幕上全部为视频层信息时,可以正确截取屏幕信息
3. 屏幕上为图形和视频混合信息时,可以正确截取屏幕信息
4. 屏幕上为多路视频PIP混合信息时,可以正确截取屏幕信息

注:

1> 可通过prop配置来切换Android原生方案与私有截屏方案。

2> 私有截屏不支持Z序截屏、图形视频混合信息时的纯视频层截屏。

3> 私有截屏支持debug信息打印可以获取外部接口返回值,入参等信息。

3. 属性设置

当视频播放时,Android自动切换到私有截屏通路进行截屏,而没有视频播放时,可以通过属性persist.sys.screencap.mode进行控制截屏的行为,该属性值默认是1,表示走Android原生的纯图形层截屏。persist.sys.screencap.mode为2时表示走私有截屏。

setprop persist.sys.screencap.mode 1 ----------Android原生的纯图形层截屏
setprop persist.sys.screencap.mode 2 ----------私有截屏

4. 调试

  1. 配置项设置问题。

    在串口执行setprop persist.sys.screencap.mode 2私有截屏即刻生效。

  2. 如何默认设置为私有截屏。
源码路径:device/hisilicon/Hi3751V350/device.mk
# 1 = Android原生的纯图形层截屏, 2 = 私有截屏
PRODUCT_PROPERTY_OVERRIDES += persist.sys.screencap.mode=2
  1. 在persit文件中直接在/data/property中增加。

    支持screencap调试命令,配置私有截屏后可以通过screencap正常截取屏幕上显示的内容。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]