ISVP-SDK  3.12.0
Ingenic Smart Video Platform SDK
结构体 | 枚举 | 函数

视频编码(H264, JPEG)模块,包含编码通道管理,编码参数设置等功能 更多...

IMP_Encoder 的协作图:

结构体

struct  IMPEncoderFrmRate
 定义编码channel帧率结构体,frmRateNum和frmRateDen经过最大公约数整除后两者之间的最小公倍数不能超过64,最好在设置之前就被最大公约数整除 更多...
 
struct  IMPEncoderAttrH264FixQP
 定义H.264编码Channel Fixqp属性结构 更多...
 
struct  IMPEncoderAttrH264CBR
 定义H.264编码Channel CBR属性结构 更多...
 
struct  IMPEncoderAttrH264VBR
 定义H.264编码Channel VBR属性结构 更多...
 
struct  IMPEncoderAttrH264Smart
 定义H.264编码Channel Smart属性结构 更多...
 
struct  IMPEncoderAttrDemask
 定义H.264编码Channel去马赛克属性 更多...
 
struct  IMPEncoderAttrDenoise
 定义H.264编码Channel去噪属性,一经使能不能改变,但去噪类型可以动态改变; 更多...
 
struct  IMPEncoderAttrFrmUsed
 定义H.264编码Channel输入帧使用模式属性 更多...
 
struct  IMPEncoderAttrHSkip
 定义H264高级跳帧类型结构体 更多...
 
struct  IMPEncoderAttrInitHSkip
 定义H264高级跳帧类型初始化结构体 更多...
 
struct  IMPEncoderAttrRcMode
 定义编码Channel码率控制器码率控制模式属性 更多...
 
struct  IMPEncoderRcAttr
 定义编码Channel码率控制器属性 更多...
 
union  IMPEncoderDataType
 定义编码码流类型 更多...
 
struct  IMPEncoderPack
 定义帧码流包结构体 更多...
 
struct  IMPEncoderStream
 定义帧码流类型结构体 更多...
 
struct  IMPEncoderCropCfg
 定义编码器裁剪属性,针对输入编码器的图像先做裁剪,与编码通道的尺寸进行比较再做缩放 更多...
 
struct  IMPEncoderUserDataCfg
 定义编码器插入用户数据属性,只针对H264 更多...
 
struct  IMPEncoderAttr
 定义编码器属性结构体 更多...
 
struct  IMPEncoderCHNAttr
 定义编码Channel属性结构体 更多...
 
struct  IMPEncoderCHNStat
 定义编码Channel的状态结构体 更多...
 
struct  IMPEncoderColor2GreyCfg
 定义彩转灰(C2G)参数 更多...
 
struct  IMPEncoderEnIDRCfg
 定义设置EnableIDR参数 更多...
 
struct  IMPEncoderGOPSizeCfg
 定义设置gopsize参数 更多...
 
struct  IMPEncoderROICfg
 定义设置ROI参数 更多...
 
struct  IMPEncoderSuperFrmCfg
 超大帧处理策略参数 更多...
 
struct  IMPEncoderH264TransCfg
 定义 H.264 协议编码通道变换、量化结构体 更多...
 
struct  IMPEncoderJpegeQl
 

枚举

enum  IMPEncoderRcMode {
  ENC_RC_MODE_FIXQP = 0, ENC_RC_MODE_CBR = 1, ENC_RC_MODE_VBR = 2, ENC_RC_MODE_SMART = 3,
  ENC_RC_MODE_INV = 4
}
 定义编码Channel码率控制器模式 更多...
 
enum  EncFrmUsedMode { ENC_FRM_BYPASS = 0, ENC_FRM_REUSED = 1, ENC_FRM_SKIP = 2 }
 定义H.264编码Channel输入帧使用模式 更多...
 
enum  IMPSkipType {
  IMP_Encoder_STYPE_N1X = 0, IMP_Encoder_STYPE_N2X = 1, IMP_Encoder_STYPE_N4X = 2, IMP_Encoder_STYPE_HN1_FALSE = 3,
  IMP_Encoder_STYPE_HN1_TRUE = 4, IMP_Encoder_STYPE_H1M_FALSE = 5, IMP_Encoder_STYPE_H1M_TRUE = 6
}
 
enum  IMPRefType { IMP_Encoder_FSTYPE_IDR = 0, IMP_Encoder_FSTYPE_LBASE = 1, IMP_Encoder_FSTYPE_SBASE = 2, IMP_Encoder_FSTYPE_ENHANCE = 3 }
 
