🌓

MediaCodec 全链路深度剖析(五):从 C2Work 到 vendor 进程

系列导读:第四篇停在CCodecBufferChannel::queueInputBufferInternal里那一行mComponent->queue(&items)——一个C2Work列表打过去,HAL 那边解完通过onWorkDone回来。这一篇接着拆开这条线: C2Work到底装了什么、为什么是这个形状? mComponent-&g...

阅读全文

MediaCodec 全链路深度剖析(四):CCodec 与 BufferChannel 的分工

系列导读:第三篇把视角停在了MediaCodec.cpp的状态机,所有动作最后都落在一个sp<CodecBase> mCodec上。这一篇接着往下走,回答两个问题: mCodec 到底是 CCodec 还是 ACodec?谁来选、什么时候选? 进了 CCodec 以后,状态切换、buffer 进出、Surface 渲染——为什么要拆给两个类来...

阅读全文

MediaCodec 全链路深度剖析(三):Native 消息机制与 JNI 桥接

系列导读:第二篇结尾留下一个钩子——真正的状态机在 Native 层,Java 侧只是个薄壳。这一篇沿着 codec.start()、dequeueOutputBuffer() 这种”看上去同步”的调用一路下钻,回答一个问题: Java 的同步调用,在 JNI 之下到底是怎么落到 Native、又是怎么”原地等回结果”的? 主角是 AOSP foundat...

阅读全文

MediaCodec 全链路深度剖析(二):Java 层 API 与状态机

系列导读:主系列从”一帧像素怎么走完六层架构”切入,偏底层。但在开挖之前,得先让读者站在 App 工程师的视角,把 MediaCodec 的 Java API 摸清楚——状态机有哪些、常用 API 各自扮演什么角色、哪些坑踩了会直接 crash。 一句话理解 MediaCodecMediaCodec 是一台带缓冲池的状态机: 状态机决定”你现在能做什么”—...

阅读全文

MediaCodec 全链路深度剖析(一):开篇 —— 当你点下"播放",究竟发生了什么?

系列导读:本系列将从 Kotlin/Java 应用层出发,一路向下,穿越 JNI、Native framework、Codec2、HAL、驱动,直至 SoC 内部的 VPU/GPU/NPU 硬件电路,完整拆解一帧视频从磁盘到屏幕的代码链路与数据流转。 本文是第 1 篇 · 开篇总览,不涉及具体代码细节,目的是建立一张「全景地图」,让你知道自己在下面哪一层、...

阅读全文