#include <string.h>
#include <sys/time.h>
#include "utils.h"
#include "rk_mpi.h"
#include "mpp_env.h"
#include "mpp_mem.h"
#include "mpp_log.h"
#include "mpp_time.h"
#include "mpp_common.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <signal.h>
using namespace std;
using namespace cv;
typedef struct
{
MppCodingType type;
RK_U32 width;
RK_U32 height;
MppFrameFormat format;
RK_U32 num_frames;
} MpiEncTestCmd;
typedef struct
{
//global flow control flag
RK_U32 frm_eos;
RK_U32 pkt_eos;
RK_U32 frame_count;
RK_U64 stream_size;
//input ang output file
FILE *fp_input;
FILE *fp_output;
//input and output
MppBuffer frm_buf;
MppEncSeiMode sei_mode;
//base flow context
MppCtx ctx;
MppApi *mpi;
MppEncPrepCfg prep_cfg;
MppEncRcCfg rc_cfg;
MppEncCodecCfg codec_cfg;
//paramter for resource malloc
RK_U32 width;
RK_U32 height;
RK_U32 hor_stride; //horizontal stride
RK_U32 ver_stride; //vertical stride
MppFrameFormat fmt;
MppCodingType type;
RK_U32 num_frames;
//resources
size_t frame_size;
//NOTE: packet buffer may overflow
size_t packet_size;
//rate control runtime parameter
RK_S32 gop;
RK_S32 fps;
RK_S32 bps;
} MpiEncTestData;
//------------------------------------------------------------------------------
MpiEncTestData encoder_params;
MpiEncTestData *encoder_params_ptr = &encoder_params;
//
MppApi *mpi;
MppCtx ctx;
//
bool first_frame_flg = true;
//------------------------------------------------------------------------------
//功能:MPP上下文初始化
//说明:根据MpiEncTestCmd参数设置MpiEncTestData参数
//------------------------------------------------------------------------------
MPP_RET test_ctx_init(MpiEncTestData **data, MpiEncTestCmd *cmd)
{
MpiEncTestData *p = NULL;
MPP_RET ret = MPP_OK;
if (!data || !cmd)
{
mpp_err_f("invalid input data %p cmd %p\n", data, cmd);
return MPP_ERR_NULL_PTR;
}
p = mpp_calloc(MpiEncTestData, 1);
if (!p)
{
mpp_err_f("create MpiEncTestData failed\n");
ret = MPP_ERR_MALLOC;
goto RET;
}
//get paramter from cmd
p->width = cmd->width;
p->height = cmd->height;
p->hor_stride = MPP_ALIGN(cmd->width, 16);
p->ver_stride = MPP_ALIGN(cmd->height, 16);
p->fmt = cmd->format;
p->type = cmd->type;
p->num_frames = cmd->num_frames;
p->frame_size = p->hor_stride * p->ver_stride * 3 / 2;
p->packet_size = p->width * p->height;
RET:
*data = p;
return ret;
}
//------------------------------------------------------------------------------
//功能:设置MPP编码器参数
//说明:1-输入控制配置;2-码率控制配置;3-协议控制配置;4-SEI模式配置
//------------------------------------------------------------------------------
MPP_RET test
RK3588处理器平台使用MPP实现H264硬件编码
于 2024-02-20 15:41:33 首次发布