“ 亏功一篑,未成丘山。凿井九阶,不次水泽。行百里者半九十,小狐汔济濡其尾。故曰时乎,时不再来。终终始始,是谓君子。”

01


前言

随着Android智能驾舱系统的普及各种信息交互、影音娱乐场景应用的不断创新, 需要Android Framework开发人员更深入地了解多屏同显/异显的基本原理。从这篇文章开始,我们将从简单的C++多屏显示的示例开始,同大家从浅入深、从表入里,初步剖析安卓多屏显示的基本原理。

在前期的文章中,我们曾对安卓多屏显示做过一些探索和准备。

如何模拟多屏显示以方便开发测试,给出了两种方式:

1. 使用Emulator来创建虚拟屏幕

Android Emulator - 模拟器多屏输出

2. 模拟多个物理显示屏

Android Graphics 显示系统 - 如何模拟多(物理)显示屏?

也曾写过简单的demo来演示多屏互动的效果

1. 演示如何把画面显示到指定的屏幕上

Android 多屏显示 -- 从一个简单的Demo开始

2. 复杂的多屏互动的demo,多指触控下移动画面

Android Graphics 显示系统 - 多屏互动演示

早前写过的demo要么过于简单,无法完整展现关键功能;要么过于复杂,无法聚焦Graphics多屏显示核心原理。为此,特意写作了C++版本的多屏同显/异显的演示程序,直接调用Surface/BufferQueue/SurfaceComposer的C++ APIs来实现多屏互动的效果。这样我们可以抛开复杂的WMS、AMS等模块复杂的逻辑,聚焦底层多屏显示的基本原理。

02


多屏互动Demo效果展示

C++版本的多屏互动程序提供两个版本:标准版和升级版。

标准版多屏互动Demo

标准版Demo是在早前Surface绘图示例Demo的基础上加上了多屏显示的功能,在交替显示R/G/B纯色图像的同时可以接收实时输入的命令进行多屏互动。

早前Surface绘图示例Demo可以参考:

Android Graphics 显示系统 - Surface绘图示例(四)

Android Graphics 显示系统 - Surface绘图示例(五)

多屏同显

多屏异显(画面拼接)

升级版多屏互动Demo

升级版Demo是在标准版程序基础上加上了视频播放功能,场景展示上更加生动

多屏同显

多屏异显(画面拼接)

03


多屏系列文章基本内容

Android Graphics多屏同显异显系列文章是Graphics系列文章的延续与扩展,我们将开始讲解多屏显示相关的基本原理和常用功能的接口使用。

该系列文章会从上面提到的两个多屏互动的Demo开始,分享、分析、讲解Demo程序设计的思路、原理。从看得到的API入手,探讨相关功能实现所依赖的接口功能逻辑,研究解析SurfaceFlinger在多屏幕下对Layer的处理逻辑,探究HWC在多屏下的行为等。

同时,结合开发过程中遇到的问题及现象,讲解如何通过dumpsys SurfaceFlinger来查看layer的信息进行debug。

阅读原文:

Android Graphics 多屏同显/异显 - 开篇

欢迎关注公众号,阅读系列文章,获取源码!

