转 http://hi.baidu.com/leowenj/blog/item/ba4c5d6378a5da48eaf8f86a.html
Android display架构分析(七-2)
4)、
setClientState
处理上层的各个命令,并根据
flag
设置
event
通知
Threadloop
进行处理
status_t SurfaceFlinger::setClientState(
ClientID cid,
int32_t count,
const layer_state_t* states)
{
Mutex::Autolock _l(mStateLock);
uint32_t flags = 0;
cid <<= 16;
for (int i=0 ; i<count ; i++) //
检测所有存在
layer
的状态标志
{
const layer_state_t& s = states[i];
LayerBaseClient* layer = getLayerUser_l(s.surface | cid);
if (layer)
{
const uint32_t what = s.what;
//
检测应用层是否设置各个标志,如果有则通知底层完成对应操作,并通知
ThreadLoop
做对应的处理
if (what & eDestroyed) //
删除该层
Layer
{
if (removeLayer_l(layer) == NO_ERROR)
{
flags |= eTransactionNeeded;
continue;
}
}
if (what & ePositionChanged) //
显示位置变化
{
if (layer->setPosition(s.x, s.y))
flags |= eTraversalNeeded;
}
if (what & eLayerChanged) //Layer
改变
{
if (layer->setLayer(s.z))
{
mCurrentState.layersSortedByZ.reorder(
layer, &Layer::compareCurrentStateZ);
flags |= eTransactionNeeded|eTraversalNeeded;
}
}
if (what & eSizeChanged)
{
if (layer->setSize(s.w, s.h))//
设置宽高变化
flags |= eTraversalNeeded;
}
if (what & eAlphaChanged) {//
设置
Alpha
效果
if (layer->setAlpha(uint8_t(255.0f*s.alpha+0.5f)))
flags |= eTraversalNeeded;
}
if (what & eMatrixChanged) {//
矩阵参数变化
if (layer->setMatrix(s.matrix))
flags |= eTraversalNeeded;
}
if (what & eTransparentRegionChanged) {//
显示区域变化
if (layer->setTransparentRegionHint(s.transparentRegion))
flags |= eTraversalNeeded;
}
if (what & eVisibilityChanged) {//
是否显示
if (layer->setFlags(s.flags, s.mask))
flags |= eTraversalNeeded;
}
}
}
if (flags)
{
setTransactionFlags(flags);//
通过
signal
通知
ThreadLoop
}
return NO_ERROR;
}
5
)、
composeSurfaces
该接口在
Threadloop
中被调用,负责将所有存在的
surface
进行合并,
OpenGl
模块负责这个部分。
6
)、
postFramebuffer
该接口在
Threadloop
中被调用,负责将合成好的数据(存于
back buffer
中)推入在
front buffer
中,然后调用
HAL
接口命令底层显示。
7
)、
从
3
中可知,上层每创建一个
surface
的时候,底层都会同时创建一个
layer
,下面看一下
surface
及
layer
的相关属性。
Note
:
code
中相关结构体太大,就不全部罗列出来了
A
、
Surface
相关属性(详细参考文件
surface.h
)
a1
:
SurfaceID
:
根据此
ID
把相关
surface
和
layer
对应起来
a2
:
SurfaceInfo
包括宽高格式等信息
a3
:
2
个
buffer
指针、
buffer
索引等信息
B
、
Layer
相关属性(详细参考文件
layer.h/layerbase.h/layerbitmap.h
)
包括
Layer
的
ID
、宽高、位置、
layer
、
alpha
指、前后
buffer
地址及索引、
layer
的状态信息(如
eFlipRequested
、
eBusy
、
eLocked
等)
分享到:
相关推荐
高通7系列的硬件架构是Android Display架构的重要组成部分,主要包括以下几个部分: 1. **MDP (Mobile Display Processor)** - MDP是高通MSM7200A内部的一个模块,主要负责显示数据的转换和部分图像处理功能,例如...
### Android Display 框架分析 #### 一、硬件架构分析 ##### 高通7系列硬件架构概述 根据所提供的信息,我们重点分析高通7系列的Display硬件架构,特别是MSM7200A平台。 - **A、MDP (Mobile Digital Processor)*...
《Android显示框架详细分析》 Android显示框架是一个复杂的系统,涉及到硬件架构、软件架构和流程设计等多个方面。本文将深入探讨这些关键知识点,以便更好地理解Android设备如何呈现图像和视频内容。 首先,让...
本文将从架构图、代码分析和优化建议三个方面对Android WiFi Display功能进行深入分析和讨论。 一、架构图 Android WiFi Display功能的架构图分为两部分,一部分为控制部分,另一部分为数据部分。控制部分通过TCP...
### Android Wifi Display (Miracast) 核心分析 #### 一、概述 在深入探讨Android平台上关于**Wifi Display**(通常称为Miracast)的相关技术之前,我们需要明确几个概念。**Wifi Display**是一种无线显示标准,...
在Android系统中,"Settings"模块是用户与设备设置交互的核心部分,而"Display settings"则是其中至关重要的一环,它涵盖了屏幕亮度、显示分辨率、屏幕方向等与视觉体验相关的选项。"0001-Android-Settings-display...
### Windriver针对Android多媒体架构分析 #### Android多媒体架构概述 Windriver在2009年第一次Android技术大会上针对Android系统的多媒体架构进行了深入的探讨与分析。Android作为一个开放且灵活的操作系统,其...
基于Android平台的WiFi-display sink端的设计与实现 基于Android平台的WiFi-display sink端的设计与实现是指基于Android 4.2的WiFi-direct功能实现WiFi display的sink端系统。该系统通过与source端进行capability ...
本文将详细探讨全志H5在Android/Linux环境下如何实现display驱动。 一、全志H5显示硬件架构 全志H5集成了GPU(图形处理器),如Mali400或Mali-G31,用于处理复杂的2D和3D图形任务。此外,它还包含LCD控制器,用于与...
接下来,我们将深入探讨高通-android__MDDI-LCD框架的软件架构,特别是Android display软件架构的组成。 ##### 用户空间应用程序 (User Space Applications) 这部分包括Android应用程序及其框架和系统运行库,其中...
### Android显示框架分析 #### 一、硬件架构分析:高通7系列 高通7系列的显示硬件架构主要包括以下几个关键组件: 1. **MDP (Mobile Display Processor)**:这是高通MSM7200A内部的一个核心模块,主要职责在于...
### Android下WiFiDisplay功能探究 #### 一、WiFiDisplay简介 ##### 1.1 WiFiDisplay概述 WiFiDisplay(WFD)是由WiFi联盟基于现有技术发展而来的一种新技术,旨在提高视频和音频传输的速度与效率。为了确保设备...
在深入探讨Android原生设置(Setting)的分析之前,我们需要先理解Android系统的基本结构。Android是一个基于Linux内核的操作系统,其应用程序主要由Java编写,使用Android SDK进行开发。原生设置应用(Settings)是...
### Android的系统架构详解 #### 一、应用层 (Applications) **应用层**是指由Java编写的、运行在Dalvik虚拟机上的程序。这一层主要包括了预装的应用程序,例如联系人管理、邮件客户端等。此外,开发者也可以利用...
### Android核心分析——设计意图与方法论探讨 #### 一、设计意图的探索 在深入研究Android之前,首要任务是理解其背后的设计理念。对于一个跨平台开发者而言,熟悉并掌握Android的核心概念至关重要。Android引入...
标题和描述均指向了一个深入分析Android原生设置(Setting)应用内部结构和技术细节的文档——“android原生setting分析(修改版).doc”。此文档详细地解析了Android系统的设置模块是如何构建、数据如何存储和读取,...
【标题】"0001-YYT-MIPI7LCD-tinker-2s-android11.zip" 提供的是一个针对TinkerBoard2主板的Android 11系统更新,主要目的是配置并支持YYT-MIPI7LCD显示屏以及相应的触摸驱动。这个压缩包包含了必要的补丁和配置文件...
### Android的核心分析 #### 分析方法论探讨之设计意图 在深入探讨Android系统之前,我们首先需要明确一点:为何要研究Android?对于许多开发者来说,Android不仅是一个极具吸引力的开发平台,更是一种挑战,一种...
### Android主要机制深入分析 #### 一、设计方法论探讨之设计意图 在探究Android复杂的内部运作机制之前,我们首先要明确研究的方向与目的。对于一个跨平台开发者来说,理解Android的核心在于把握其设计理念与实现...
2. **ViewUtils**:实现了Android UI组件的注解注入,通过@ViewById注解,可以快速找到并操作Activity或Fragment中的UI元素,简化了代码编写。 3. **BitmapUtils**:图片处理模块,支持图片缓存、图片压缩、圆角...