rk3588 mpp编码流程 代码demo
时间: 2023-09-14 09:15:51 浏览: 441
RK3588 MPP是Rockchip公司最新的一款高性能多媒体处理芯片,其编码流程大致如下:
1. 初始化MPP库,创建编码器对象。
2. 设置编码参数,包括视频编码格式、分辨率、帧率、码率等。
3. 分配输入数据和输出数据的缓冲区。
4. 获取输入数据,将输入数据填充到输入缓冲区中。
5. 调用编码器接口进行编码,将编码后的数据填充到输出缓冲区中。
6. 将输出数据写入文件或网络等目标位置。
7. 重复步骤4至6,直到所有数据编码完毕。
下面是一个简单的RK3588 MPP编码的代码demo,仅供参考:
```c++
#include <stdio.h>
#include "rk_mpi.h"
int main()
{
// 初始化MPP库
RK_MPI_SYS_Init();
// 创建编码器对象
MPP_ENC_CTX enc_ctx;
memset(&enc_ctx, 0, sizeof(MPP_ENC_CTX));
RK_MPI_VENC_Create(&enc_ctx, RK_ID_VENC_H264);
// 设置编码参数
MPP_ENC_CFG enc_cfg;
memset(&enc_cfg, 0, sizeof(MPP_ENC_CFG));
enc_cfg.codec_type = MPP_VIDEO_CodingAVC;
enc_cfg.frm_rate = 25;
enc_cfg.bps = 1000000;
enc_cfg.width = 1280;
enc_cfg.height = 720;
RK_MPI_VENC_SetCfg(enc_ctx, &enc_cfg);
// 分配输入数据和输出数据的缓冲区
MPP_BUFFER input_buf, output_buf;
RK_MPI_SYS_Malloc(&input_buf, "input", enc_cfg.width * enc_cfg.height * 3 / 2);
RK_MPI_SYS_Malloc(&output_buf, "output", enc_cfg.width * enc_cfg.height * 3 / 2);
// 打开输入文件和输出文件
FILE* input_file = fopen("input.yuv", "rb");
FILE* output_file = fopen("output.h264", "wb");
// 编码循环
while (1) {
// 读取一帧输入数据
fread(input_buf, 1, enc_cfg.width * enc_cfg.height * 3 / 2, input_file);
// 设置输入数据
MPP_ENC_DATA enc_data;
memset(&enc_data, 0, sizeof(MPP_ENC_DATA));
enc_data.pkt_len = enc_cfg.width * enc_cfg.height * 3 / 2;
enc_data.pkt_buf = input_buf;
RK_MPI_VENC_SendFrame(enc_ctx, &enc_data);
// 获取编码后的输出数据
MPP_ENC_DATA enc_out;
memset(&enc_out, 0, sizeof(MPP_ENC_DATA));
RK_MPI_VENC_GetPacket(enc_ctx, &enc_out);
// 写入输出文件
fwrite(enc_out.pkt_buf, 1, enc_out.pkt_len, output_file);
if (enc_out.eos) {
break;
}
}
// 关闭文件和释放缓冲区
fclose(input_file);
fclose(output_file);
RK_MPI_SYS_Free(input_buf);
RK_MPI_SYS_Free(output_buf);
// 销毁编码器对象和MPP库
RK_MPI_VENC_Destroy(enc_ctx);
RK_MPI_SYS_Exit();
return 0;
}
```
阅读全文