enum  IMPEncoderH264NaluType {
  IMP_H264_NAL_UNKNOWN = 0, IMP_H264_NAL_SLICE = 1, IMP_H264_NAL_SLICE_DPA = 2, IMP_H264_NAL_SLICE_DPB = 3,
  IMP_H264_NAL_SLICE_DPC = 4, IMP_H264_NAL_SLICE_IDR = 5, IMP_H264_NAL_SEI = 6, IMP_H264_NAL_SPS = 7,
  IMP_H264_NAL_PPS = 8, IMP_H264_NAL_AUD = 9, IMP_H264_NAL_FILLER = 12
}
 H264码流NALU类型 更多...
 
enum  IMPEncoderSuperFrmMode { IMP_RC_SUPERFRM_NONE = 0, IMP_RC_SUPERFRM_DISCARD = 1, IMP_RC_SUPERFRM_REENCODE = 2, IMP_RC_SUPERFRM_BUTT = 3 }
 定义码率控制中超大帧处理模式 更多...
 
enum  IMPEncoderRcPriority { IMP_RC_PRIORITY_RDO = 0, IMP_RC_PRIORITY_BITRATE_FIRST = 1, IMP_RC_PRIORITY_FRAMEBITS_FIRST = 2, IMP_RC_PRIORITY_BUTT = 3 }
 码率控制优先级枚举 更多...
 

函数

int IMP_Encoder_CreateGroup (int encGroup)
 创建编码Group 更多...
 
int IMP_Encoder_DestroyGroup (int encGroup)
 销毁编码Grouop. 更多...
 
int IMP_Encoder_CreateChn (int encChn, const IMPEncoderCHNAttr *attr)
 创建编码Channel 更多...
 
int IMP_Encoder_DestroyChn (int encChn)
 销毁编码Channel 更多...
 
int IMP_Encoder_GetChnAttr (int encChn, IMPEncoderCHNAttr *const attr)
 获取编码Channel的属性 更多...
 
int IMP_Encoder_RegisterChn (int encGroup, int encChn)
 注册编码Channel到Group 更多...
 
int IMP_Encoder_UnRegisterChn (int encChn)
 反注册编码Channel到Group 更多...
 
int IMP_Encoder_StartRecvPic (int encChn)
 开启编码Channel接收图像 更多...
 
int IMP_Encoder_StopRecvPic (int encChn)
 停止编码Channel接收图像 更多...
 
int IMP_Encoder_Query (int encChn, IMPEncoderCHNStat *stat)
 查询编码Channel状态 更多...
 
int IMP_Encoder_GetStream (int encChn, IMPEncoderStream *stream, bool blockFlag)
 获取编码的码流 更多...
 
int IMP_Encoder_ReleaseStream (int encChn, IMPEncoderStream *stream)
 释放码流缓存 更多...
 
int IMP_Encoder_PollingStream (int encChn, uint32_t timeoutMsec)
 Polling码流缓存 更多...
 
int IMP_Encoder_SetMaxStreamCnt (int encChn, int nrMaxStream)
 设置码流缓存Buffer个数 更多...
 
int IMP_Encoder_GetMaxStreamCnt (int encChn, int *nrMaxStream)
 获取码流Buffer数 更多...
 
int IMP_Encoder_RequestIDR (int encChn)
 请求IDR帧 更多...
 
int IMP_Encoder_FlushStream (int encChn)
 刷掉编码器里残留的旧码流,并以IDR帧开始编码 更多...
 
int IMP_Encoder_SetChnColor2Grey (int encChn, const IMPEncoderColor2GreyCfg *pstColor2Grey)
 设置彩转灰功能 更多...
 
int IMP_Encoder_GetChnColor2Grey (int encChn, IMPEncoderColor2GreyCfg *pstColor2Grey)
 获取彩转灰功能属性 更多...
 
int IMP_Encoder_SetChnAttrRcMode (int encChn, const IMPEncoderAttrRcMode *pstRcModeCfg)
 设置码率控制模式属性 更多...
 
int IMP_Encoder_GetChnAttrRcMode (int encChn, IMPEncoderAttrRcMode *pstRcModeCfg)
 获取码率控制模式属性 更多...
 
int IMP_Encoder_SetChnFrmRate (int encChn, const IMPEncoderFrmRate *pstFps)
 动态设置帧率控制属性 更多...
 
int IMP_Encoder_GetChnFrmRate (int encChn, IMPEncoderFrmRate *pstFps)
 获取帧率控制属性 更多...
 
int IMP_Encoder_SetChnROI (int encChn, const IMPEncoderROICfg *pstVencRoiCfg)
 设置通道ROI属性 更多...
 
int IMP_Encoder_GetChnROI (int encChn, IMPEncoderROICfg *pstVencRoiCfg)
 获取通道ROI属性 更多...
 
int IMP_Encoder_GetGOPSize (int encChn, IMPEncoderGOPSizeCfg *pstGOPSizeCfg)
 获取通道GOP属性 更多...
 
