外部流输入的 Layer

在 Android 的 SurfaceFlinger 体系中,外部流输入的 Layer 通常通过 Sideband StreamBufferQueue 机制传递给 SurfaceFlinger,然后由 HWC(Hardware Composer)或 OpenGL ES 进行合成。


1. 什么是外部流输入的 Layer?

外部流输入的 Layer 通常指的是:

  • 硬件视频解码(MediaCodec 硬件解码的输出)

  • Camera HAL 的预览流

  • Miracast / DisplayLink 无线显示

  • 外部 HDMI / USB-C 连接的显示设备

这些 Layer 不是应用程序直接绘制的,而是由外部设备或硬件解码器提供的流


2. Sideband Stream 机制

dumpsys SurfaceFlinger 里,你看到的:

 
sideband stream=0x0

说明这个 Layer 没有使用 sideband stream,但如果有值(例如 0xb40000770a9cf000),说明它是一个外部流输入的 Layer

什么是 Sideband Stream?

  • Sideband Stream 是 Android 提供的一种 "旁路" 机制,让 HWC 直接接受外部设备或者MediaCodec 硬件解码的流,而不需要经过 CPU/GPU 处理

  • 这种机制可以极大提高视频播放性能,避免 GPU 复制大量像素数据,提高功耗效率。

SurfaceFlinger 如何处理 Sideband Stream?

  1. 应用程序或系统服务(如 MediaCodec)创建一个 Surface

  2. Surface 绑定到外部流(比如硬件解码器)

  3. SurfaceFlinger 检测到 sideband stream 并交给 HWC 进行合成

  4. HWC 直接从解码器获取数据,绕过 GPU

  5. 最终显示在屏幕上

📌 举例:MediaCodec 硬解码

 
// 创建 Surface
sp<Surface> surface = new Surface(bufferProducer);// MediaCodec 绑定 Sideband Stream
mediaCodec->setOutputSurface(surface);

当 MediaCodec 开启硬件解码时,它会把解码后的帧直接输出到 Surface,而 SurfaceFlinger 看到这个 Surface 绑定了 Sideband Stream,就不会让 OpenGL ES 处理,而是交给 HWC。


3. BufferQueue 机制

对于 大部分普通的外部流输入(比如 Camera 预览),Android 使用 BufferQueue 在应用、SurfaceFlinger 和 HWC 之间传递 buffer。

流程:

  1. Camera HAL / MediaCodec 产生 YUV/NV12/NV21 buffer

  2. Buffer 通过 BufferQueue 传递给 SurfaceFlinger

  3. SurfaceFlinger 决定是用 HWC 还是 GPU 进行合成

  4. 最终渲染到屏幕

📌 举例:Camera 预览

 
// 创建 Surface
sp<IGraphicBufferProducer> producer;
sp<IGraphicBufferConsumer> consumer;
BufferQueue::createBufferQueue(&producer, &consumer);// 绑定到 Camera HAL
camera->setPreviewTarget(producer);

这样 Camera 直接向 Surface 发送帧数据,SurfaceFlinger 会收到 buffer 并决定是否使用 HWC 直接合成。


4. 如何区分 Sideband Stream 和 BufferQueue?

dumpsys SurfaceFlinger 里,你可以检查:

  • 如果 sideband stream != 0x0,说明这个 Layer 使用的是 Sideband Stream,HWC 可能直接处理它。

  • 如果 buffer != 0x0,说明这个 Layer 使用的是 BufferQueue,SurfaceFlinger 可能需要用 GPU 合成它。

如果你 dump 的内容里:

 
sideband stream=0xb40000770a9cf000
buffer: buffer=0x0

那么这个 Layer 是 直接由 HWC 处理的,可能是 MediaCodec 硬解码输出外部 HDMI 输入

而如果:

 
sideband stream=0x0
buffer: buffer=0xb40000770a9d0000

那么这个 Layer 是 普通的 BufferQueue 方式提交给 SurfaceFlinger,可能是 Camera 预览APP 绘制的 UI 界面


5. 总结

