acl.himpi.venc_get_stream
acl.himpi.venc_stop_chn
| c函数原型 | hi_s32 hi_mpi_venc_stop_chn(hi_venc_chn chn); |
|---|---|
| Python函数 | ret= acl.himpi.venc_stop_chn(chn) |
| 函数功能 | 停止编码通道接收输入图片。 |
| 输入说明 | chn:编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | - 如果通道未创建,则返回失败。 - 此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误。 - 此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。 - 调用此接口仅停止接收原始数据编码,码流buffer并不会被清除。 |
| 参考资源 | 接口调用流程,参见JPEGE图片编码、VENC视频编码。 |
父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_query_status
| c函数原型 | hi_s32 hi_mpi_venc_query_status(hi_venc_chn chn, hi_venc_chn_status *status); |
|---|---|
| Python函数 | status, ret = acl.himpi.venc_query_status(chn) |
| 函数功能 | 查询编码通道状态。 |
| 输入说明 | chn:编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 |
| 返回值说明 | - ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码. - status:编码通道的状态。 |
| 约束说明 | - 如果通道未创建,则返回失败。 - 此接口用于查询此函数调用时刻的编码器状态,status包含以下信息: - 在编码通道状态字典中,left_pics表示待编码的帧个数。在复位通道前,可以通过查询是否还有图像待编码来决定复位时机,防止复位时将可能需要编码的帧清理出去。 - 在编码通道状态字典中,left_stream_bytes表示码流 buffer 中剩余的byte数目。 在复位通道前,可以通过查询是否还有码流没有被处理来决定复位时机,防止复位时将可能需要的码流清理出去。 - 在编码通道状态字典中,left_stream_frames表示码流 buffer 中剩余的帧数目。 在复位通道前,可以通过查询是否还有图像的码流没有被取走来决定复位时机,防止复位时将可能需要的码流清理出去。 - 在编码通道状态字典中,cur_packs表示当前帧的码流包个数。在调用acl.himpi.venc_get_stream之前应确保 cur_packs大于 0。 在按包获取时当前帧可能不是一个完整帧(被取走一部分),按帧获取时表示当前一个完整帧的包个数(如果没有一帧数据则为 0)。用户在需要按帧获取码流时,需要查询一个完整帧的包个数,在这种情况下,通常可以在 select 成功后执行 query 操作,此时 cur_packs是当前完整帧中包的个数。 - 在编码通道状态字典中,left_recv_pics表示调用acl.himpi.venc_start_chn接口后剩余等待接收的帧数目。 - 在编码通道状态字典中,left_enc_pics表示调用acl.himpi.venc_start_chn接口后剩余等待编码的帧数目。 - 如果调用acl.himpi.venc_start_chn但没有指定接收帧数,left_recv_pics和left_enc_pics数目始终为 0。 |
| 参考资源 | 接口调用流程,参见JPEGE图片编码、VENC视频编码。 |
父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_get_stream
| c函数原型 | hi_s32 hi_mpi_venc_get_stream(hi_venc_chn chn, hi_venc_stream *stream, hi_s32 milli_sec); |
|---|---|
| Python函数 | stream, ret = acl.himpi.venc_get_stream(chn, stream, milli_sec) |
| 函数功能 | 获取编码的码流。 |
| 输入说明 | - chn:编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 - stream:pack_cnt传入cur_packs个包信息字典,自动分配内存,具体请参见hi_venc_stream。 - milli_sec:超时时间,单位是毫秒。 - “-1”:阻塞方式。 - “0”:非阻塞方式。 - >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码. stream:码流字典。该字典内的addr参数配置的地址为Device上的内存地址,表示输出的码流存放在Device的内存中。 |
| 约束说明 | - 如果通道未创建,返回失败。 - 如果stream为空,返回错误码HI_ERR_VENC_NULL_PTR。 - 如果milli_sec小于-1,返回错误码HI_ERR_VENC_ILLEGAL_PARAM。 - 支持超时方式获取。支持select/poll系统调用。 - milli_sec = 0 时,则为非阻塞获取,即如果缓冲无数据,则返回错误码HI_ERR_VENC_BUF_EMPTY。 - milli_sec = -1 时,则为阻塞,即如果缓冲无数据,则会等待有数据时才返回获取成功。 - milli_sec > 0 时,则为超时,即如果缓冲无数据,则会等待用户设定的超时时间,若在设定的时间内有数据则返回获取成功,否则返回超时失败。 - 支持按包或按帧方式获取码流。如果按包获取,则: - 对于JPEG编码协议, 每次获取的是一个参数包或数据包。 - 对于H.265编码协议,每次获取的是一个 NAL 单元。 - 码流字典hi_venc_stream包含以下部分: - 码流包信息列表pack 在函数调用成功后,将在返回值中stream字典填充一组hi_venc_pack字典的列表。 - 码流包个数pack_cnt 在输入时,此值指定pack中要获取的hi_venc_pack字典的最大数量。按包获取时,pack_cnt必须不小于1;按帧获取时,pack_cnt必须不小于当前帧的包个数(可通过acl.himpi.venc_query_status接口获得)。 在函数调用成功后,返回值中stream字典的pack_cnt为实际填充pack的包个数。 - 序列号seq按帧获取时是帧序列号;按包获取时为包序列号。 - 如果用户长时间不获取码流,码流缓冲区就会满。一个编码通道如果发生码流缓冲区满,就会不再启动编码,直到用户获取码流并释放码流,从而有足够的码流缓冲可以用于编码时,才开始继续编码。 建议用户获取码流接口调用与释放码流的接口调用成对出现,且尽快释放码流,防止出现由于用户获取码流,释放不及时而导致的码流buffer满,停止编码。 - 建议用户使用select方式获取码流,且按照如下的流程: 1. 调用acl.himpi.venc_query_status函数查询编码通道状态。 2. 确保cur_packs和left_stream_frames同时大于0。 3. 构造一个stream字典。 text<br> stream["pack_cnt"] = cur_packs<br> 4. 调用acl.himpi.venc_get_stream传入stream字典,获取编码码流。 text<br> stream, ret = acl.himpi.venc_get_stream(chn, stream)<br> 5. 调用acl.himpi.venc_release_stream传入上一步返回的stream字典,释放码流缓存。 - 当编码模块参数中的one_stream_buf为1时,用户获取一帧码流时只会得到一个码流包(不包含用户数据)的地址,即pack_cnt为1,地址为pack[0]["addr"],在hi_venc_pack字典中增加offset,用来指出一帧码流中有效数据的地址和pack[0]["addr"]的偏移。如图1所示(以H.264单包为例),pack[0]["data_num"] = 3,即3种NAL包,分别为Sps、Pps、SEI。 text<br> pack[0]["pack_info"][0]["pack_type"]["h264_type"] = HI_VENC_H264_NALU_SPS<br> pack[0]["pack_info"][1]["pack_type"]["h264_type"] = HI_VENC_H264_NALU_PPS<br> pack[0]["pack_info"][2]["pack_type"]["h264_type"] = HI_VENC_H264_NALU_SEI<br> 其他协议以此类推,data_num和pack_info只在单包模式才有意义。 - 两种模式可通过调用接口acl.himpi.venc_set_mod_param设置h.265e/h264e/jpege模块参数one_stream_buf来选择。 - one_stream_buf=1 表示单包模式(JPEGE目前只支持单帧单包模式)。 - one_stream_buf=0 表示多包模式,系统默认one_stream_buf=0。 |
| 参考资源 | 接口调用流程,参见JPEGE图片编码、VENC视频编码。 |
其他参考信息
图1 码流包结构图

