惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
月光博客
月光博客
美团技术团队
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
爱范儿
爱范儿
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
I
InfoQ
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
F
Fortinet All Blogs

博客园 - yooooooo

cache 的 refill,wr,rd的区别 I3C协议Single Data Rate(SDR)模式研读(一):总线配置Bus Configuration I3C总线技术概述(二) I3C 总线技术概述(一) PCIe扫盲——物理层逻辑部分基础(三) PCIe扫盲——Ack Nak 机制详解(二) PCIE 的 per-vector masking ftraceoption irq-info MPAM BE/ FE 的区别及功能 IPI与CPU唤醒机制 【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】 ARM CoreLink 系列 4.3 -- NI-700 Component and interface identifiers ARM CCI-500 与 NI0700 的关系. ARM NIC-400 与 NI-700 的区别 claude code命令使用 【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】 trace32 .cmm脚本和.t32文件的区别 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】 PCIe 总线的 ASPM 和 链路状态机制总结 fw_devlink 功能 I3C协议详解 UART 协议规范 BPF 调度器 sched_ext 实现机制、调度流程及样例 【UEFI基础】Protocol介绍 【UEFI实战】在库中使用全局变量 sched feature TTWU_QUEUE 【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】 edk2构建编译流程 UEFI:FDF文件及FD、FV、FFS
Android Camera性能分析 录像Buffer Path详解
yooooooo · 2025-12-06 · via 博客园 - yooooooo

本讲是Android Camera性能分析专题的第21讲 ,我们介绍录像Buffer Path详解,包括如下内容:

  1. Android Codec2 简介
  2. Video Codec + MediaRecorder.getSurface 录像Buffer Path
  3. Video Codec2 + MediaRecorder.getSurface 录像Buffer Path
  4. Video Codec2 + MediaRecorder.setInputSurface 录像Buffer Path

Android Codec2 简介

在Android Q之前,Android实现硬件编解码的多媒体框架是MediaCodec->Acodec-> OpenMAX IL,芯片厂商实现OpenMAX IL。

谷歌在Android Q上推出了Codec2.0,旨在取代Acodec+OpenMAX,它可以看作是一套新的对接MediaCodec的中间件,往上对接MediaCodec Native层,往下提供新的API标准供编解码使用。

Codec2.0 是Android系统为vendor提供的⽤于实现 video/audio/filter 模块的HAL层接⼝API。芯片厂商可⽤这个API实现他们⾃⼰的HAL层。

使用VideoCodec和MediaRecorder.getSurface的方式录像的Buffer Path如下图所示:

1

Camera App不会参与到录像Buffer的轮转流程中,Video Buffer从CameraServer直接送到MediaCodec进程,MediaCodec进程Encode好Video Buffer后交给MediaServer进程通过MPEG4Writer写到Storage,详情流程介绍点击阅读原文,参考视频讲解。

2

Camera App不会参与到录像Buffer的轮转流程中,Video Buffer从CameraServer送到MediaServer进程再给MediaCodec进程,MediaCodec进程Encode好Video Buffer后交给MediaServer进程通过MPEG4Writer写到Storage,详情流程介绍点击阅读原文,参考视频讲解。

使用VideoCodec2和MediaRecorder.setInputSurface 的方式录像的Buffer Path如下图所示:

3

Camera App会参与到录像Buffer的轮转流程中,Video Buffer从CameraServer送到Camera App, Camera App进程将Buffer Acquire到后送给MediaServer进程,MediaServer进程再给MediaCodec进程,MediaCodec进程Encode好Video Buffer后交给MediaServer进程通过MPEG4Writer写到Storage,详情流程介绍点击阅读原文,参考视频讲解。