编码器初始化:
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 失败
*
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;
typedef enum {
ENC_RC_MODE_FIXQP = 0,
ENC_RC_MODE_CBR = 1,
ENC_RC_MODE_VBR = 2,
ENC_RC_MODE_SMART = 3,
ENC_RC_MODE_CVBR = 4,
ENC_RC_MODE_AVBR = 5,
ENC_RC_MODE_INV = 6,
} IMPEncoderRcMode;
Gop:两个I帧间隔,一般设置为输出帧率的整数倍
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;
}