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

news2025/2/25 17:44:27

一,系统显示方向

1. 概述

Android的旋转显示,主要运用于广告机。Android的旋转,包括图形UI的旋转、鼠标和遥控器的旋转及媒体旋转。
下图为竖屏UI的绘制坐标系和显示坐标系。
在这里插入图片描述

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原生截屏流程仅能获取到图形层数据,也就是说播放视频时进行截屏无法获取到视频数据,没有做到“所见即所得”。

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

在这里插入图片描述

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正常截取屏幕上显示的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“安全边际大师”卡拉曼2023年珍贵访谈:如果视市场为狂躁的交易对手,那你就能利用反复无常来获利

“对于那些被广泛跟踪的股票,如果你不比其他人更聪明,且你的观点与别人无异,你是赚不到钱的。” “足够大的折价也许可以抵消你对它缺乏最深刻的认识。” “拓宽投资视野不仅诱人,也可能价值连城。” “如果向市场寻求答案&…

JAVA面试八股文之数据库

MySQL面试题 MySQL 存储引擎架构了解吗?CHAR 和 VARCHAR 的区别是什么?索引是越多越好嘛?MySQL数据库中空值(null)和空字符串()的区别?SQL 中 on 条件与 where 条件的区别&#xff1…

Java创建对象内存分析-JVM

Java 创建对象的内存分析-JVM 复习的时候看到这篇,看完自己背着画了一下。 https://blog.csdn.net/qq_60264381/article/details/119276824

进军俄罗斯市场,一站式Yandex广告开户与代运营服务

俄罗斯作为欧洲最大的经济体之一,拥有庞大的消费者群体和独特的市场环境,成为了众多国际商家关注的焦点。要有效地触达这片潜力无限的市场,精准且高效的网络营销策略至关重要。利用Yandex——俄罗斯最大的搜索引擎与数字广告平台,…

【LAMMPS学习】八、基础知识(1.3)从一个输入脚本运行多个模拟

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

ELK——日志处理界的瑞士军刀

目录 引言 一、ELK简介 (一)基本概述 1.Elasticsearch服务 2.Logstash服务 2.2 logstash关键组件 2.2 logstash数据流向 3.Kibana服务 (二)ELK工作流程 (三)ELK的应用价值 二、部署搭建ELK &…

如何使用Android手机通过JuiceSSH远程访问本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Cuda编程-NPP库

Cuda编程先前有过研究,现在记录下Cuda相关的库使用 目录 0.参考文档1.NPP简介1.1 头文件1.2 库文件1.3 编译时链接关系1.4 NPP函数的命名方式1.5 General Conventions 一般约定1.6 Image Processing Conventions 图像处理约定 2.举例:NPP实现YUV转BGR2.1…

从 auto 到 Lambda:全面解析 C++11 核心新特性

在介绍 C11 之前,我们先回顾一下 C98和C03。C98 作为 C 的第一个国际标准,奠定了这门语言的基础结构和核心特性,比如类、继承、模板、异常处理等。这些特性使得 C 成为一门强大的、面向对象的编程语言,广泛应用于系统/应用软件、游…

vue3中ElMessage如何动态更改提示消息

1.需求 要求ElMessage的提示消息做成倒计时的效果 2.效果 3.实现代码 function shower(){const message ElMessage({type: warning, // 提示类型dangerouslyUseHTMLString: true, // 使用 HTML 片段作为正文内容message: <div id"kanno"><span>不敢吃…

js 数组 按列循环二维数组

期待效果&#xff1a; 核心代码&#xff1a; //js function handle(array) {var result [];for (let i 0; i < array[0].length; i) {var item []; for (let j 0; j < array.length; j) {item.push(array[j][i])} result.push(item);} return result; } 运行代码&a…

数据库体系概述:详述其基本概念、多样分类、关键作用及核心特性

数据库是一个用于存储、管理和检索数据的系统&#xff0c;它按照特定的数据结构和模式组织数据&#xff0c;确保数据的一致性、安全性和高效访问。 数据库&#xff08;Database, DB&#xff09;是一个长期存储在计算机内&#xff0c;用来组织、存储和管理大量数据的集合。数据…

【LAMMPS学习】八、基础知识(1.8)键的断裂

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

备战蓝桥杯---DP刷题3

1.博弈区间DP&#xff1a; 当游戏轮到A时 &#xff0c;它可以选左右两点&#xff0c;而他的目标就是让A-B最大&#xff0c;此时因为对手也是最优策略&#xff0c;因此我们要在最坏的情况下拓展&#xff0c;即应该选(L,R-1)(L1,R)上的max,答案为其相反数端点值&#xff0c;然后对…

计算机视觉 | 基于二值图像数字矩阵的距离变换算法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本实验基于 OpenCV 实现了二值图像数字矩阵的距离变换算法。首先生成一个 480x480 的黑色背景图像&#xff08;定义黑色为0&#xff0c;白色为1&#xff09;&#xff0c;在其中随机选择了三个白色像素点作为距离变换的原点&…

微服务学习2

目录 一.网关路由 1.1.认识网关 1.2网关快速入门 1.2.1.创建项目 1.2.2.引入依赖 1.2.3.启动类 1.2.4.配置路由 1.3.路由过滤 二.网关登录校验 2.1网关请求处理流程 2.2网关过滤器 2.2.2网关过滤器 2.3自定义GlobalFilter 2.4.登录校验 2.4.1.JWT工具 2.4.2.登…

中文自然语言处理流程

这是博主自己根据网上资料进行整理的&#xff0c;希望对你有所帮助~

openlayer实现webgis端绘制制图及编辑

在WebGIS端制图是指通过Web浏览器界面实现地理信息数据的可视化、编辑、分析以及地图产品的制作。这一过程通常涉及以下几个关键环节&#xff1a; **1. 前端技术栈&#xff1a; •HTML/CSS/JavaScript&#xff1a;作为Web开发的基础&#xff0c;用于构建用户界面布局、样式设…

【线段树】2213. 由单个字符重复的最长子字符串

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

Compose UI 之 Card 卡片组件

Card Card 是用于显示带有圆角和可选阴影的矩形内容容器。它通常用于构建用户界面,并可以包含标题、文本、图像、按钮等元素,表示界面上的可交互元素,我们称它是 “卡片”。 Card 使用的一些经典的场景: 列表数据,例如 新闻列表,产品列表等。信息提示框,使用 Card 组件…