给MppFrame图像帧加上时间显示
时间: 2024-01-03 19:03:51 浏览: 151
MppFrame是Rockchip公司提供的一种视频图像帧数据格式,要给MppFrame图像帧加上时间显示,可以使用Rockchip提供的MPP(Media Processing Platform)框架的API来实现。具体步骤如下:
1. 创建Mpi对象和MppBuffer对象。
```
Mpi *mpi = new Mpi();
MppBuffer mpp_buffer = NULL;
```
2. 初始化Mpi对象和MppBuffer对象。
```
mpi->init();
MppBufferInfo buffer_info;
memset(&buffer_info, 0, sizeof(buffer_info));
int buffer_size = width * height * 3 / 2; // YUV420格式
MPP_RET ret = mpi->memAlloc(&mpp_buffer, "filter", buffer_size);
buffer_info.type = MPP_BUFFER_TYPE_ION;
buffer_info.size = buffer_size;
buffer_info.fd = mpp_buffer->info.fd;
buffer_info.ptr = mpp_buffer->data;
```
3. 创建MppFrame对象。
```
MppFrame frame = NULL;
ret = mpi->frameInit(&frame, MPP_FMT_YUV420P);
```
4. 将MppBuffer对象与MppFrame对象关联。
```
frame->buf = mpp_buffer;
frame->buf_slot[0] = mpp_buffer;
frame->buf_slot[1] = mpp_buffer;
frame->buf_slot[2] = mpp_buffer;
frame->width = width;
frame->height = height;
frame->hor_stride = width;
frame->ver_stride = height;
frame->format = MPP_FMT_YUV420P;
frame->pts = pts; // 视频帧时间戳
```
5. 创建MppTask对象和MppParam对象。
```
MppTask task = NULL;
MppParam param;
memset(¶m, 0, sizeof(param));
ret = mpi->poll(task);
if (ret != MPP_OK) {
return ret;
}
param = task->param;
```
6. 创建MppCtx对象和MppEncCfg对象。
```
MppCtx ctx = NULL;
MppEncCfg cfg = NULL;
ret = mpi->create(ctx, &cfg, frame);
if (ret != MPP_OK) {
return ret;
}
```
7. 设置MppEncCfg对象的参数。
```
cfg->prep.width = width;
cfg->prep.height = height;
cfg->prep.format = MPP_FMT_YUV420P;
cfg->prep.hor_stride = width;
cfg->prep.ver_stride = height;
cfg->prep.frame_rate = fps;
cfg->prep.aspect_ratio = 1;
cfg->rc_cfg.bitrate = bitrate;
cfg->rc_cfg.fps_in = fps;
cfg->rc_cfg.fps_out = fps;
```
8. 将MppFrame送入MppCtx进行处理。
```
ret = mpi->encode(ctx, frame, &task);
if (ret != MPP_OK) {
return ret;
}
ret = mpi->poll(task);
if (ret != MPP_OK) {
return ret;
}
```
9. 释放资源。
```
mpi->memFree(mpp_buffer);
mpi->frame_deinit(frame);
mpi->reset(ctx);
mpi->ctx_deinit(ctx);
```
通过以上步骤,可以将MppFrame图像帧加上时间显示,生成一个新的MppFrame图像帧。在步骤4中,需要将视频帧的时间戳(pts)传入MppFrame对象中,以便在后续的编码过程中使用。在步骤7中,需要设置MppEncCfg对象的参数,其中包括视频帧的分辨率、帧率、比特率等信息。
阅读全文