int IMP_Encoder_SetGOPSize (int encChn, const IMPEncoderGOPSizeCfg *pstGOPSizeCfg)
 设置通道GOP属性 更多...
 
int IMP_Encoder_SetChnDemask (int encChn, const IMPEncoderAttrDemask *pdemaskAttr)
 设置通道去马赛克属性 更多...
 
int IMP_Encoder_GetChnDemask (int encChn, IMPEncoderAttrDemask *pdemaskAttr)
 获取通道去马赛克属性 更多...
 
int IMP_Encoder_SetChnFrmUsedMode (int encChn, const IMPEncoderAttrFrmUsed *pfrmUsedAttr)
 设置通道输入帧使用模式属性 更多...
 
int IMP_Encoder_GetChnFrmUsedMode (int encChn, IMPEncoderAttrFrmUsed *pfrmUsedAttr)
 获取通道输入帧使用模式属性 更多...
 
int IMP_Encoder_SetChnDenoise (int encChn, const IMPEncoderAttrDenoise *pdenoiseAttr)
 设置通道去噪属性 更多...
 
int IMP_Encoder_GetChnDenoise (int encChn, IMPEncoderAttrDenoise *pdenoiseAttr)
 获取通道去噪属性 更多...
 
int IMP_Encoder_SetChnHSkip (int encChn, const IMPEncoderAttrHSkip *phSkipAttr)
 设置通道高级跳帧属性 更多...
 
int IMP_Encoder_GetChnHSkip (int encChn, IMPEncoderAttrHSkip *phSkipAttr)
 获取通道高级跳帧属性 更多...
 
int IMP_Encoder_SetChnHSkipBlackEnhance (int encChn, const int bBlackEnhance)
 设置通道高级跳帧中bBlackEnhance属性 更多...
 
int IMP_Encoder_InsertUserData (int encChn, void *userData, uint32_t userDataLen)
 插入用户数据 更多...
 
int IMP_Encoder_SetFisheyeEnableStatus (int encChn, int enable)
 设置Ingenic提供的鱼眼矫正算法的使能状态 更多...
 
int IMP_Encoder_GetFisheyeEnableStatus (int encChn, int *enable)
 获取Ingenic提供的鱼眼矫正算法的使能状态 更多...
 
int IMP_Encoder_SetChangeRef (int encChn, int bEnable)
 设置是否允许改变BASE帧参考方式的状态 更多...
 
int IMP_Encoder_GetChangeRef (int encChn, int *bEnable)
 获取是否允许改变BASE帧参考方式的状态 更多...
 
int IMP_Encoder_SetMbRC (int encChn, int bEnable)
 设置是否开启宏块级qp控制 更多...
 
int IMP_Encoder_GetMbRC (int encChn, int *bEnable)
 获取是否开启宏块级qp控制的状态 更多...
 
int IMP_Encoder_SetSuperFrameCfg (int encChn, const IMPEncoderSuperFrmCfg *pstSuperFrmParam)
 设置编码超大帧配置 更多...
 
int IMP_Encoder_GetSuperFrameCfg (int encChn, IMPEncoderSuperFrmCfg *pstSuperFrmParam)
 获取编码超大帧配置 更多...
 
int IMP_Encoder_SetH264TransCfg (int encChn, const IMPEncoderH264TransCfg *pstH264TransCfg)
 设置 H.264 协议编码通道的变换、量化的属性 更多...
 
int IMP_Encoder_GetH264TransCfg (int encChn, IMPEncoderH264TransCfg *pstH264TransCfg)
 获取 H.264 协议编码通道的变换、量化属性 更多...
 
int IMP_Encoder_SetJpegeQl (int encChn, const IMPEncoderJpegeQl *pstJpegeQl)
 设置 JPEG 协议编码通道的量化表配置参数 更多...
 
int IMP_Encoder_GetJpegeQl (int encChn, IMPEncoderJpegeQl *pstJpegeQl)
 获取 JPEG 协议编码通道的量化表配置参数 更多...
 

详细描述

视频编码(H264, JPEG)模块,包含编码通道管理,编码参数设置等功能

1 模块结构

Encoder模块内部结构如下如:

encoder_struct.jpg

如上图所示,编码模块由若干个Group组成(在T15上支持两个Group),每个Group由编码Channel组成。 每个编码Channel附带一个输出码流缓冲区,这个缓冲区由多个buffer组成。

2 编码Channel

一个编码Channel可以完成一种协议的编码。每个Group可以添加一个H264编码Channel与一个JPEG编码Channel。

3 码率控制

3.1 CBR

