-
Notifications
You must be signed in to change notification settings - Fork 2
MPP_MppResourceGuard
SweerItTer edited this page Feb 1, 2026
·
3 revisions
MppResourceGuard 是 utilsCore MPP 模块的 RAII 守卫类集合,提供 MPP 资源自动管理功能。
- MPP 资源自动清理
- RAII 封装
- 资源生命周期管理
- 编码器资源管理
- 解码器资源管理
- MPP 上下文管理
- 依赖: Rockchip MPP 库
- 被依赖: EncoderContext、EncoderCore 等模块
MppFrameGuard 是 MppFrame 的 RAII 封装类,提供:
- 自动调用
mpp_frame_deinit() - 异常安全保证
- 资源生命周期管理
- RAII: 自动管理资源
MppBufferGuard 是 MppBuffer 的 RAII 封装类,提供:
- 自动调用
mpp_buffer_put() - 异常安全保证
- 资源生命周期管理
- RAII: 自动管理资源
MppPacketGuard 是 MppPacket 的 RAII 封装类,提供:
- 自动调用
mpp_packet_deinit() - 异常安全保证
- 资源生命周期管理
- RAII: 自动管理资源
explicit MppFrameGuard(MppFrame* f);参数说明:
-
f(输入): MppFrame 指针
返回值: 无
所有权归属:
- MppFrameGuard 拥有资源的管理权
注意事项:
- 构造时接管资源
- 析构时自动调用
mpp_frame_deinit()
使用例程:
MppFrame frame;
mpp_frame_init(&frame);
MppFrameGuard guard(&frame);
// 使用 frame...MppFrame operator->() const;返回值: MppFrame
使用例程:
MppFrameGuard guard(&frame);
auto fmt = guard->fmt;MppFrame get() const;返回值: MppFrame
使用例程:
MppFrameGuard guard(&frame);
MppFrame f = guard.get();void release();返回值: 无
注意事项:
- 释放资源管理权
- 不再自动清理
使用例程:
MppFrameGuard guard(&frame);
guard.release();
// 现在需要手动清理explicit MppBufferGuard(MppBuffer b);参数说明:
-
b(输入): MppBuffer 句柄
返回值: 无
所有权归属:
- MppBufferGuard 拥有资源的管理权
注意事项:
- 构造时接管资源
- 析构时自动调用
mpp_buffer_put()
使用例程:
MppBuffer buffer;
mpp_buffer_get(NULL, &buffer, size);
MppBufferGuard guard(buffer);
// 使用 buffer...MppBuffer operator->() const;返回值: MppBuffer
使用例程:
MppBufferGuard guard(buffer);
auto size = guard->size;MppBuffer get() const;返回值: MppBuffer
使用例程:
MppBufferGuard guard(buffer);
MppBuffer b = guard.get();void release();返回值: 无
注意事项:
- 释放资源管理权
- 不再自动清理
使用例程:
MppBufferGuard guard(buffer);
guard.release();
// 现在需要手动清理explicit MppPacketGuard(MppPacket* p);参数说明:
-
p(输入): MppPacket 指针
返回值: 无
所有权归属:
- MppPacketGuard 拥有资源的管理权
注意事项:
- 构造时接管资源
- 析构时自动调用
mpp_packet_deinit()
使用例程:
MppPacket packet;
mpp_packet_init(&packet);
MppPacketGuard guard(&packet);
// 使用 packet...void release();返回值: 无
注意事项:
- 释放资源管理权
- 不再自动清理
使用例程:
MppPacketGuard guard(&packet);
guard.release();
// 现在需要手动清理MppFrame frame;
mpp_frame_init(&frame);
{
MppFrameGuard guard(&frame);
// 使用 frame...
frame->fmt = MPP_FMT_YUV420SP;
} // 自动调用 mpp_frame_deinit(&frame)MppBuffer buffer;
mpp_buffer_get(NULL, &buffer, 1024);
{
MppBufferGuard guard(buffer);
// 使用 buffer...
void* data = mpp_buffer_get_ptr(buffer);
} // 自动调用 mpp_buffer_put(buffer)MppPacket packet;
mpp_packet_init(&packet);
{
MppPacketGuard guard(&packet);
// 使用 packet...
packet->length = 1024;
} // 自动调用 mpp_packet_deinit(&packet)void encode_frame(MppFrame* frame) {
MppFrameGuard guard(frame);
// 可能抛出异常的操作
if (error) {
throw std::runtime_error("Encode failed");
}
// 即使抛出异常,资源也会被清理
}MppFrame frame;
mpp_frame_init(&frame);
MppFrameGuard guard(&frame);
// 释放所有权
guard.release();
// 手动清理
mpp_frame_deinit(&frame);- 自动清理: 析构时自动清理
- 异常安全: 即使异常也会清理
- 所有权转移: release() 转移管理权
- 指针有效性: 确保指针有效
- 避免双重清理: release() 后不要再次析构
- 依赖: 需要正确初始化 MPP
- EncoderContext - 编码器上下文
- EncoderCore - 编码核心
- JpegEncoder - JPEG 编码器
- MPP 模块总览
主页
API 文档
DMA 模块
DRM 模块
- DRM 模块总览
- DeviceController - DRM 设备控制器
- DrmLayer - DRM 图层管理
- PlanesCompositor - DRM 平面合成器
- DrmBpp - DRM 格式定义
NET 模块
- NET 模块总览
- TcpServer - TCP 服务器
- SocketConnection - Socket 连接管理
- CommandHandler - 命令处理器
- DataPacket - 数据包
V4L2 模块
- V4L2 模块总览
- CameraController - V4L2 摄像头控制器
- Frame - V4L2 帧数据结构
- FormatTool - V4L2 格式工具
- Exception - V4L2 异常类
V4L2Param 模块
- V4L2Param 模块总览
- ParamControl - 参数控制
- ParamLogger - 参数日志
- ParamProcessor - 参数处理器
RGA 模块
- RGA 模块总览
- RgaConverter - RGA 转换器
- RgaProcessor - RGA 处理器
- FormatTool - RGA 格式工具
MPP 模块
- MPP 模块总览
- EncoderContext - 编码器上下文
- EncoderCore - 编码器核心
- JpegEncoder - JPEG 编码器
- StreamWriter - 流写入器
- MppResourceGuard - MPP 资源守护
- FileTools - 文件工具
- FormatTool - 格式工具
Sys 模块
- Sys 模块总览
- CpuMonitor - CPU 监控器
- MemoryMonitor - 内存监控器
- Base - 基础类
Mouse 模块
- Mouse 模块总览
- Watcher - 鼠标监视器
Utils 模块
- Utils 模块总览
- AsyncThreadPool - 异步线程池
- ConcurrentQueue - 并发队列
- FdWrapper - 文件描述符包装器
- FenceWatcher - 围栏监视器
- FixedSizePool - 固定大小对象池
- Logger - 日志记录器
- ObjectsPool - 对象池
- OrderedQueue - 有序队列
- ProgressBar - 进度条
- SafeQueue - 安全队列
- SharedBufferState - 共享缓冲区状态
- SimpleVariant - 简单变体类型
- ThreadPauser - 线程暂停器
- ThreadUtils - 线程工具
- Types - 类型定义
- UdevMonitor - Udev 监视器