方式适用场景SurfaceFlinger 处理方式性能
Sideband StreamMediaCodec 硬解码、HDMI 输入HWC 直接合成(不经过 OpenGL ES)✅ 高效
BufferQueueCamera 预览、普通图层可能用 GPU 处理或交给 HWC⚠️ 视情况而定

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

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

相关文章

31-体测管理系统

介绍 技术&#xff1a; 基于 B/S 架构 SpringBootMySQLvueelementui 环境&#xff1a; Idea mysql maven jdk1.8 node 用户端功能 1.系统首页展示轮播图及公告信息 2.测试项目:展示可以参加测试的项目列表 3.公告信息:公告信息列表及详情 可进行点赞和收藏 4.在线留言 5.个人…

NVR接入录像回放平台EasyCVR视频系统守护舌尖上的安全,打造“明厨亮灶”云监管平台

一、方案背景 近年来&#xff0c;餐饮行业食品安全和卫生等问题频发&#xff0c;比如后厨卫生脏乱差等&#xff0c;持续引发关注&#xff0c;这些事情导致连锁反应&#xff0c;使其收益遭受损失。同时&#xff0c;给消费者造成了心理和生理上的伤害。 加强餐饮行业的监管成为…

Python办公自动化(3)对Excel的操作

1.读取excel文件 1.安装工具 终端下载读取excel文档的工具库&#xff1a; pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd 若对版本有特殊需求&#xff1a; 删除当前版本&#xff1a;pip3 uninstall xlrd 下载所需要的版本&#xff1a;pip3 install -i htt…

go语言:开发一个最简单的用户登录界面

1.用deepseek生成前端页面&#xff1a; 1.提问&#xff1a;请你用html帮我设计一个用户登录页面&#xff0c;要求特效采用科技感的背景渲染加粒子流动&#xff0c;用css、div、span标签&#xff0c;并给出最终合并后的代码。 生成的完整代码如下&#xff1a; <!DOCTYPE h…

blender二次元上色

前&#xff1a; 后&#xff1a;&#xff08;脸自己会发光) 参考&#xff1a;05-模型导入与材质整理_哔哩哔哩_bilibili

Mysql+Demo 获取当前日期时间的方式

记录一下使用Mysql获取当前日期时间的方式 获取当前完整的日期时间有常见的四种方式&#xff0c;获取得到的默认格式(mysql的格式标准)是 %Y-%m-%d %H:%i:%s其它格式 %Y-%m-%d %H:%i:%s.%f方式一&#xff1a;now()函数 select now();mysql> select now(); -------------…

C#核心学习(六)面向对象--封装(5)静态成员及静态构造函数和静态类 以及和常量的区别

目录 一、什么是静态的&#xff1f;什么是常量&#xff1f; 1. ​静态&#xff08;Static&#xff09;​ 2. ​常量&#xff08;const&#xff09;​ 二、类中的静态成员有什么用&#xff1f; 1. ​共享数据 2. ​工具方法与全局配置 3. ​单例模式 三、静态类和静态成…

FreeRTOS源码下载分享

FreeRTOS源码下载分享 官网下载太慢了&#xff0c;分享下FreeRTOSv202411 FreeRTOSv202411.00.zip 链接: https://pan.baidu.com/s/1P4sVS5WroYEl0WTlPD7GXg 提取码: g6aq

2025年win10使用dockerdesktop安装k8s

一、写作背景 百度了一圈&#xff0c; 要么教程老&#xff0c;很多操作步骤冗余&#xff0c; 要么跑不通&#xff0c;或者提供的链接失效等情况。 二、看前须知 1、安装过程使用的AI辅助&#xff0c; 因为参考的部分博客卡柱了。 2、如果操作过程中遇到卡顿&#xff0c; …

一段式端到端自动驾驶:UniAD:Planning-oriented Autonomous Driving

论文地址:https://arxiv.org/pdf/2212.10156 代码地址:https://github.com/OpenDriveLab/UniAD 1. 摘要 现代自动驾驶系统通常由一系列按顺序执行的模块任务构成,例如感知、预测和规划。为了完成多种任务并实现高级别的智能化,当前的方法要么为每个任务部署独立模型,要…