CBR(Constent Bit Rate)恒定比特率,即在码率统计时间内编码码率恒定。 以H.264 编码为例,用户可设置maxQp,minQp,bitrate等。 maxQp,minQp 用于控制图像的质量范围, bitrate 用于钳位码率统计时间内的平均编码码率。 当编码码率大于恒定码率时,图像QP 会逐步向maxQp 调整,当编码码率远小于恒定码率时,图像QP 会逐步向minQp 调整。 当图像QP 达到maxQp 时,QP 被钳位到最大值,bitrate 的钳位效果失效,编码码率有可能会超出bitrate。 当图像QP 达到minQp 时,QP 被钳位到最小值,此时编码的码率已经达到最大值,而且图像质量最好。

3.2 FixQP

Fix Qp 固定Qp 值。在码率统计时间内,编码图像所有宏块Qp 值相同,采用用户设定的图像Qp值。

枚举类型说明

定义H.264编码Channel输入帧使用模式

枚举值
ENC_FRM_BYPASS 

顺序全使用模式-默认模式

ENC_FRM_REUSED 

重复使用帧模式

ENC_FRM_SKIP 

丢帧模式

H264码流NALU类型

枚举值
IMP_H264_NAL_UNKNOWN 

未指定

IMP_H264_NAL_SLICE 

一个非IDR图像的编码条带

IMP_H264_NAL_SLICE_DPA 

编码条带数据分割块A

IMP_H264_NAL_SLICE_DPB 

编码条带数据分割块B

IMP_H264_NAL_SLICE_DPC 

编码条带数据分割块C

IMP_H264_NAL_SLICE_IDR 

IDR图像的编码条带

IMP_H264_NAL_SEI 

辅助增强信息 (SEI)

IMP_H264_NAL_SPS 

序列参数集

IMP_H264_NAL_PPS 

图像参数集

IMP_H264_NAL_AUD 

访问单元分隔符

IMP_H264_NAL_FILLER 

填充数据

定义编码Channel码率控制器模式

枚举值
ENC_RC_MODE_FIXQP 

Fixqp 模式

ENC_RC_MODE_CBR 

CBR 模式

ENC_RC_MODE_VBR 

VBR 模式

ENC_RC_MODE_SMART 

Smart 模式

ENC_RC_MODE_INV 

INV 模式

码率控制优先级枚举

枚举值
IMP_RC_PRIORITY_RDO 

目标码率与质量平衡

IMP_RC_PRIORITY_BITRATE_FIRST 

目标码率优先

IMP_RC_PRIORITY_FRAMEBITS_FIRST 

超大帧阈值优先

定义码率控制中超大帧处理模式

枚举值
IMP_RC_SUPERFRM_NONE 

无特殊策略, 支持

IMP_RC_SUPERFRM_DISCARD 

丢弃超大帧, 不支持, 由调用者自己决定是否丢弃

IMP_RC_SUPERFRM_REENCODE 

重编超大帧, 支持

enum IMPRefType
枚举值
IMP_Encoder_FSTYPE_IDR 

高级跳帧模式中的关键帧

IMP_Encoder_FSTYPE_LBASE 

高级跳帧模式中的长期基本帧

IMP_Encoder_FSTYPE_SBASE 

高级跳帧模式中的短期基本帧

IMP_Encoder_FSTYPE_ENHANCE 

高级跳帧模式中的增强帧

枚举值
IMP_Encoder_STYPE_N1X 

1倍跳帧参考

IMP_Encoder_STYPE_N2X 

2倍跳帧参考

IMP_Encoder_STYPE_N4X 

4倍跳帧参考

IMP_Encoder_STYPE_HN1_FALSE 

高级跳帧模式:N1开放跳帧

IMP_Encoder_STYPE_HN1_TRUE 

高级跳帧模式:N1封闭跳帧

IMP_Encoder_STYPE_H1M_FALSE 

高级跳帧模式:1M开放跳帧

IMP_Encoder_STYPE_H1M_TRUE 

高级跳帧模式:1M封闭跳帧

函数说明

int IMP_Encoder_CreateChn ( int  encChn,
const IMPEncoderCHNAttr attr 
)

创建编码Channel

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]attr编码Channel属性指针
返回值
0成功
非0失败
备注
编码Channel属性由两部分组成,编码器属性和码率控制属性
编码器属性首先需要选择编码协议,然后分别对各种协议对应的属性进行赋值
int IMP_Encoder_CreateGroup ( int  encGroup)

创建编码Group

参数
[in]encGroupGroup号,取值范围:[0, NR_MAX_ENC_GROUPS - 1]
返回值
0成功
非0失败
备注
一路Group仅支持一路分辨率,不同分辨率需启动新的Group。一路Group同时支持一路H264和一路JPEG抓拍
注意
如果指定的Group已经存在,则返回失败
int IMP_Encoder_DestroyChn ( int  encChn)