Android Graphics 多屏同显/异显的更多相关文章

  1. RK3288 双屏异显,两屏默认方向不一致

    CPU:RK3288 系统:Android 5.1 RK3288 支持双屏异显,一般都会同方向显示,如果遇到两个 lcd 的默认方向不一致,只需修改下面参数即可. 例如:主屏为mipi接口,分辨率为 ...

  2. RK3288 6.0 双屏异显,横屏+竖屏【转】

    本文转载自:http://blog.csdn.net/clx44551/article/details/78215730?locationNum=8&fps=1 RK3288 6.0 双屏异显 ...

  3. iTOP-iMX6开发板Android系统下LVDS和HDMI双屏异显方法

    迅为iMX6 开发板 android 系统下 LVDS 和 HDMI 双屏异显的使用过程. 注意,iTOP-iMX6 开发板的 android 系统想要实现对 LVDS 和 HDMI 双屏异显功能的支 ...

  4. RK3288 增加双屏异显 eDP+LVDS

    CPU:RK3288 系统:Android 5.1 下面是官方文档中的信息. 1.rk3288 支持的显示接口可以任意组合. 2.双屏异显时,一个显示接口当主屏,另一个当副屏:主副屏由板级 dts 文 ...

  5. Rk3288 双屏异显单触摸

    系统版本:RK3288 android 5.1 设备同时有两个lcd,主屏是mipi接口,带有触摸屏,触摸屏是usb接口,副屏是hdmi接口,没有触摸屏,正常情况下,两个lcd显示相同内容,触摸屏一切 ...

  6. RK3288 双屏异显时,触摸屏(USB接口)无反应

    系统版本:RK3288 android 5.1 设备同时有两个lcd,主屏是mipi接口,带有触摸屏,触摸屏是usb接口,副屏是hdmi接口,没有触摸屏,正常情况下,两个lcd显示相同内容,触摸屏一切 ...

  7. 【ARM开发板】迅为IMX6开发板QT下LVDS和HDMI双屏异显

    本文转自迅为论坛:http://www.topeetboard.com 平台:迅为-IMX6开发板 首先开发板分别连接9.7寸屏和HDMI显示器,然后使用MfgTool工具烧写QT系统,然后拨码开关设 ...

  8. [Android6.0][RK3399] 双屏异显代码实现流程分析(一)【转】

    本文转载自:http://blog.csdn.net/dearsq/article/details/55049182 Platform: RK3399 OS: Android 6.0 Version: ...

  9. iTOP-4418/6818开发板支持双屏异显,双屏同显

    iTOP-4418/6818开发板平台安卓系统下支持双屏异显,双屏同显,客户可按照不同用途,分别播放适合屏幕显示方式的内容 ,如HDMI屏幕和LCD屏幕显示不同内容, 一个屏幕播放广告,另一个屏幕运行 ...

  10. 【转】android Graphics(四):canvas变换与操作

    android Graphics(四):canvas变换与操作 分类: 5.andriod开发2014-09-05 15:05 5877人阅读 评论(18) 收藏 举报   目录(?)[+]   前言 ...

随机推荐

  1. NC19995 [HAOI2015]树上操作

    题目链接 题目 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权. 然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子 ...

  2. 存储过程分页以及参数拼接sql语句、C#调用存储过程

    1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入 System.Data.SqlClient.SqlParameter[] parameters = { new Sy ...

  3. 【Unity3D】协同程序

    1 简介 ​ 1)协程概念 ​ 协同程序(Coroutine)简称协程,是伴随主线程一起运行的程序片段,是一个能够暂停执行的函数,用于解决程序并行问题.协程是 C# 中的概念,由于 Unity3D 的 ...

  4. keras建模的3种方式——序列模型、函数模型、子类模型

    1 前言 keras是Google公司于2016年发布的以tensorflow为后端的用于深度学习网络训练的高阶API,因接口设计非常人性化,深受程序员的喜爱. keras建模有3种实现方式--序列模 ...

  5. Python之记录日志

    日志级别 DEBUG: 最低级别,用于调试小细节. INFO:记录程序中的一般事件或确认一切工作正常. WARNING:表示可能出现的问题,但不会终止程序工作. ERROR:用于记录错误,会导致程序失 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (200)-- 算法导论15.2 4题

    四.用go语言,对输入链长度为 n 的矩阵链乘法问题,描述其子问题图:它包含多少个顶点?包含多少条边?这些边分别连接哪些顶点? 文心一言: 矩阵链乘法问题是一个经典的动态规划问题,其中给定一个矩阵链, ...

  7. AI数字人SadTalker实战

    1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色,许多企业和个人正积极利用数字技术来打造属于自己的财富.有没有一种简单而免费的方式来创建自己的数字人呢?本篇博客笔者将为大家介绍如何搭建属于自 ...

  8. pytho代码分析示例

    a = 5 b = 6 c = 10 for i in range(n): for j in range(n): x = i * j y = j * j z = i * j for k in rang ...

  9. portainer docker可视化工具

    下载可视化工具 docker pull portainer/portainer 启动portainer --restart=always 只要挂掉了 就自动重启 docker run -d -p 80 ...

  10. 【Java复健指南11】OOP高级02-代码块、单例设计和final关键字

    代码块 定义 代码化块又称为初始化块,属于类中的成员[即是类的一部分]. 类似于方法,将逻辑语句封装在方法体中,通过{}包围起来. 但和方法不同,没有方法名,没有返回,没有参数,只有方法体, 而且不用 ...