RK3399Pro-硬件编解码器MPP库快速上手--(三)MPP编码关键代码讲解

MPP关键配置(讲解在注释中)

代码链接:https://download.csdn.net/download/qq_39839546/67314289
已设置成了0积分下载,欢迎大家下载分享。

为了方便配置功能,我们一般将Mpp配置的关键参数定义为结构体:

struct MPP_ENC_DATA  //编码所需要的数据
{
   
	// global flow control flag
	uint32_t frm_eos;
	uint32_t pkt_eos;
	uint32_t frame_count;
	uint64_t stream_size;

	// base flow context
	MppCtx ctx;
	MppApi *mpi;
	MppEncPrepCfg prep_cfg;
	MppEncRcCfg rc_cfg;
	MppEncCodecCfg codec_cfg;

	// input / output
	MppBuffer frm_buf;//为编码时数据存放开辟的内存
	MppEncSeiMode sei_mode;

	uint32_t width;//图像宽
	uint32_t height;//图像高
/*Stride:
  stride其实是图像处理中常用的概念,是关于数据对齐的一种概念。
  一行有 11 个像素(Width = 11), 对一个 32 位(每个像素 4 字节)的图像, Stride = 11 * 4 = 44.
  但还有个字节对齐的问题, 譬如:
  一行有 11 个像素(Width = 11), 对一个 24 位(每个像素 3 字节)的图像, Stride = 11 * 3 + 3 = 36.
  为什么不是 Stride = 33? 因为它是按 4 字节对齐的.
  根据上面道理, 我们可以手动计算 Stride 的值:
  1)Stride = 每像素占用的字节数(也就是像素位数/8) * Width;
  2)如果 Stride 不是 4 的倍数, 那么 Stride = Stride + (4 - Stride mod 4);
*/
	uint32_t hor_stride;
	uint32_t ver_stride;
	//输入图像格式
	MppFrameFormat fmt = MPP_FMT_YUV422_YUYV;
	//输出视频流格式
	MppCodingType type = MPP_VIDEO_CodingAVC;
	uint32_t num_frames;
	// resources
	size_t frame_size;
	/*在视频编码中,GOP的意思是画面组,指定了intra-和inter-帧的顺序。
	GOP是一个编码视频流中的一组连续的画面。每一个编码的视频流都由连续的GOP组成。
	压缩的视频流中GOP相对独立,解码器解码新的GOP时需要之前的帧来解码后面的帧,
	GOP的存在也可以实现在视频中更快地定位。*/
	int32_t gop = 60;
	//帧率
	int32_t fps = 30;
	//码率
	int32_t bps;
	//输出文件头
	FILE *fp_output;
};

然后是编码的基本配置流程:

#define MPP_ALIGN(x, a)         (((x)+(a)-1)&~((a)-1))
	memset(&mpp_enc_data, 0, sizeof(mpp_enc_data));
	mpp_enc_data.width = width;
	mpp_enc_data.height = height;
	//获取宽高的stride	
	mpp_enc_data.hor_stride = MPP_ALIGN(mpp_enc_data.width, 16);
	mpp_enc_data.ver_stride = MPP_ALIGN(mpp_enc_data.height, 16);
	mpp_enc_data.fmt = fmt;//MPP_FMT_BGR565;//MPP_FMT_YUV422_YUYV等;
	mpp_enc_data.type = type;
	mpp_enc_data.fps = fps;
	mpp_enc_data.gop = gop;
	//不同的图像格式有着不同的数据量大小,
	//比如MPP_FMT_YUV420SP_VU格式的图像数据量大小就是其图像像素量的3/2;
	if (mpp_enc_data.fmt <= MPP_FMT_YUV420SP_VU
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值