编码器初始化

 编码器初始化:
int IMP_Encoder_SetDefaultParam(IMPEncoderCHNAttr *chnAttr, IMPEncoderProfile profile, IMPEncoderRcMode rcMode, uint16_t uWidth, uint16_t uHeight, uint32_t frmRateNum, uint32_t frmRateDen, uint32_t uGopLength, uint32_t uBufSize, int iInitialQP, uint32_t uTargetBitRate);
 * 设置编码默认属性
 *
 * @param[out] chnAttr 编码属性结构体
 * @param[in]  profile 编码协议
 * @param[in]  rcMode  码率控制模式
 * @param[in]  uWidth  编码图片宽度
 * @param[in]  uHeight 编码图片高度
 * @param[in]  frmRateNum 编码帧率分子
 * @param[in]  frmRateDen 编码帧率分母
 * @param[in]  uGopLength GOP长度
 * @param[in]  uBufSize 码流buf大小
 * @param[in]  iInitialQP 初始化QP, 默认设置为-1
 * @param[in]  uTargetBitRate 目标码率
 *
 * @retval 0 成功
 * @retval 非0 失败
 *
 
 /**
 * 定义编码Channel码流Profile
 */
typedef enum {
	IMP_ENC_PROFILE_AVC_BASELINE    = ((PT_H264 << 24) | (IMP_ENC_AVC_PROFILE_IDC_BASELINE)),
	IMP_ENC_PROFILE_AVC_MAIN        = ((PT_H264 << 24) | (IMP_ENC_AVC_PROFILE_IDC_MAIN)),
	IMP_ENC_PROFILE_AVC_HIGH        = ((PT_H264 << 24) | (IMP_ENC_AVC_PROFILE_IDC_HIGH)),
	IMP_ENC_PROFILE_HEVC_MAIN       = ((PT_H265 << 24) | (IMP_ENC_HEVC_PROFILE_IDC_MAIN)),
	IMP_ENC_PROFILE_JPEG            = (PT_JPEG << 24),
} IMPEncoderProfile;

/**
 * 定义编码Channel码率控制器模式
 */
typedef enum {
	ENC_RC_MODE_FIXQP               = 0,	/**< Fixqp 模式 */
	ENC_RC_MODE_CBR                 = 1,	/**< CBR 模式 */
	ENC_RC_MODE_VBR                 = 2,	/**< VBR 模式*/
	ENC_RC_MODE_SMART               = 3,	/**< Smart 模式*/
	ENC_RC_MODE_CVBR                = 4,	/**< CVBR 模式*/
	ENC_RC_MODE_AVBR                = 5,	/**< AVBR 模式*/
	ENC_RC_MODE_INV                 = 6,	/**< INV 模式 */
} IMPEncoderRcMode;


Gop:两个I帧间隔,一般设置为输出帧率的整数倍 
 /* Step.3 Encoder init */
ret = IMP_Encoder_CreateGroup(extern_index);
if (ret < 0) {
		IMP_LOG_ERR(TAG, "IMP_Encoder_CreateGroup(%d) failed\n", extern_index);
		return -1;
}

IMPEncoderCHNAttr channel_attr;
int uTargetBitRate = 1000;
ret = IMP_Encoder_SetDefaultParam(&channel_attr, IMP_ENC_PROFILE_AVC_HIGH, ENC_RC_MODE_CBR,
				fs_main.picWidth, fs_main.picHeight,
				fs_main.outFrmRateNum, fs_main.outFrmRateDen,
				fs_main.outFrmRateNum * 2 / fs_main.outFrmRateDen, 2,
				-1, uTargetBitRate);
if (ret < 0) {
		IMP_LOG_ERR(TAG, "IMP_Encoder_SetDefaultParam(%d) failed\n", extern_index);
		return -1;
}


ret = IMP_Encoder_CreateChn(extern_index, &channel_attr);
if (ret < 0) {
		IMP_LOG_ERR(TAG, "IMP_Encoder_CreateChn(%d) failed\n", extern_index);
		return -1;
}

ret = IMP_Encoder_RegisterChn(extern_index, extern_index);
if (ret < 0) {
		IMP_LOG_ERR(TAG, "IMP_Encoder_RegisterChn(%d, %d) failed\n", extern_index, extern_index);
		return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弱鸡在进步

老铁觉得好的话

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值