【企业文化】CXO是什么?

李升伟 整理 CXO 是企业中高层管理职位的统称&#xff0c;其中的 “X” 是一个变量&#xff0c;代表不同的职能领域。CXO 通常指企业最高管理层中的各个负责人&#xff0c;他们共同参与企业的战略决策和运营管理。以下是一些常见的 CXO 职位及其职责&#xff1a; 1. CEO&…

python中的 f 是什么意思,f‘{username}_log_archive_{int(time.time())}.txt‘

python中的 f 是什么意思,f’{username}log_archive{int(time.time())}.txt’ 在 Python 中,f 是一种字符串前缀,用于创建格式化字符串(也称为 f-string),它是 Python 3.6 及更高版本引入的一种方便的字符串格式化方式。 基本语法和功能 当你在字符串前加上 f 前缀时,…

论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024)

转载至&#xff1a;何骏昊 开放知识图谱 原文地址&#xff1a;论文浅尝 | Interactive-KBQA&#xff1a;基于大语言模型的多轮交互KBQA&#xff08;ACL2024&#xff09; 笔记整理&#xff1a;何骏昊&#xff0c;东南大学硕士&#xff0c;研究方向为语义解析 论文链接&#xff…

MySQL注入中user-agent和cookie存在的注入

uagent注入 1、漏洞成因&#xff1a; 当Web应用程序将用户提供的User-Agent值未经处理直接拼接到SQL查询语句时&#xff0c;攻击者可以通过构造恶意User-Agent值闭合原有SQL语句并注入任意SQL代码。 2、以less-18为例&#xff1a; 相比前几关&#xff0c;第18关对于uname和pa…

【算法数学篇】试除法求约数

题解&#xff1a;试除法求约数 题目传送门 869. 试除法求约数 一、题目描述 给定 n 个正整数 aᵢ&#xff0c;对于每个整数 aᵢ&#xff0c;按照从小到大的顺序输出它的所有约数。 输入格式&#xff1a; 第一行包含整数 n接下来 n 行&#xff0c;每行包含一个整数 aᵢ 输…

《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例

《UNIX网络编程卷1&#xff1a;套接字联网API》第5章 TCP客户/服务器程序示例 5.1 本章目标与示例程序概述 本章通过一个完整的TCP回射&#xff08;Echo&#xff09;客户/服务器程序&#xff0c;深入解析TCP套接字编程的核心流程与关键问题。示例程序的功能为&#xff1a;客户…

封装可拖动弹窗(vue jquery引入到html的版本)

vue cli上简单的功能&#xff0c;在js上太难弄了&#xff0c;这个弹窗功能时常用到&#xff0c;保存起来备用吧 备注&#xff1a;deepseek这个人工智障写一堆有问题的我&#xff0c;还老服务器繁忙 效果图&#xff1a; html代码&#xff1a; <div class"modal-mask&qu…

编译器工具链是什么?

编译器工具链&#xff08;Compiler Toolchain&#xff09; 是一组用于将源代码转换为可执行程序的工具和库的集合。它涵盖了从源代码编写到程序运行的整个构建过程&#xff0c;包括编译、汇编、链接等多个阶段。以下是关于编译器工具链的详细解释&#xff1a; 一、编译器工具链…

Spring Boot 集成Redis中 RedisTemplate 及相关操作接口对比与方法说明

RedisTemplate 及相关操作接口对比与方法说明 1. RedisTemplate 核心接口与实现类 RedisTemplate 是 Spring Data Redis 的核心模板类&#xff0c;通过 opsFor... 方法返回不同数据类型的操作接口&#xff0c;每个接口对应 Redis 的一种数据结构。以下是主要接口及其实现类&am…

linux内核漏洞检测利用exp提权

案例一dirtycow&#xff08;CVE-2016-5159&#xff09; 有个前置知识就是 获取liunx的内核 hostnamectl uname -a 然后这个内核漏洞进行提权的步骤也是和手工win进行提权差不多 也是需要使用辅助工具在本地进行辅助检测 然后去nomi-sec/PoC-in-GitHub&#xff1a; &#…