7.3. API参考

视频编码模块主要提供视频编码通道的创建和销毁、视频编码通道的复位、开启和停止接收图像、设置和获取编码通道属性、获取和释放码流等功能。

提供以下 API:

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.cSAMPLE_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.cSAMPLE_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.cSAMPLE_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 满,影响编码器编码。

【举例】

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

【注意】

  • 本接口在编码通道创建之后,编码通道销毁之前调用。

  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

【举例】

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

【注意】

【举例】

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编码有效

【举例】