docs: add Phase 4 OHCodec status

This commit is contained in:
BoatingCloud committed 2026-08-29 12:43:14 +08:00
1 parent c239b1c186
commit e1bc8cc52f
2 files changed
+84

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
# MPV OHCodec 集成说明
## 已实现路径
`hwdec=ohcodec` 由 MPV/FFmpeg 的动态 hardware-decoder 枚举进入独立
`AV_HWDEVICE_TYPE_OHCODEC` backend。`IMGFMT_OHCODEC` 与
`AV_PIX_FMT_OHCODEC` 使用单一映射。当前 adapter 只允许 H.264 和 HEVC,先
查询 API 24 OHCodec hardware capability,再检查 host 注入的独占
`ohos_direct_surface`,最后创建带 `OHNativeWindow*` 的 FFmpeg hwdevice。
Direct Surface backend 的名称是
`ohcodec-direct-surface-experimental`。它只负责证明 device/decoder/surface
plumbing,不与 Playback Lab 的 EGL window 共享呈现权;没有独占窗口时明确失败,
MPV 保留 software decoder fallback。
## 状态与回退
适配器记录 `HWDEC_DISABLED`、`HWDEC_REQUESTED`、`HWDEC_CAPABILITY_CHECK`、
`HWDEC_DEVICE_CREATED`、`HWDEC_DECODER_CREATED`、`HWDEC_DIRECT_SURFACE`、
`HWDEC_GPU_INTEROP`、`HWDEC_ACTIVE`、`HWDEC_FALLBACK`、`HWDEC_ERROR`。
Playback Lab 通过 libmpv 诊断 API 与属性显示 requested/actual decoder、active
状态、backend、capability、fallback reason 及 hardware/software frame 计数。
capability 查询失败、codec/profile/level 不支持、surface 不可用、device/decoder
创建失败或后续 interop 失败都必须返回失败并回到 software path;不把空 device、
opaque pointer 或 CPU readback 当成成功的硬件帧。
## Surface 生命周期约束
`ohos_direct_surface` 的引用由 adapter 持有,host 负责提供一个不等于
Playback Lab EGL window 的独占窗口。Surface 销毁或重建时,host 必须先停止
decoder/render、等待 AVFrame release,再销毁旧 device 并用新窗口重建;当前代
码只完成 ownership guard,generation/fence/present 的实体设备验证仍待做。
## GPU interop 边界
`harmony-ohcodec-gl` 默认关闭,仅编译 API probe:API24 可探测
`OH_AVBuffer_GetNativeBuffer`、NativeWindow wrapper、EGL native-buffer image
和 GLES external texture 扩展。但 FFmpeg upstream 的硬件分支是 surface-first,
没有“不 present 到 decoder Surface、直接导出可导入 NativeBuffer”的契约;见
`DOCS/OHCODEC_GPU_INTEROP_DESIGN.md` 中的 `OHCODEC-BLOCKER-001`。因此当前不
提交 mapper、不宣称 zero-copy,也不宣称 HDR。
+42
View File
@@ -0,0 +1,42 @@
# Phase 4 状态
## 结论
**Phase 4 CODE COMPLETE / GPU INTEROP BLOCKED / DEVICE VALIDATION PENDING**
代码完成了 MPV 识别 FFmpeg OHCodec、H.264/HEVC decoder selection、能力检查、
direct-surface 实验接入、软件回退、诊断和构建矩阵。当前没有实体设备,因此
不能写成 hardware decode complete、zero-copy complete 或 HDR complete。
## 验证矩阵
| 项目 | 状态 |
| --- | --- |
| `AV_PIX_FMT_OHCODEC` → `IMGFMT_OHCODEC` | COMPILE VERIFIED |
| `AV_HWDEVICE_TYPE_OHCODEC` 独立 backend | COMPILE VERIFIED |
| H.264 / HEVC selection guard | COMPILE VERIFIED;DEVICE TEST REQUIRED |
| API24 OHCodec capability 查询 | COMPILE VERIFIED;设备返回值待验 |
| Direct Surface plumbing | COMPILE VERIFIED;需独占窗口 |
| GPU interop mapper | BLOCKED:上游无可导入 non-surface output contract |
| Software decode / OHAudio | CLEAN BUILD VERIFIED |
| OHCodec-enabled / software / GL-probe | AArch64 BUILD VERIFIED |
| Playback Lab HAP | BUILD VERIFIED;unsigned |
| Emulator | APP START + EGL SMOKE VERIFIED;不是硬解验证 |
| Physical device | PENDING |
## 产物与审计
- `build/ohos-arm64/prefix/lib/libmpv.so.2.5.0` 为 AArch64 ELF,保留 OHCodec、
OHAudio 及诊断符号。
- `scripts/build-mpv-ohos-software.sh` 使用独立 build 目录关闭 OHCodec,避免
软件回退配置与硬解构建互相污染。
- FFmpeg 保持锁定 upstream commit,未复制 SDK/第三方实现;许可证审计见
`LICENSE_AUDIT.md`。
- 当前 blocker、NativeBuffer 生命周期、EGL/fence/crop/stride 待验证项见
`DOCS/OHCODEC_GPU_INTEROP_DESIGN.md` 与 `DOCS/HDR_PIPELINE_NOTES.md`。
## 下一阶段最大风险
实体设备上的 codec capability、surface recreate、output buffer ownership、
acquire/release fence、crop/stride/color metadata,以及如何在不修改 FFmpeg
surface contract 的前提下把硬件帧交给 MPV GPU composition。