销毁编码Channel

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
注意
销毁并不存在的Channel,则返回失败
销毁前必须保证Channel已经从Group反注册,否则返回失败
int IMP_Encoder_DestroyGroup ( int  encGroup)

销毁编码Grouop.

参数
[in]encGroupGroup号,取值范围:[0, NR_MAX_ENC_GROUPS - 1]
返回值
0成功
非0失败
备注
销毁Group时,必须保证Group为空,即没有任何Channel在Group中注册,或注册到Group中 的Channel已经反注册,否则返回失败
注意
销毁并不存在的Group,则返回失败
int IMP_Encoder_FlushStream ( int  encChn)

刷掉编码器里残留的旧码流,并以IDR帧开始编码

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
备注
在调用此API后,会在最近的编码帧申请IDR帧编码。
注意
int IMP_Encoder_GetChangeRef ( int  encChn,
int *  bEnable 
)

获取是否允许改变BASE帧参考方式的状态

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]enable返回是否允许改变BASE帧参考方式的状态,0:不允许改变,1,允许改变
返回值
0成功
非0失败
备注
此API只适用于H264
注意
int IMP_Encoder_GetChnAttr ( int  encChn,
IMPEncoderCHNAttr *const  attr 
)

获取编码Channel的属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]attr编码Channel属性
返回值
0成功
非0失败
int IMP_Encoder_GetChnAttrRcMode ( int  encChn,
IMPEncoderAttrRcMode pstRcModeCfg 
)

获取码率控制模式属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstRcCfg码率控制模式属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的码率控制模式属性,调用此API需要通道已经存在。
注意
此函数对JPEG通道无意义。
int IMP_Encoder_GetChnColor2Grey ( int  encChn,
IMPEncoderColor2GreyCfg pstColor2Grey 
)

获取彩转灰功能属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstColor2Grey彩转灰功能的参数
返回值
0成功
非0失败
备注
调用此API会获取通道的彩转灰功能属性,调用此API需要通道已经存在。
注意
此函数对JPEG通道无意义。
int IMP_Encoder_GetChnDemask ( int  encChn,
IMPEncoderAttrDemask pdemaskAttr 
)

获取通道去马赛克属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pdemaskAttr去马赛克属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的去马赛克属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_GetChnDenoise ( int  encChn,
IMPEncoderAttrDenoise pdenoiseAttr 
)

获取通道去噪属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pdenoiseAttr去噪属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的去噪属性,调用此API需要通道已经存在。
注意
此函数对JPEG通道无意义。
int IMP_Encoder_GetChnFrmRate ( int  encChn,
IMPEncoderFrmRate pstFps 
)

获取帧率控制属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstFpsCfg帧率控制属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的帧率控制属性,调用此API需要通道已经存在。
注意
此函数对JPEG通道无意义。
int IMP_Encoder_GetChnFrmUsedMode ( int  encChn,
IMPEncoderAttrFrmUsed pfrmUsedAttr 
)

获取通道输入帧使用模式属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pfrmUsedAttr输入帧使用模式属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的输入帧使用模式属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_GetChnHSkip ( int  encChn,
IMPEncoderAttrHSkip phSkipAttr 
)

获取通道高级跳帧属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]phSkipAttr高级跳帧属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道高级跳帧属性,调用此API需要通道已经存在。
int IMP_Encoder_GetChnROI ( int  encChn,
IMPEncoderROICfg pstVencRoiCfg 
)

获取通道ROI属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstFpsCfgROI属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的ROI属性,调用此API需要通道已经存在。
注意
此函数对JPEG通道无意义。
int IMP_Encoder_GetFisheyeEnableStatus ( int  encChn,
int *  enable 
)

获取Ingenic提供的鱼眼矫正算法的使能状态

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]enable返回设置的Ingenic提供的鱼眼矫正算法的使能状态,0:未使能,1:已使能
返回值
0成功
非0失败
备注
此API只适用于H264
注意
int IMP_Encoder_GetGOPSize ( int  encChn,
IMPEncoderGOPSizeCfg pstGOPSizeCfg 
)

获取通道GOP属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstGOPSizeCfgGOPSize属性参数
返回值
0成功
非0失败
备注
调用此API会获取通道的GOPSize属性,调用此API需要通道已经存在。
注意
此函数对JPEG通道无意义。
int IMP_Encoder_GetH264TransCfg ( int  encChn,
IMPEncoderH264TransCfg pstH264TransCfg 
)

获取 H.264 协议编码通道的变换、量化属性

参数
[in]encChn编码Channel号, 取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstH264TransCfg返回H.264 协议编码通道的变换、量化属性
返回值
0成功
非0失败
备注
如果通道未创建, 则返回失败
此API只适用于H264
注意
int IMP_Encoder_GetJpegeQl ( int  encChn,
IMPEncoderJpegeQl pstJpegeQl 
)

