THIRD PARTY / TINY H264 DECODER
Tiny H264软件解码
SDK 中的 TinyH264 是面向 G32S10 移植的轻量级 H.264 软件解码器,基于 udevbe/tinyh264 和 h264bsd,实现 Baseline/Constrained Baseline、CAVLC、I/P 帧的裸码流解码。
能力边界:TinyH264 当前只提供 H.264 解码,不支持编码;不支持 CABAC、B 帧和 High Profile。
OVERVIEW
项目概览
| 项目 | 信息 |
|---|---|
| SDK 组件 | code/third_party/tinyh264 |
| 上游项目 | udevbe/tinyh264(基于 h264bsd) |
| 版本 | 0.0.7,提交 524a702b6d98f8b9271238fdda9a064a1e6861e7 |
| 实现语言 | C |
| 功能定位 | H.264 软件解码器 |
| H.264 Profile | Baseline / Constrained Baseline |
| 熵编码 | CAVLC |
| 帧类型 | I / P 帧;不支持 B 帧 |
| 输出格式 | 8 位 YUV420P / I420 |
| 输入格式 | 完整 NAL 的 Annex-B 裸码流 |
| 开源许可证 | Apache-2.0 |
DEFAULTS
默认配置
最大可见分辨率:1024 × 768。
最大参考帧数:1。
单次输入上限:256 KiB。
解码内存使用 SDK newlib/PSRAM 堆,并保证 16 字节对齐。
可通过创建前的配置修改最大宽度、最大高度、参考帧数和输入上限。
INTERFACE
接口与数据约定
| 接口 | 用途 |
|---|---|
| tinyh264_decoder_config_default | 获取默认配置 |
| tinyh264_decoder_create | 创建解码器实例;NULL 配置使用默认值 |
| tinyh264_decoder_decode | 解码输入码流,返回已消耗字节数和一帧 I420 图像 |
| tinyh264_decoder_reset | 释放缓存并重建状态,保留配置 |
| tinyh264_decoder_destroy | 释放解码器实例 |
| tinyh264_memory_get_stats | 查询当前核心的解码器申请量、峰值和分配失败次数 |
输入必须是完整 NAL 的 Annex-B 裸码流;网络分片需先拼包,MP4/AVCC 需先解封装或转换。
解码输出固定为 I420,Y/U/V 平面按各自 stride 访问。
返回图像指针在下一次 decode、reset 或 destroy 后失效,不能由调用方释放。
同一解码器实例必须在任务上下文中串行调用。
码流或资源错误后需要 reset 或 destroy;reset 后从 SPS/PPS/IDR 重新开始。
BUILD
编译配置
启用 SDK 组件:
CONFIG_THIRD_PARTY_TINYH264=y
该组件依赖 SDK newlib/PSRAM 堆,需要关闭 HEAP4:
# CONFIG_OS_FREERTOS_USE_HEAP4 is not set
REFERENCE
参考链接
SDK 本地说明:code/third_party/tinyh264/README.md
板端入口:components/imvf/examples/im_vf_h264_decode.c