父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_release_stream
| c函数原型 | hi_s32 hi_mpi_venc_release_stream(hi_venc_chn chn, hi_venc_stream *stream); |
|---|---|
| Python函数 | ret = acl.himpi.venc_release_stream(chn, stream) |
| 函数功能 | 释放码流缓存。 |
| 输入说明 | - chn:编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 - stream:码流字典。如果stream为空,则返回错误码“HI_ERR_VENC_NULL_PTR”。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | - 如果通道未创建,则返回错误码 “HI_ERR_VENC_UNEXIST”。 - 此接口应当和acl.himpi.venc_get_stream配对起来使用,用户获取码流后必须及时释放已经获取的码流缓存,否则可能会导致码流 buffer 满,影响编码器编码,并且用户必须按先获取先释放的顺序释放已经获取的码流缓存。 - 在编码通道复位以后,所有未释放的码流包均无效,不能再使用或者释放这部分无效的码流缓存。 - 释放无效的码流会返回失败“HI_ERR_VENC_ILLEGAL_PARAM”。 |
| 参考资源 | 接口调用流程,参见JPEGE图片编码、VENC视频编码。 |
父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_send_frame
| c函数原型 | hi_s32 hi_mpi_venc_send_frame(hi_venc_chn chn, const hi_video_frame_info *frame, hi_s32 milli_sec) |
|---|---|
| Python函数 | ret = acl.himpi.venc_send_frame(chn, frame, milli_sec) |
| 函数功能 | 发送原始图像进行视频或图像编码。 |
| 输入说明 | - chn:编码通道号。 - Atlas 200/500 A2推理产品,编码通道号的取值范围:[0, 128),JPEGE功能和VENC功能共用通道,且通道总数最多128。 - frame:原始图像信息字典。 - milli_sec:超时时间,单位是毫秒。 - “-1”:阻塞方式。 - “0”:非阻塞方式。 - >0:超时方式,配置具体的超时时间。超时时间受操作系统影响,一般偏差在操作系统的一个时间片内,例如,操作系统的一个时间片为4ms,用户设置的milli_sec参数值为1,则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下,超时时间仍可能存在波动。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | - 视频输入的原始图像大小必须与编码通道的大小保持一致;JPEGE输入的原始图像大小小于或等于编码通道的大小,当数据格式为YUV420SP(NV12,NV21)时,图像高度必须为2对齐。 - 调用该接口发送图像,用户需要保证编码通道已创建且开启接收输入图片 - 视频编码,对输入、输出的约束请参见VENC功能及约束说明。 - 图像编码,对输入、输出的约束请参见JPEGE功能及约束说明。 |
| 参考资源 | 接口调用流程,参见JPEGE图片编码、VENC视频编码。 |
父主题: VENC视频/JPEGE图像编码接口
acl.himpi.venc_set_mod_param
| c函数原型 | hi_s32 hi_mpi_venc_set_mod_param(const hi_venc_mod_param *mod_param) |
|---|---|
| Python函数 | ret = acl.himpi.venc_set_mod_param(mod_param) |
| 函数功能 | 设置编码相关的模块参数。 |
| 输入说明 | mod_param:编码模块参数字典,具体请参见hi_venc_mod_param。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回非0表示失败,参见VENC视频/JPEGE图像编码返回码。 |
| 约束说明 | 此接口在通道创建前调用,如果通道已经创建,则返回错误码“HI_ERR_VENC_NOT_PERM”。 |
| 参考资源 | 接口调用流程,参见JPEGE图片编码、VENC视频编码。 |
父主题: VENC视频/JPEGE图像编码接口
在线提单