获取 JPEG 协议编码通道的量化表配置参数

参数
[in]encChn编码Channel号, 取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstJpegeQl返回JPEG 协议编码通道的量化表配置参数
返回值
0成功
非0失败
备注
如果通道未创建, 则返回失败
此API只适用于JPEG
注意
int IMP_Encoder_GetMaxStreamCnt ( int  encChn,
int *  nrMaxStream 
)

获取码流Buffer数

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]nrMaxStream码流Buffer数变量指针
返回值
0成功
非0失败
备注
注意
int IMP_Encoder_GetMbRC ( int  encChn,
int *  bEnable 
)

获取是否开启宏块级qp控制的状态

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]bEnable返回是否开启宏块级qp控制的状态, 0:不开启, 1:开启
返回值
0成功
非0失败
备注
此API只适用于H264
注意
int IMP_Encoder_GetStream ( int  encChn,
IMPEncoderStream stream,
bool  blockFlag 
)

获取编码的码流

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]stream码流结构体指针
[in]blockFlag是否使用阻塞方式获取,0:非阻塞,1:阻塞
返回值
0成功
非0失败
备注
每次获取一帧码流的数据
如果用户长时间不获取码流,码流缓冲区就会满。一个编码Channel如果发生码流缓冲区满,就会把后 面接收的图像丢掉,直到用户获取码流,从而有足够的码流缓冲可以用于编码时,才开始继续编码。建议用户 获取码流接口调用与释放码流的接口调用成对出现,且尽快释放码流,防止出现由于用户态获取码流,释放不 及时而导致的码流 buffer 满,停止编码。
对于H264类型码流,一次调用成功获取一帧的码流,这帧码流可能包含多个包。
对于JPEG类型码流,一次调用成功获取一帧的码流,这帧码流只包含一个包,这一帧包含了JPEG图片文件的完整信息。

示例:

1 int ret;
2 ret = IMP_Encoder_PollingStream(ENC_H264_CHANNEL, 1000); //Polling码流Buffer,等待可获取状态
3 if (ret < 0) {
4  printf("Polling stream timeout\n");
5  return -1;
6 }
7 
8 IMPEncoderStream stream;
9 ret = IMP_Encoder_GetStream(ENC_H264_CHANNEL, &stream, 1); //获取一帧码流,阻塞方式
10 if (ret < 0) {
11  printf("Get Stream failed\n");
12  return -1;
13 }
14 
15 int i, nr_pack = stream.packCount;
16 for (i = 0; i < nr_pack; i++) { //保存这一帧码流的每个包
17  ret = write(stream_fd, (void *)stream.pack[i].virAddr,
18  stream.pack[i].length);
19  if (ret != stream.pack[i].length) {
20  printf("stream write error:%s\n", strerror(errno));
21  return -1;
22  }
23 }
注意
如果pstStream为NULL,则返回失败;
如果Channel未创建,则返回失败;
int IMP_Encoder_GetSuperFrameCfg ( int  encChn,
IMPEncoderSuperFrmCfg pstSuperFrmParam 
)

获取编码超大帧配置

参数
[in]encChn编码Channel号, 取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstSuperFrmParam返回编码超大帧配置
返回值
0成功
非0失败
备注
如果通道未创建, 则返回失败
此API只适用于H264
注意
int IMP_Encoder_InsertUserData ( int  encChn,
void *  userData,
uint32_t  userDataLen 
)

插入用户数据

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]userData用户数据指针
[in]userDataLen用户数据长度, 取值范围:(0, 1024],以 byte 为单位
返回值
0成功
非0失败
备注
调用此API需要通道已经存在
如果通道未创建,则返回失败
如果userData为空或userDataLen为0,则返回失败
插入用户数据,只支持H.264编码协议
H.264协议通道最多分配2块内存空间用于缓存用户数据,且每段用户数据大小不超过1k byte。 如果用户插入的数据多余2块,或插入的一段用户数据大于1k byte 时,此接口会返回错误。
每段用户数据以SEI包的形式被插入到最新的图像码流包之前。在某段用户数据包被编码发送之后, H.264 通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据
注意
无。
int IMP_Encoder_PollingStream ( int  encChn,
uint32_t  timeoutMsec 
)

Polling码流缓存

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]timeoutMsec超时时间,单位:毫秒
返回值
0成功
非0失败
备注
在获取码流之前可以用过此API进行Polling,当码流缓存不为空时或超时时函数返回。
注意
int IMP_Encoder_Query ( int  encChn,
IMPEncoderCHNStat stat 
)

查询编码Channel状态

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]stat编码Channel状态
返回值
0成功
非0失败
备注
注意
int IMP_Encoder_RegisterChn ( int  encGroup,
int  encChn 
)

