7.3. API参考¶
视频编码模块主要提供视频编码通道的创建和销毁、视频编码通道的复位、开启和停止接收图像、设置和获取编码通道属性、获取和释放码流等功能。
提供以下 API:
CVI_VENC_CreateChn :创建编码通道
CVI_VENC_DestroyChn :销毁编码通道
CVI_VENC_ResetChn :复位编码通道
CVI_VENC_StartRecvFrame :开启编码通道接收输入图像
CVI_VENC_StopRecvFrame :停止编码通道接收输入图像
CVI_VENC_QueryStatus :查询编码通道状态
CVI_VENC_SetChnAttr :设置编码通道的编码属性
CVI_VENC_GetChnAttr :获取编码通道的编码属性
CVI_VENC_GetStream :获取编码码流
CVI_VENC_ReleaseStream :释放码流缓存
CVI_VENC_SendFrame :支持用户发送原始图像进行编码
CVI_VENC_GetFd :获取编码通道对应的设备文件句柄
CVI_VENC_CloseFd :获取编码通道对应的设备文件句柄
CVI_VENC_SetJpegParam :设置 JPEG 编码的参数集合
CVI_VENC_GetJpegParam :获取 JPEG 编码的参数集合
CVI_VENC_SetRcParam :设置通道码率控制高级参数
CVI_VENC_GetRcParam :获取通道码率控制高级参数
CVI_VENC_SetChnParam :设置 Venc 通道参数
CVI_VENC_GetChnParam :获取 Venc 通道参数
CVI_VENC_RequestIDR :请求 IDR 帧
CVI_VENC_SetRoiAttr :设置编码通道的感兴趣区域编码配置
CVI_VENC_GetRoiAttr :获取编码通道的感兴趣区域编码配置
CVI_VENC_SetRefParam :设置 H.264/H.265 编码通道高级跳帧参考参数
CVI_VENC_GetRefParam :获取 H.264/H.265 编码通道高级跳帧参考参数
CVI_VENC_SetFrameLostStrategy :设置瞬时码率超出阈值时丢帧策略的配置
CVI_VENC_GetFrameLostStrategy :获取瞬时码率超出阈值时丢帧策略的配置
CVI_VENC_SetModParam :设置编码相关的模块参数
CVI_VENC_GetModParam 获取编码相关的模块参数
CVI_VENC_AttachVbPool :将编码通道绑定到某个视频缓存 VB 池中
CVI_VENC_DetachVbPool :将编码通道从某个视频缓存 VB 池中解绑定
CVI_VENC_GetH264Entropy :获取H264熵编码信息
CVI_VENC_SetH264Entropy :设置H264熵编码信息
CVI_VENC_InsertUserData :插入用户数据
CVI_VENC_GetCuPrediction :获取CU 预测信息
CVI_VENC_SetCuPrediction :设置CU预测信息
CVI_VENC_GetH264Trans :获取H.264协议编码通道的变换、量化属性
CVI_VENC_SetH264Trans :设置H.264协议编码通道的变换、量化属性
CVI_VENC_GetH265Trans :获取H.265协议编码通道的变换、量化属性
CVI_VENC_SetH265Trans :获取H.265协议编码通道的变换、量化属性
7.3.1. CVI_VENC_CreateChn¶
【描述】
创建编码通道
【语法】
CVI_S32 CVI_VENC_CreateChn(VENC_CHN VeChn, const VENC_CHN_ATTR_S *pstAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstAttr |
VENC_CHN_ATTR_S 属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
通道属性分为三个结构:
typedef struct _VENC_CHN_ATTR_S {
VENC_ATTR_S stVencAttr;
VENC_RC_ATTR_S stRcAttr;
VENC_GOP_ATTR_S stGopAttr;
} VENC_CHN_ATTR_S;
VENC_ATTR_S: 决定编码属性,此属性决定编码协议并赋值设定对应宽,高。
VENC_RC_ATTR_S: 码率控制器属性,此属性随编码设定及码率控制模式(CBR、VBR、AVBR、FIXQP)不同对应子结构做设定。
VENC_GOP_ATTR_S : GOP 类型属性,编码 GOP 类型(编码单参考帧,P 帧, GOP 类型。)
推荐的编码宽高为: 1920x1080(1080P)、 1280x720(720P)。
【举例】
使用者可参阅 sample_common_venc.c
内 SAMPLE_COMM_VENC_SetChnAttr 参考对应属性指针的设定。
【相关主题】
7.3.2. CVI_VENC_DestroyChn¶
【描述】
销毁编码通道
【语法】
CVI_S32 CVI_VENC_DestroyChn (VENC_CHN VeChn);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
销毁并不存在的通道,将返回失败。
【举例】
可参阅 sample_common_venc.c
,销毁通道前必须停止传送frame。
CVI_S32 SAMPLE_COMM_VENC_Stop(VENC_CHN VencChn)
{
CVI_S32 s32Ret;
//停止传送venc frame data 接收
s32Ret = CVI_VENC_StopRecvFrame(VencChn);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_StopRecvPic vechn[%d] failed with %#x!\n", VencChn, s32Ret);
return CVI_FAILURE;
}
//停止线程执行
if (gs_VencTask[VencChn] != 0) {
pthread_join(gs_VencTask[VencChn], CVI_NULL);
CVI_VENC_SYNC("GetVencStreamProc done\n");
gs_VencTask[VencChn] = 0;
}
//注销venc 通道
s32Ret = CVI_VENC_DestroyChn(VencChn);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_DestroyChn vechn[%d] failed with %#x!\n", VencChn, s32Ret);
return CVI_FAILURE;
}
return CVI_SUCCESS;
}
【相关主题】
7.3.3. CVI_VENC_ResetChn¶
【描述】
复位通道。
【语法】
CVI_S32 CVI_VENC_ResetChn(VENC_CHN VeChn);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
Reset 并不存在的通道,返回失败 CVI_FAILURE。
如果一个通道没有停止接收图像而 reset 通道,则返回失败。
【举例】
无
7.3.4. CVI_VENC_StartRecvFrame¶
【描述】
开启编码通道接收输入图像,允许指定接收帧数,超出指定的帧数后自动停止接收图像。
【语法】
CVI_S32 CVI_VENC_StartRecvFrame(VENC_CHN VeChn, const VENC_RECV_PIC_PARAM_S *pstRecvParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
编码通道号。 |
输入 |
pstRecvParam |
接收图像参数结构体指针,用于指定需要接收的图像帧数。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
如果通道未创建,则返回失败
开启编码器接收之后才能开始接收图像编码。
【举例】
可参照
sample_common_venc.c
内SAMPLE_COMM_VENC_Start
函数。
CVI_S32 s32Ret;
VENC_RECV_PIC_PARAM_S stRecvParam;
//创建venc 通道
s32Ret = SAMPLE_COMM_VENC_Create(
pIc, VencChn, enType, enSize, enRcMode,
u32Profile, bRcnRefShareBuf, pstGopAttr);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("SAMPLE_COMM_VENC_Create failed with %d\n", s32Ret);
return CVI_FAILURE;
}
//设定venc bindmode 与否
if (pIc->bind_mode == VENC_BIND_VI) {
VI_PIPE ViPipe = 0;
VI_CHN ViChn = 0;
SAMPLE_COMM_VI_Bind_VENC(ViPipe, ViChn, VencChn);
} else if (pIc->bind_mode == VENC_BIND_VPSS) {
VPSS_GRP VpssGrp = 0;
VPSS_CHN VpssChn = 0;
SAMPLE_COMM_VPSS_Bind_VENC(VpssGrp, VpssChn, VencChn);
}
//指定接收frame 数,允许接收frame
stRecvParam.s32RecvPicNum = pIc->num_frames;
s32Ret = CVI_VENC_StartRecvFrame(VencChn, &stRecvParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_StartRecvPic failed with %d\n", s32Ret);
return CVI_FAILURE;
}
return CVI_SUCCESS;
【相关主题】
7.3.5. CVI_VENC_StopRecvFrame¶
【描述】
停止编码通道接收输入图像。
【语法】
CVI_S32 CVI_VENC_StopRecvFrame(VENC_CHN VeChn);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
编码通道号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
通道销毁前,需调用CVI_VENC_StopRecvFrame。
如通道未创建或信道已销毁,则返回失败。
调用此接口仅停止接收原始数据编码,码流 buffer 并不会被清除。
此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。
【举例】
可参照
sample_common_venc.c
内SAMPLE_COMM_VENC_Stop
函数。
【相关主题】
7.3.6. CVI_VENC_QueryStatus¶
【描述】
查询编码通道状态。
【语法】
CVI_S32 CVI_VENC_QueryStatus(VENC_CHN VeChn, VENC_CHN_STATUS_S *pstStatus);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstStatus |
编码通道的状态指针。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
如果通道未创建,则返回失败。
在编码通道状态结构体中,u32CurPacks 表示当前帧的码流包个数。在调用 CVI_VENC_GetStream 之前应确保 u32CurPacks 大于 0。
7.3.7. CVI_VENC_SetChnAttr¶
【描述】
设置编码通道属性。
【语法】
CVI_S32 CVI_VENC_SetChnAttr(VENC_CHN VeChn, const VENC_CHN_ATTR_S *pstChnAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstChnAttr |
编码通道属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
无
【举例】
无
7.3.8. CVI_VENC_GetChnAttr¶
【描述】
获取编码通道属性。
【语法】
CVI_S32 CVI_VENC_GetChnAttr(VENC_CHN VeChn, VENC_CHN_ATTR_S *pstChnAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstChnAttr |
编码通道属性指针。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
获取未创建的通道的属性,返回失败。
【举例】
7.3.9. CVI_VENC_GetStream¶
【描述】
获取编码的码流。
【语法】
CVI_S32 CVI_VENC_GetStream(VENC_CHN VeChn, VENC_STREAM_S *pstStream, CVI_S32 S32MilliSec);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstFrame |
码流结构体指针VENC_STREAM_S |
输出 |
S32MilliSec |
发送图像超时时间。 取值范围:[-1, +∞) -1:阻塞。 0:非阻塞。 大于 0:超时时间。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
venc 通道必须先创建,否则此函数会回传错误。
在非bind mode 状况下,CVI_VENC_SendFrame必须有调用过,否则CVI_VENC_GetStream将无法获得码流结构。
CVI_VENC_GetStream调用之前,可以搭配CVI_VENC_GetChnAttr,CVI_VENC_QueryStatus调用确保编码信道当下的正确性。
码流结构体 VENC_STREAM_S 包含 4 个部分:
码流包信息指针 pstPack 指向一组 VENC_PACK_S 的内存空间,该空间由调用者分配。
注意:pstPack空间必须在调用CVI_VENC_GetStream前给予对应空间,否则将回传错误。
【举例】
可参照sample_venc_lib.c内的SAMPLE_VENC_GetVencStreamProc:
while (pVencChnCtx->chnStat == CHN_STAT_START) {
VENC_CHN_STATUS_S stStat;
//bind mode 模式检查
if (pVencChnCtx->chnIc.bind_mode == VENC_BIND_DISABLE) {
CVI_S32 s32SetFrameMilliSec = 20000;
s32Ret = cviReadSrcFrame(pVencChnCtx->pstVFrame, pVencChnCtx->fpSrc);
s32Ret = CVI_VENC_SendFrame(VencChn, pVencChnCtx->pstFrameInfo, s32SetFrameMilliSec);
if (s32Ret == CVI_ERR_VENC_FRC_NO_ENC) {
continue;
} else if (s32Ret != CVI_SUCCESS) {
break;
}
}
//根据venc 通道状态,开始获取venc stream
if (pVencChnCtx->chnIc.bsMode == BS_MODE_QUERY_STAT) {
if (vencFd < 0) {
vencFd = CVI_VENC_GetFd(vencChn);
if (vencFd < 0) {
SAMPLE_PRT("CVI_VENC_GetFd failed with%#x!\n", vencFd);
break;
}
}
FD_ZERO(&readFds);
FD_SET(vencFd, &readFds);
timeoutVal.tv_sec = 1;
timeoutVal.tv_usec = 0;
ret = select(vencFd + 1, &readFds, NULL, NULL, &timeoutVal);
if (ret < 0) {
if (errno == EINTR)
continue;
SAMPLE_PRT("select failed!\n");
break;
} else if (ret == 0) {
SAMPLE_PRT("select timeout\n");
continue;
}
VENC_CHN_ATTR_S stVencChnAttr;
VENC_STREAM_S stStream;
s32Ret = CVI_VENC_GetChnAttr(VencChn, &stVencChnAttr);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_GetChnAttr, VencChn = %d, s32Ret = %d\n", VencChn, s32Ret);
break;
}
s32Ret = CVI_VENC_QueryStatus(VencChn, &stStat);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_QueryStatus, Vench = %d, s32Ret = %d\n",VencChn, s32Ret);
break;
}
if (!stStat.u32CurPacks) {
CVI_VENC_ERR("u32CurPacks = NULL!\n");
break;
}
//需先行赋予pstPack空间
stStream.pstPack = (VENC_PACK_S *)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks);
if (stStream.pstPack == NULL) {
CVI_VENC_ERR("malloc memory failed!\n");
break;
}
s32Ret = CVI_VENC_GetStream(VencChn, &stStream, -1);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_GetStream, VencChn = %d, s32Ret = %d\n", VencChn, s32Ret);
free(stStream.pstPack);
stStream.pstPack = NULL;
break;
}
//使用者可将取出的stStream存档或给予上层app
s32Ret = CVI_VENC_ReleaseStream(VencChn, &stStream);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_ReleaseStream, s32Ret = %d\n", s32Ret);
free(stStream.pstPack);
stStream.pstPack = NULL;
break;
}
free(stStream.pstPack);
stStream.pstPack = NULL;
}
}
7.3.10. CVI_VENC_ReleaseStream¶
【描述】
释放码流缓存。
【语法】
CVI_S32 CVI_VENC_ReleaseStream(VENC_CHN VeChn, VENC_STREAM_S *pstStream);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstStream |
VENC_STREAM_S属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
请确认venc通道已创建。
- 请确认CVI_VENC_ReleaseStream在CVI_VENC_GetStream之后,若提早调用CVI_VENC_ReleaseStream,则CVI_VENC_GetStream将不具备取得正确stream保证。
用户获取码流后必须及时释放已经获取的码流缓存,否则可能会导致码流 buffer 满,影响编码器编码。
【举例】
请参考 CVI_VENC_GetStream 的举例。
7.3.11. CVI_VENC_SendFrame¶
【描述】
送出影像以供编码。
【语法】
CVI_S32 CVI_VENC_SendFrame(VENC_CHN VeChn, const VIDEO_FRAME_INFO_S *pstFrame, CVI_S32 S32MilliSec);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstFrame |
VIDEO_FRAME_INFO_S 属性指针。 |
输入 |
S32MilliSec |
发送图像超时时间 输入取值范围:[-1,+∞ )
-1:阻塞。
0:非阻塞。
大于 0:超时时间。
|
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
此接口支持用户发送图像至编码信道,以进行编码。
调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图像。
【举例】
可参照 sample_venc_lib.c`内 `SAMPLE_VENC_GetVencStreamProc :
while (pVencChnCtx->chnStat == CHN_STAT_START) {
VENC_CHN_STATUS_S stStat;
if (pVencChnCtx->chnIc.bind_mode == VENC_BIND_DISABLE) {
CVI_S32 s32SetFrameMilliSec = 20000;
s32Ret = cviReadSrcFrame(pVencChnCtx->pstVFrame, pVencChnCtx->fpSrc);
if (s32Ret < 0) {
CVI_VENC_ERR("(chn %d) cviReadSrcFrame fail\n", VencChn);
break;
}
s32Ret = CVI_VENC_SendFrame(VencChn, pVencChnCtx->pstFrameInfo, s32SetFrameMilliSec);
if (s32Ret == CVI_ERR_VENC_FRC_NO_ENC) {
CVI_VENC_FRC("no encode\n");
continue;
} else if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_SendFrame, VencChn = %d, s32Ret = %d\n", VencChn, s32Ret);
break;
}
}
if (pVencChnCtx->chnIc.bsMode == BS_MODE_QUERY_STAT) {
VENC_CHN_ATTR_S stVencChnAttr;
VENC_STREAM_S stStream;
s32Ret = CVI_VENC_GetChnAttr(VencChn, &stVencChnAttr);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_GetChnAttr, VencChn = %d, s32Ret = %d\n", VencChn, s32Ret);
break;
}
s32Ret = CVI_VENC_QueryStatus(VencChn, &stStat);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_QueryStatus, Vench = %d, s32Ret = %d\n", VencChn, s32Ret);
break;
}
if (!stStat.u32CurPacks) {
CVI_VENC_ERR("u32CurPacks = NULL!\n");
break;
}
stStream.pstPack = (VENC_PACK_S *)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks);
if (stStream.pstPack == NULL) {
CVI_VENC_ERR("malloc memory failed!\n");
break;
}
s32Ret = CVI_VENC_GetStream(VencChn, &stStream, -1);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_GetStream, VencChn = %d, s32Ret = %d\n", VencChn, s32Ret);
free(stStream.pstPack);
stStream.pstPack = NULL;
break;
}
s32Ret = CVI_VENC_ReleaseStream(VencChn, &stStream);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_ReleaseStream, s32Ret = %d\n", s32Ret);
free(stStream.pstPack);
stStream.pstPack = NULL;
break;
}
free(stStream.pstPack);
stStream.pstPack = NULL;
}
if (pVencChnCtx->chnIc.bind_mode) {
if (pVencChnCtx->chnStat != pVencChnCtx->nextChnStat) {
s32Ret = CVI_VENC_QueryStatus(VencChn, &stStat);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_QueryStatus, Vench = %d, s32Ret = %d\n",
VencChn, s32Ret);
break;
}
CVI_VENC_TRACE("u32LeftStreamFrames = %d\n", stStat.u32LeftStreamFrames);
if (stStat.u32LeftStreamFrames <= 0) {
pVencChnCtx->chnStat = CHN_STAT_STOP;
CVI_VENC_SYNC("chnStat = CHN_STAT_STOP\n");
}
}
} else {
if (i >= pVencChnCtx->num_frames) {
pVencChnCtx->chnStat = CHN_STAT_STOP;
}
}
}
【相关主题】
7.3.12. CVI_VENC_GetFd¶
【描述】
获取编码通道对应的设备文件句柄。
【语法】
CVI_S32 CVI_VENC_GetFd(VENC_CHN VeChn);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
小于或等于0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
无
【举例】
无
【相关主题】
7.3.13. CVI_VENC_CloseFd¶
【描述】
取得通道handle。
【语法】
CVI_S32 CVI_VENC_CloseFd(VENC_CHN VeChn);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
正在使用 select方式监听 Stream时,不能关闭fd,会导致功能不正常。
【举例】
无
【相关主题】
7.3.14. CVI_VENC_SetJpegParam¶
【描述】
设置 JPEG 协议编码通道的高级参数。
【语法】
CVI_S32 CVI_VENC_SetJpegParam(VENC_CHN VeChn, const VENC_JPEG_PARAM_S *pstJpegParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstJpegParam |
JPEG 协议编码通道的高级参数集合指针。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
本接口用于设置 JPEG 协议编码通道的高级参数。
本接口使用于venc通道创建后。
高级参数主要参数组成
- u32Qfactor:量化表因子范围为[1, 99],u32Qfactor 越大,量化表中的量化系数越小,得到的图像质量会更好,同时,编码压缩率更低。同理 u32Qfactor 越小,量化表中的量化系数越大,得到的图像质量会更差,同时,编码压缩率更高。
其中u32Qfactor=50为预留自定义设置项,暂不支持设置
- u32MCUPerECS:每个 Ecs 中包含多少 Mcu。系统模式 u32MCUPerECS = 0, 表示当前帧的所有的 MCU 被编码为一个 ECS。u32MCUPerECS 的最小值为 0,最大值不超过(picwidth+15)>>4 * (picheight+15)>>4 * 2。
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。 建议用户在调用此接口之前,先调用 CVI_VENC_GetJpegParam 接口,获取当 前编码信道的 JpegParam 配置,然后再进行设置。
【举例】
请参照
sample_common_venc.c
内的SAMPLE_COMM_VENC_SetJpegParam
函数:
CVI_S32 SAMPLE_COMM_VENC_SetJpegParam(chnInputCfg *pIc, VENC_CHN VencChn)
{
VENC_JPEG_PARAM_S stJpegParam, *pstJpegParam = &stJpegParam;
CVI_S32 s32Ret = CVI_SUCCESS;
s32Ret = CVI_VENC_GetJpegParam(VencChn, pstJpegParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_GetJpegParam\n");
return CVI_FAILURE;
}
pstJpegParam->u32Qfactor = pIc->quality;
s32Ret = CVI_VENC_SetJpegParam(VencChn, pstJpegParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_SetJpegParam\n");
return CVI_FAILURE;
}
return s32Ret;
}
7.3.15. CVI_VENC_GetJpegParam¶
【描述】
获取 JPEG 协议编码通道的高级参数配置。
【语法】
CVI_S32 CVI_VENC_GetJpegParam(VENC_CHN VeChn, VENC_JPEG_PARAM_S *pstJpegParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstJpegParam |
JPEG 协议编码通道的高级参数集合指针。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
本接口在编码通道创建之后,编码通道销毁之前调用。
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
【举例】
请参见 CVI_VENC_SetJpegParam 的举例。
7.3.16. CVI_VENC_SetRcParam¶
【描述】
设置编码通道码率控制器的高级参数。
【语法】
CVI_S32 CVI_VENC_SetRcParam(VENC_CHN VeChn, const VENC_RC_PARAM_S *pstRcParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstRcParam |
编码通道码率控制器的高级参数。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
本接口在编码通道创建之后,编码通道销毁之前调用。
此函数调用于 CVI_VENC_CreateChn 之后, CVI_VENC_SetChnParam 之前。
建议用户先调用 CVI_VENC_GetRcParam 接口,获取 RC 高级参数,然后修改 相应参数,再调用本接口对高级参数进行设置。
【举例】
可参考
sample_common_venc.c``内 ``SAMPLE_COMM_VENC_SetRcParam
函数:
static CVI_S32 SAMPLE_COMM_VENC_SetRcParam(
chnInputCfg * pIc,
VENC_CHN VencChn)
{
CVI_S32 s32Ret;
VENC_RC_PARAM_S stRcParam, *pstRcParam = &stRcParam;
s32Ret = CVI_VENC_GetRcParam(VencChn, pstRcParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("GetRcParam failed!\n");
return CVI_FAILURE;
}
pstRcParam->s32FirstFrameStartQp = pIc->firstFrmstartQp;
if (!strcmp(pIc->codec, "264") && pIc->rcMode == 0) {
pstRcParam->stParamH264Cbr.u32MaxIQp = pIc->maxIqp;
pstRcParam->stParamH264Cbr.u32MinIQp = pIc->minIqp;
pstRcParam->stParamH264Cbr.u32MaxQp = pIc->maxQp;
pstRcParam->stParamH264Cbr.u32MinQp = pIc->minQp;
} else if (!strcmp(pIc->codec, "265") && pIc->rcMode == 0) {
pstRcParam->stParamH265Cbr.u32MaxIQp = pIc->maxIqp;
pstRcParam->stParamH265Cbr.u32MinIQp = pIc->minIqp;
pstRcParam->stParamH265Cbr.u32MaxQp = pIc->maxQp;
pstRcParam->stParamH265Cbr.u32MinQp = pIc->minQp;
} else if (!strcmp(pIc->codec, "264") && pIc->rcMode == 1) {
pstRcParam->stParamH264Vbr.u32MaxIQp = pIc->maxIqp;
pstRcParam->stParamH264Vbr.u32MinIQp = pIc->minIqp;
pstRcParam->stParamH264Vbr.u32MaxQp = pIc->maxQp;
pstRcParam->stParamH264Vbr.u32MinQp = pIc->minQp;
} else if (!strcmp(pIc->codec, "265") && pIc->rcMode == 1) {
pstRcParam->stParamH265Vbr.u32MaxIQp = pIc->maxIqp;
pstRcParam->stParamH265Vbr.u32MinIQp = pIc->minIqp;
pstRcParam->stParamH265Vbr.u32MaxQp = pIc->maxQp;
pstRcParam->stParamH265Vbr.u32MinQp = pIc->minQp;
}
CVI_VENC_TRACE("firstFrmstartQp = %d\n", pIc->firstFrmstartQp);
s32Ret = CVI_VENC_SetRcParam(VencChn, pstRcParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("SetRcParam failed!\n");
return CVI_FAILURE;
}
return s32Ret;
}
7.3.17. CVI_VENC_GetRcParam¶
【描述】
获取通道码率控制高级参数。
【语法】
CVI_S32 CVI_VENC_GetRcParam(VENC_CHN VeChn, VENC_RC_PARAM_S *pstRcParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstRcParam |
通道码率控制参数指针 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
本接口在编码通道创建之后,编码通道销毁之前调用。
建议用户在调用此接口之前,先调用 CVI_VENC_GetChnParam 接口,获取当前信道的参数配置,然后再进行设置。
【举例】
无。
7.3.18. CVI_VENC_SetChnParam¶
【描述】
设置通道参数。
【语法】
CVI_S32 CVI_VENC_SetChnParam(VENC_CHN VeChn, const VENC_CHN_PARAM_S *pstChnParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstChnParam |
Venc 的通道参数。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
本接口在编码通道创建之后,编码通道销毁之前调用。
此函数调用于 CVI_VENC_CreateChn 之后, CVI_VENC_SetChnParam 之前。
此函数API参数支持venc crop设定,其使用参数为:VENC_CHN_PARAM_S,stCropCfg。可设定对应的x,y轴及宽(width),高(height)。
【举例】
CVI_S32 SAMPLE_COMM_VENC_SetChnParam(chnInputCfg *pIc, VENC_CHN VencChn)
{
VENC_CHN_PARAM_S stChnParam, *pstChnParam = &stChnParam;
CVI_S32 s32Ret = CVI_SUCCESS;
s32Ret = CVI_VENC_GetChnParam(VencChn, pstChnParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_GetJpegParam\n");
return CVI_FAILURE;
}
pstChnParam->stCropCfg.bEnable = (pIc->posX || pIc->posY);
pstChnParam->stCropCfg.stRect.s32X = pIc->posX;
pstChnParam->stCropCfg.stRect.s32Y = pIc->posY;
pstChnParam->stCropCfg.stRect.u32Width = pIc->width;
pstChnParam->stCropCfg.stRect.u32Height = pIc->height;
s32Ret = CVI_VENC_SetChnParam(VencChn, pstChnParam);
if (s32Ret != CVI_SUCCESS) {
CVI_VENC_ERR("CVI_VENC_SetJpegParam\n");
return CVI_FAILURE;
}
return s32Ret;
}
7.3.19. CVI_VENC_GetChnParam¶
【描述】
获取通道参数。
【语法】
CVI_S32 CVI_VENC_GetChnParam(VENC_CHN VeChn, VENC_CHN_PARAM_S *pstChnParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstChnParam |
Venc 的通道参数指针。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
无
【举例】
无
7.3.20. CVI_VENC_RequestIDR¶
【描述】
请求 IDR 帧。
【语法】
CVI_S32 CVI_VENC_RequestIDR(VENC_CHN VeChn, CVI_BOOL bInstant);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
bInstant |
是否使能立即编码 IDR 帧 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
如果通道未创建,则返回失败。
接受 IDR 帧请求后,不论bInstant =0 与否,立即编出 IDR 帧,不受帧率控制约束。
IDR 帧请求,只支持 H.264/H.265 编码协议。
此接口不受帧率控制影响,每调用一次即编出一个 IDR,调用频繁会影响码 流帧率和码率的稳定。
在下一帧编码启动前多次接口调用只会编出一个 IDR。原帧已为IDR 帧时不生效 。
当 高级跳帧始能时,请求 IDR 帧可能会延时生效。
【举例】
无
7.3.21. CVI_VENC_SetRoiAttr¶
【描述】
设置 H.264/H.265 通道的 ROI 属性。
【语法】
CVI_S32 CVI_VENC_SetRoiAttr(VENC_CHN VeChn, const VENC_ROI_ATTR_S *pstRoiAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstRoiAttr |
ROI 区域参数。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
u32Index:支持每个通道可设置 8 个 ROI 区域,按照 0~7索引号对 ROI 区域进行管理,u32Index 表示的用户设置 ROI 的索引号。重复区域按照 0~7 的ROI索引号依次提高优先级。
bEnable:指定当前的 ROI 区域是否使能。
bAbsQp:指定当前的ROI 区域使用绝对 QP或是相对 QP模式。
s32Qp:当 bAbsQp 为 CVI_TRUE 时,s32Qp为对ROI 区域设定的 Qp 值,当 bAbsQp 为 CVI_FALSE时,s32Qp表示对ROI 区域内部码率控制之 Qp 加上设定的 Qp 偏移值。
stRect:指定当前的 ROI 区域的位置坐标和区域的大小。ROI 区域必须在图像范围内。
系统默认没有 ROI 区域使能,用户必须在编码通道创建之后,编码通道销毁之前设置调用此接口启动 ROI。 此接口在编码过程中被调用时,等到下一个帧时生效。
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。 建议用户在调用此接口之前,先调用 CVI_VENC_GetRoiAttr 接口,获取当前信道的 ROI 配置后再进行设置。
设置该接口后,如果当前帧判断编码为 pskip 帧,以 pskip 帧效果优先。
当码率控制模式不为 Fixed QP模式时, ROI 区域可配置。
H.264当ROI始能时, 宏块级码率控制失效。
绝对 Qp 模式因为码率控制调适宏块 QP, 实际编码QP与设置之QP可能会有些差异。
【举例】
无
7.3.22. CVI_VENC_GetRoiAttr¶
【描述】
获取H.264/H.265 通道的 ROI 属性。
【语法】
CVI_S32 CVI_VENC_GetRoiAttr(VENC_CHN VeChn, CVI_U32 u32Index, VENC_ROI_ATTR_S *pstRoiAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
u32Index |
ROI 区域索引。 |
输入 |
pstRoiAttr |
ROI 区域参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
依照u32Index索引获取该ROI 区域配置
用户必须在编码通道创建之后,编码通道销毁之前设置调用此接口
建议用户在调用 CVI_VENC_SetRoiAttr 接口之前,先调用此接口,获取当前信道的 ROI 配置后再进行设置。
【举例】
无
7.3.23. CVI_VENC_SetRefParam¶
【描述】
设置 H.264/H.265 编码通道高级跳帧参考参数。
【语法】
CVI_S32 CVI_VENC_SetRefParam(VENC_CHN VeChn, const VENC_REF_PARAM_S *pstRefParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstRefParam |
H.264/H.265 编码通道高级跳帧参考参数。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
H.264 和 H.265均支持1倍、2倍、以及4倍跳帧参考模式。默认为1倍跳帧参考模式 (不跳帧) 。
需在创建通道之后,启动编码之前调用此接口,避免在编码过程中调用。
1 倍跳帧参考模式设置的配置为:bEnablePred = HI_TRUE, u32Enhance = 0,u32Base = 1
2 倍跳帧参考模式设置的配置为: bEnablePred = HI_TRUE,u32Enhance = 1,u32Base = 1。
4 倍跳帧参考模式设置的配置为:bEnablePred = HI_TRUE,u32Enhance = 1,u32Base = 2
用户设置通道的 Gop Mode为NormalP时,2 倍跳帧参考模式的u32Gop需为2的倍数;4倍跳帧参考模式的u32Gop需为4的倍数
用户设置通道的Gop Mode为SmartP时,2倍跳帧参考模式的u32Gop与 u32BgInterval 需为2的倍数;4倍跳帧参考模式的u32Gop与 u32BgInterval 需为4的倍数
7.3.24. CVI_VENC_GetRefParam¶
【描述】
获取 H.264/H.265 编码通道高级跳帧参考参数。
【语法】
CVI_S32 CVI_VENC_GetRefParam(VENC_CHN VeChn, VENC_REF_PARAM_S *pstRefParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstRefParam |
H.264/H.265 编码通道高级跳帧参考参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
无
【举例】
无
7.3.25. CVI_VENC_SetFrameLostStrategy¶
【描述】
设置编码通道瞬时码率超过阈值时丢帧策略。
【语法】
CVI_S32 CVI_VENC_SetFrameLostStrategy(VENC_CHN VeChn, const VENC_FRAMELOST_S *pstFrmLostParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstFrmLostParam |
编码通道丢帧策略的参数。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
丢帧策略只支持 H.264/H.265 编码协议。
丢帧策略配置由四个参数决定
bFrmLostOpen:当码率超过阈值时开启丢帧,确保区间码率尖峰值不会过高。
enFrmLostMode:仅支持编码为 PSkip帧之丢帧方式
u32FrmLostBpsThr:依照系统能力设置,建议至少设置码率的1.2倍以上
u32EncFrmGaps:限制最大连续丢帧个数可使丢帧时期之画面较顺畅,区间码率尖峰值可能较高。设置为 0 时表示为不限制连续丢帧数,表示瞬时码率超出阈值允许一直丢帧,直到瞬时码率不大于阈值
用户可以选择性调用,默认为不开启丢帧策略
本接口在编码通道创建之后,编码通道销毁之前设置。
pskip 帧仅支持GOP模式为VENC_GOPMODE_NORMALP的编码通道。 如当前帧OSD使能且OSD有更新,不能编码为Pskip帧。
使能跳帧参考模式时,不建议开启丢帧策略
仅支持H.264 / H.265的CBR / VBR码率控制模式
【举例】
无
7.3.26. CVI_VENC_GetFrameLostStrategy¶
【描述】
设置编码通道瞬时码率超过阈值时丢帧策略。
【语法】
CVI_S32 CVI_VENC_GetFrameLostStrategy(VENC_CHN VeChn, VENC_FRAMELOST_S *pstFrmLostParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
VENC Channel 号。 |
输入 |
pstFrmLostParam |
编码通道丢帧策略的参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
无
【举例】
无
7.3.27. CVI_VENC_SetModParam¶
【描述】
设置编码相关的模块参数。
【语法】
CVI_S32 CVI_VENC_SetModParam(const VENC_PARAM_MOD_S *pstModParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
pstModParam |
编码模块参数指针。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
此接口可以在通道创建前后调用。
此接口主要用于设置对应编码VB pool获取方式,用户可透过结构体 VENC_PARAM_MOD_S 内的 VB_SOURCE_E 类型变量设定VB mode。
【举例】
无
7.3.28. CVI_VENC_GetModParam¶
【描述】
获取编码相关的模块参数。
【语法】
CVI_S32 CVI_VENC_GetModParam(VENC_PARAM_MOD_S *pstModParam);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
pstModParam |
编码模块参数指针。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
通常在 CVI_VENC_SetModParam 调用前搭配使用。
【举例】
无
7.3.29. CVI_VENC_AttachVbPool¶
【描述】
将编码通道绑定到某个视频缓存 VB 池中。
【语法】
CVI_S32 CVI_VENC_AttachVbPool(VENC_CHN VeChn, const VENC_CHN_POOL_S *pstPool);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pstPool |
视频缓存VB 池的 Id 号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h、cvi_comm_vb.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
用户必须调用接口 CVI_VB_CreatePool 创建一个视频缓存 VB 池,再通过调用 接口 CVI_VENC_AttachVbPool 把当前编码通道绑定到固定PoolId的VB 池中。可以把多个编码通道绑定到同一个 VB 池中,但是不能把同一个编码通道绑定到多个VB池中。
pstPool必须是已创建VB 池的有效 PoolId,包含存储 Picture 的 VB 池和存储存储 Picture 信息的VB 池。
只有H.264 / H.265编码支持UserVB池方式。如果当前编码帧存分配方式使用的不是编码UserVB池,则返回CVI_FAILURE。
用户调用此接口,必须确定透过 CVI_VENC_SetModParam 设定在 VB_SOURCE_USER 模式。
【举例】
无
7.3.30. CVI_VENC_DetachVbPool¶
【描述】
将编码通道从某个视频缓存 VB 池中解绑定。
【语法】
CVI_S32 CVI_VENC_DetachVbPool(VENC_CHN VeChn);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h、cvi_comm_vb.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
【举例】
无
7.3.31. CVI_VENC_GetH264Entropy¶
【描述】
获取H264熵编码信息
【语法】
CVI_S32 CVI_VENC_GetH264Entropy(VENC_CHN VeChn, VENC_H264_ENTROPY_S *pstH264EntropyEnc);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号 |
输入/输出 |
pstH264EntropyEnc |
熵编码结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
【举例】
无
7.3.32. CVI_VENC_SetH264Entropy¶
【描述】
设置H264熵编码信息
【语法】
CVI_S32 CVI_VENC_SetH264Entropy(VENC_CHN VeChn, const VENC_H264_ENTROPY_S *pstH264EntropyEnc);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pstH264EntropyEnc |
熵编码结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
【举例】
无
7.3.33. CVI_VENC_InsertUserData¶
【描述】
插入用户数据
【语法】
CVI_S32 CVI_VENC_InsertUserData(VENC_CHN VeChn, CVI_U8 *pu8Data, CVI_U32 u32Len);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pu8Data |
数据首地址 |
输入 |
u32Len |
数据长度 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
【举例】
无
7.3.34. CVI_VENC_GetCuPrediction¶
【描述】
获取CU单元的预测信息
【语法】
CVI_S32 CVI_VENC_GetCuPrediction(VENC_CHN VeChn, VENC_CU_PREDICTION_S *pstCuPrediction);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号 |
输入 |
pstCuPrediction |
预测信息结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
此接口目前仅对H264编码有效
【举例】
无
7.3.35. CVI_VENC_SetCuPrediction¶
【描述】
设置CU单元的预测信息
【语法】
CVI_S32 CVI_VENC_SetCuPrediction(VENC_CHN VeChn, VENC_CU_PREDICTION_S *pstCuPrediction);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号 |
输入 |
pstCuPrediction |
预测结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
此接口目前仅对H264编码有效
【举例】
无
7.3.36. CVI_VENC_GetH264Trans¶
【描述】
获取 H.264协议编码通道的变换、量化属性。
【语法】
CVI_S32 CVI_VENC_GetH264Trans(VENC_CHN VeChn, VENC_H264_TRANS_S *pstH264Trans);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pstH264Trans |
H.264 协议编码通道的变换、量化参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
此接口目前仅对H264编码有效
【举例】
无
7.3.37. CVI_VENC_SetH264Trans¶
【描述】
设置H.264协议编码通道的变换、量化属性
【语法】
CVI_S32 CVI_VENC_SetH264Trans(VENC_CHN VeChn, const VENC_H264_TRANS_S *pstH264Trans);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pstH264Trans |
H.264协议编码通道的变换、量化参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
此接口目前仅对H264编码有效
【举例】
无
7.3.38. CVI_VENC_GetH265Trans¶
【描述】
获取 H.265协议编码通道的变换、量化属性
【语法】
CVI_S32 CVI_VENC_GetH265Trans(VENC_CHN VeChn, VENC_H265_TRANS_S *pstH265Trans);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pstH265Trans |
H.265协议编码通道的变换、量化参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
此接口目前仅对H265编码有效
【举例】
无
7.3.39. CVI_VENC_SetH265Trans¶
【描述】
设置H.265协议编码通道的变换、量化属性
【语法】
CVI_S32 CVI_VENC_SetH265Trans(VENC_CHN VeChn, const VENC_H265_TRANS_S *pstH265Trans);
【参数】
参数名称 |
描述 |
输入/输出 |
---|---|---|
VeChn |
通道号。 |
输入 |
pstH265Trans |
H.265协议编码通道的变换、量化参数。 |
输出 |
【返回值】
返回值 |
描述 |
---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码 。 |
【需求】
头文件:cvi_comm_venc.h、cvi_venc.h
库文件:libvenc.a
【注意】
必须保证通道已创建,否则会返回CVI_FAILURE的错误码。
此接口目前仅对H265编码有效
【举例】
无