Skip to content

MPP_README

SweerItTer edited this page Feb 21, 2026 · 4 revisions

MPP 模块 API 文档

概述

MPP 模块提供 Rockchip MPP(Media Process Platform)的封装,支持视频编码、图像编码等功能。

模块组成

核心类

文档 说明
EncoderContext EncoderContext 编码器上下文
EncoderCore EncoderCore 编码器核心
JpegEncoder JpegEncoder JPEG 编码器
StreamWriter StreamWriter 流写入器

资源管理

文档 说明
MppResourceGuard MppResourceGuard 资源管理

工具类

文档 说明
FileTools FileTools 文件工具
FormatTool FormatTool 格式工具

功能特性

视频编码

  • H.264/H.265 编码
  • JPEG 编码
  • 多种输入格式支持
  • 质量控制

图像编码

  • JPEG 图像编码
  • PNG 图像编码
  • 图像压缩
  • 质量调整

流处理

  • 流式编码
  • 文件写入
  • 网络传输

使用示例

JPEG 编码

JpegEncoder::Config cfg;
cfg.width = 1920;
cfg.height = 1080;
cfg.format = MPP_FMT_YUV420SP;
cfg.quality = 8;  // 0-10,值越大质量越高
cfg.save_dir = "/tmp/jpeg";  // 保存目录

JpegEncoder encoder(cfg);

// 从 DMA-BUF 捕获并编码到文件
DmaBufferPtr dma_buffer = get_dmabuf_from_camera();
bool success = encoder.captureFromDmabuf(dma_buffer);

if (success) {
    printf("JPEG 编码成功,文件已保存到 %s\n", cfg.save_dir.c_str());
}

质量控制

JpegEncoder::Config cfg;
cfg.width = 1920;
cfg.height = 1080;
cfg.format = MPP_FMT_YUV420SP;
cfg.quality = 10;  // 最高质量
cfg.save_dir = "/tmp/high_quality_jpeg";

JpegEncoder encoder(cfg);

// 质量通过 Config 结构体设置,无法在编码后修改
// 如果需要不同质量,需要重新创建 Config 或使用 resetConfig()
DmaBufferPtr dma_buffer = get_dmabuf_from_camera();
encoder.captureFromDmabuf(dma_buffer);

批量编码

JpegEncoder::Config cfg;
cfg.width = 1920;
cfg.height = 1080;
cfg.format = MPP_FMT_YUV420SP;
cfg.quality = 8;
cfg.save_dir = "/tmp/batch_jpeg";

JpegEncoder encoder(cfg);

for (int i = 0; i < 100; ++i) {
    DmaBufferPtr frame = get_dmabuf_frame(i);
    encoder.captureFromDmabuf(frame);
    
    printf("已编码第 %d 帧\n", i);
}

数据流

YUV 数据 → MPP 编码器 → 编码数据 → 文件/网络

线程安全

  • JpegEncoder: 每个线程应该有自己的实例
  • MPP 编码器本身是线程安全的
  • 使用互斥锁保护共享资源

性能优化

  • 使用硬件加速
  • 批量编码提高效率
  • 合理设置质量参数
  • 使用 DMA-BUF 零拷贝

错误处理

  • 检查初始化是否成功
  • 检查编码是否成功
  • 处理格式不支持的情况
  • 记录错误日志

相关模块

参考资料

注意事项

  1. 格式匹配: 输入格式必须与配置一致
  2. 硬件限制: 不同平台支持的编码格式不同
  3. 性能: 编码性能取决于硬件和参数
  4. 资源管理: 析构时自动清理 MPP 资源
  5. 线程安全: 每个线程应该有自己的实例
  6. 内存: 注意内存使用,大图像可能占用大量内存
  7. 质量: 质量参数影响文件大小和性能
  8. 依赖: 需要安装 Rockchip MPP 库

版本历史

  • v1.0 - 初始版本,支持 JPEG 编码

主页

API 文档

DMA 模块

DRM 模块

NET 模块

V4L2 模块

V4L2Param 模块

RGA 模块

MPP 模块

Sys 模块

Mouse 模块

Utils 模块

Clone this wiki locally