注册编码Channel到Group

参数
[in]encGroup编码Group号,取值范围: [0, NR_MAX_ENC_GROUPS - 1]
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
注意
注册并不存在的Channel,则返回失败
注册Channel到不存在的Group,否则返回失败
同一个编码Channel只能注册到一个Group,如果该Channel已经注册到某个Group,则返回失败
如果一个Group已经被注册,那么这个Group就不能再被其他的Channel注册,除非之前注册关系被解除
int IMP_Encoder_ReleaseStream ( int  encChn,
IMPEncoderStream stream 
)

释放码流缓存

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]stream码流结构体指针
返回值
0成功
非0失败
备注
此接口应当和IMP_Encoder_GetStream配对起来使用,
用户获取码流后必须及时释放已经获取的码流缓存,否则可能会导致码流buffer满,影响编码器编码。
并且用户必须按先获取先 释放的顺序释放已经获取的码流缓存;
在编码Channel反注册后,所有未释放的码流包均无效,不能再使用或者释放这部分无效的码流缓存。
注意
如果pstStream为NULL,则返回失败;
如果Channel未创建,则返回失败;
释放无效的码流会返回失败。
int IMP_Encoder_RequestIDR ( int  encChn)

请求IDR帧

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
备注
在调用此API后,会在最近的编码帧申请IDR帧编码。
注意
int IMP_Encoder_SetChangeRef ( int  encChn,
int  bEnable 
)

设置是否允许改变BASE帧参考方式的状态

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]enable0:不允许改变,1,允许改变(默认)
返回值
0成功
非0失败
备注
此API必须在创建编码通道后调用,设置完后编码下一帧就会生效。
此API只适用于H264 SMART编码方式
注意
int IMP_Encoder_SetChnAttrRcMode ( int  encChn,
const IMPEncoderAttrRcMode pstRcModeCfg 
)

设置码率控制模式属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]pstRcCfg码率控制模式属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道的码率控制模式属性,下一个IDR生效,调用此API需要通道已经存在。
注意
目前,码率控制模式支持ENC_RC_MODE_FIXQP, ENC_RC_MODE_CBR, ENC_RC_MODE_VBR 与 ENC_RC_MODE_SMART
此函数对JPEG通道无意义。
int IMP_Encoder_SetChnColor2Grey ( int  encChn,
const IMPEncoderColor2GreyCfg pstColor2Grey 
)

设置彩转灰功能

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]pstColor2Grey彩转灰功能的参数
返回值
0成功
非0失败
备注
调用此API设置通道的彩转灰功能,在下一个IDR或者P帧生效。 调用此API需要通道已经存在。
注意
int IMP_Encoder_SetChnDemask ( int  encChn,
const IMPEncoderAttrDemask pdemaskAttr 
)

设置通道去马赛克属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pdemaskAttr去马赛克属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道的去马赛克属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_SetChnDenoise ( int  encChn,
const IMPEncoderAttrDenoise pdenoiseAttr 
)

设置通道去噪属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]pdenoiseAttr去噪属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道的去噪属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_SetChnFrmRate ( int  encChn,
const IMPEncoderFrmRate pstFps 
)

动态设置帧率控制属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstFpsCfg帧率控制属性参数
返回值
0成功
非0失败
备注
调用此API会重新设置编码器帧率属性,帧率属性在下一个GOP生效,最大延时1秒钟生效,调用此API需要通道已经存在。
如果调用IMP_FrameSource_SetChnFPS()函数动态改变系统帧率,那么需要调用该函数修改编码器帧率,完成正确参数配置。
注意
无。
int IMP_Encoder_SetChnFrmUsedMode ( int  encChn,
const IMPEncoderAttrFrmUsed pfrmUsedAttr 
)

设置通道输入帧使用模式属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pfrmUsedAttr输入帧使用模式属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道的输入帧使用模式属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_SetChnHSkip ( int  encChn,
const IMPEncoderAttrHSkip phSkipAttr 
)

设置通道高级跳帧属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]phSkipAttr高级跳帧属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道高级跳帧属性,调用此API需要通道已经存在。
若创建通道时设置的高级跳帧类型是 IMP_Encoder_STYPE_N1X 到 IMP_Encoder_STYPE_N2X 中的一个, 此API设置跳帧类型只能为 IMP_Encoder_STYPE_N1X 或 IMP_Encoder_STYPE_N2X 中的任意一个
若创建通道时设置的高级跳帧类型是 IMP_Encoder_STYPE_N4X 到 IMP_Encoder_STYPE_H1M_TRUE 中的一个, 则可以设置为任意一个高级跳帧类型
注意
无。
int IMP_Encoder_SetChnHSkipBlackEnhance ( int  encChn,
const int  bBlackEnhance 
)

