Android Media Framework(五)Tunnel Mode

本篇将聚焦Android Tunnel Mode,详细解析组件之间隧道连接过程、数据传递过程、组件销毁过程。通过阅读本篇内容,我们应能对tunneled组件的连接过程和buffer分配过程有所了解。

1、Tunnel Mode介绍

IL Spec详细描述了Tunnel Component的实现方式,但内容较为晦涩难懂,网上相关的资料也比较少,使得学习Tunnel Mode变得相当困难。此外,由于Android对Tunnel Mode进行了一些修改,因此Tunnel组件的具体实现会与Spec存在差异,不同厂商的实现方式可能各不相同,我们要做的是参照Spec了解Tunnel Mode的工作过程。

IL Spec定义的是通用Tunnel Mode,是任意两个组件隧道连接的标准。Android上的Tunnel Mode用于OMX组件与渲染组件之间,只有在解码渲染流程会使用。

上图展示了一个普通的数据处理流程,Decoder会先将处理好的数据填充到output buffer中,随后OMX组件会调用FillBufferDone函数将填充好的buffer传递给IL Client,IL Client在做好音画同步后,会将这个output buffer送入native window进行渲染。

上图展示了Tunnel Mode的数据处理流程。与普通流程相比,Tunnel Mode流程中增加了一个tunnel组件,该组件直接与native window连接,实际工作过程中output buffer将不再被回传到IL Client,而是通过tunnel组件直接传送到native window进行渲染。Tunnel Mode中的音画同步(avsync)将在硬件中实现,具体实现由各个厂商来完成。

Tunnel Mode将音画同步和渲染工作从应用处理器(ACPU)转移到数字信号处理器(DSP)进行,对于需要高性能处理的4K60FPS等高端音视频内容,Tunnel Mode能够显著降低性能消耗,保证流畅播放。此外Tunnel Mode通过硬件同步,可以确保音频和视频数据的精确同步,提升用户体验。

Tunnel Mode的缺点也很明显,实现复杂且需要硬件级支持!

2、supply and supplier

supply翻译为供应、提供, supplier翻译为供应方、提供者。

这两个词用于描述隧道组件端口的角色是buffer分配者还是buffer使用者,spec中有描述:在一对建立隧道的端口中,调用UseBuffer的一方被称为supplier port,另一方被称为non-supplier port。

3、ComponentTunnelRequest

4、隧道建立

5、隧道模式下的buffer释放

6、隧道模式下的端口使能与禁用


全文阅读:Android Media Framework(五)Tunnel Mode

相关推荐
Flywith242 小时前
【每日一技】Raycast 实现 scrcpy 的快捷显示隐藏
android·前端
没有了遇见3 小时前
Android(Coil,Glide)大量图片加载缓存清理问题(二 Coil处理)
android
城东米粉儿3 小时前
Android Dagger2笔记
android
没有了遇见3 小时前
Android(Coil,Glide)大量图片加载缓存清理问题(一)
android
恋猫de小郭3 小时前
谷歌 Genkit Dart 正式发布:现在可以使用 Dart 和 Flutter 构建全栈 AI 应用
android·前端·flutter
曾经我也有梦想5 小时前
Day4 Kotlin 高级特性
android
simplepeng5 小时前
Compose Multiplatform 中的 Navigation 3
android
Kapaseker11 小时前
一杯美式讲完 Sealed Class
android·kotlin
冬奇Lab1 天前
PowerManagerService(下):Doze模式与电池优化
android·源码阅读
砖厂小工1 天前
Compose 中函数引用 vs Lambda:到底该用哪个?
android