设置通道高级跳帧中bBlackEnhance属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]bBlackEnhance逻辑值,对应IMPEncoderAttrHSkip中bBlackEnhance值
返回值
0成功
非0失败
备注
调用此API会设置通道高级跳帧中bBlackEnhance属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_SetChnROI ( int  encChn,
const IMPEncoderROICfg pstVencRoiCfg 
)

设置通道ROI属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstFpsCfgROI属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道的ROI属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_SetFisheyeEnableStatus ( int  encChn,
int  enable 
)

设置Ingenic提供的鱼眼矫正算法的使能状态

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]enable0:不使能(默认),1:使能
返回值
0成功
非0失败
备注
由于鱼眼矫正算法的使能状态在通道创建时就已经固定,因此次API需要在通道创建之前调用。
若通道创建之前不调用此API设置Ingenic提供的鱼眼矫正算法的使能状态,则默认不使能,即不能使用君正提供的鱼眼矫正算法。
此API只适用于H264
注意
int IMP_Encoder_SetGOPSize ( int  encChn,
const IMPEncoderGOPSizeCfg pstGOPSizeCfg 
)

设置通道GOP属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[out]pstGOPSizeCfgGOP属性参数
返回值
0成功
非0失败
备注
调用此API会设置通道的GOPSize属性,调用此API需要通道已经存在。
注意
无。
int IMP_Encoder_SetH264TransCfg ( int  encChn,
const IMPEncoderH264TransCfg pstH264TransCfg 
)

设置 H.264 协议编码通道的变换、量化的属性

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]pstH264TransCfgH.264 协议编码通道的变换、量化属性
返回值
0成功
非0失败
备注
如果通道未创建,则返回失败
此API只适用于H264
建议在创建编码channel之后,startRecvPic之前调用, 设置时先GetH264TransCfg,然后再SetH264TransCfg
注意
int IMP_Encoder_SetJpegeQl ( int  encChn,
const IMPEncoderJpegeQl pstJpegeQl 
)

设置 JPEG 协议编码通道的量化表配置参数

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]pstJpegeQlJPEG 协议编码通道的量化表配置参数,前128个字节填入量化表,后128个字节填0
返回值
0成功
非0失败
备注
如果通道未创建,则返回失败
此API只适用于JPEG
注意
int IMP_Encoder_SetMaxStreamCnt ( int  encChn,
int  nrMaxStream 
)

设置码流缓存Buffer个数

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]nrMaxStream码流Buffer数,取值范围: [1, NR_MAX_ENC_CHN_STREAM]
返回值
0成功
非0失败
备注
由于码流缓存Buffer个数在通道创建时就已经固定,因此次API需要在通道创建之前调用。
若通道创建之前不调用此API设置码流缓存Buffer个数,则H264通道默认个数为5,JPEG通道默认个数为1。
注意
int IMP_Encoder_SetMbRC ( int  encChn,
int  bEnable 
)

设置是否开启宏块级qp控制

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]bEnable0:不开启(默认), 1:开启
返回值
0成功
非0失败
备注
此API必须在创建编码通道后调用,设置完后编码下一帧就会生效。
注意
int IMP_Encoder_SetSuperFrameCfg ( int  encChn,
const IMPEncoderSuperFrmCfg pstSuperFrmParam 
)

设置编码超大帧配置

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
[in]pstSuperFrmParam编码超大帧配置
返回值
0成功
非0失败
备注
如果通道未创建,则返回失败
此API只适用于H264
注意
int IMP_Encoder_StartRecvPic ( int  encChn)

开启编码Channel接收图像

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
备注
开启编码Channel接收图像后才能开始编码
注意
如果Channel未创建,则返回失败
如果Channel没有注册到Group,则返回失败
int IMP_Encoder_StopRecvPic ( int  encChn)

停止编码Channel接收图像

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
备注
此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误
调用此接口仅停止接收原始数据编码,码流buffer并不会被消除
注意
如果Channel未创建,则返回失败
如果Channel没有注册到Group,则返回失败
int IMP_Encoder_UnRegisterChn ( int  encChn)

反注册编码Channel到Group

参数
[in]encChn编码Channel号,取值范围: [0, NR_MAX_ENC_CHN - 1]
返回值
0成功
非0失败
备注
Channel注销之后,编码Channel会被复位,编码Channel里的码流buffer都会被清空,如果用户还在使用 未及时释放的码流buffer,将不能保证buffer数据的正确性,用户可以使用IMP_Encoder_Query接口来查询编 码Channel码流buffer状态,确认码流buffer里的码流取完之后再反注册Channel
注意
注销未创建的Channel,则返回失败
注销未注册的Channel,则返回失败
如果编码Channel未停止接收图像编码,则返回失败