---
title: vdec_send_stream
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/dvpp/aclpythondevg_01_0492.html
sourcePath: /source/zh/canncommercial/900/API/dvpp/aclpythondevg_01_0492.html
indexId: 677f3db53c62963ce7fcb5670f7fd81ba96cf4041f9de22683203749e3aed1bf65
---
# vdec_send_stream

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 训练系列产品 | x |
| Atlas 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |


#### 功能说明

解码前，向解码通道发送码流数据及存放解码结果的Buffer。


#### 函数原型

- C函数原型
  1 hi_s32 hi_mpi_vdec_send_stream(hi_vdec_chn chn, const hi_vdec_stream *stream, hi_vdec_pic_info *vdec_pic_info, hi_s32 milli_sec)

- python函数
  1 ret = acl.himpi.vdec_send_stream(chn, stream, vdec_pic_info, milli_sec)


#### 参数说明

| 参数名 | 说明 |
| --- | --- |
| chn | int，解码通道号。 Atlas 350 加速卡，该参数的取值范围：[0, 256)，JPEGD功能通道总数最多256。 Atlas 推理系列产品 ，该参数的取值范围：[0, 256)，JPEGD功能和VDEC功能共用通道，且通道总数最多256。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，该参数的取值范围：[0, 256)，JPEGD功能和VDEC功能共用通道，且通道总数最多256，其中，JPEGD解码通道总数最多256，VDEC解码通道总数最多32。 Atlas 200I/500 A2 推理产品 ，该参数的取值范围：[0, 128)，JPEGD功能和VDEC功能共用通道，且通道总数最多128。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，该参数的取值范围：[0, 256)，JPEGD功能和VDEC功能共用通道，且通道总数最多256，其中，JPEGD解码通道总数最多256，VDEC解码通道总数最多32。 |
| stream | dict，输入码流信息。该字典内的“addr”参数配置的地址为Device上的内存地址，具体请参见hi\_vdec\_stream。 |
| vdec\_pic\_info | dict，输出图片信息字典，具体请参见hi\_vdec\_pic\_info。 |
| milli\_sec | int，超时时间，单位是毫秒。 “\-1”：阻塞方式。 “0”：非阻塞方式。 >0：超时方式，配置具体的超时时间。超时时间受操作系统影响，一般偏差在操作系统的一个时间片内，例如，操作系统的一个时间片为4ms，用户设置的“milli\_sec”参数值为“1”，则实际的超时时间在1ms到5ms范围内。在CPU负载高场景下，超时时间仍可能存在波动。 |


#### 返回值说明

| 返回值 | 说明 |
| --- | --- |
| ret | int，错误码。 返回0表示成功。 返回非0表示失败，参见VDEC视频/JPEGD图像解码返回码。 |


#### 约束说明

- 发送数据前必须保证已经调用  acl.himpi.vdec_start_recv_stream
接口启动接收码流，否则直接返回该操作不允许的错误码“HI_ERR_VDEC_NOT_PERM”。如果在发送数据过程中停止接收码流，就会立刻返回“HI_ERR_VDEC_NOT_PERM”。
- 发送数据前必须保证通道已经被创建，否则直接返回通道未创建的错误码“HI_ERR_VDEC_UNEXIST”。如果在发送码流过程中复位通道或者销毁通道，就会立刻返回错误码“HI_ERR_VDEC_UNEXIST”。
- 发送码流时需要按照创建解码通道时设置的发送方式（仅支持按帧发送）进行发送。按帧发送时，调用此接口一次，必须发送完整的一帧码流，否则，解码会出现错误。
- 不能发送“end_of_stream”为0的空码流包（码流长度为0或码流地址为空），否则返回错误码。发送“end_of_stream”为1的空码流包时，解码器会把所有码流全部解完并输出全部图像。除此之外，其它情况应该把“end_of_stream”置为0。
- 当码流buffer为空且装不下当前包码流时，会返回参数超出范围的错误码“HI_ERR_VDEC_ILLEGAL_PARAM”。
- 以非阻塞方式发送码流，如果码流缓冲区已满，会立刻返回错误码“HI_ERR_VDEC_BUF_FULL”。
- 以超时方式发送码流，到达设定的超时时间还不能成功发送码流会返回错误码“HI_ERR_VDEC_BUF_FULL”。
- 视频解码时支持设置是否将解码结果写入输出内存中，  hi_vdec_stream
字典中将“need_display”设置为“0”时，此帧码流的解码结果将不会写入到  hi_vdec_pic_info
字典中配置的输出内存中，此时允许将输出内存地址配置为“None”。  acl.himpi.vdec_get_frame
接口仍然能获取到字典  hi_video_frame_info
和  hi_vdec_stream
的信息，但是此时输出内存中无解码结果数据，需要用户释放输出内存（如果用户传入的输出内存地址是“None”，则无需释放）。
- 解码时，输入输出内存均需要在调用  acl.himpi.vdec_get_frame
接口获取结果之后才能进行释放。
- 视频解码，输入输出内存要求、输入码流格式、输出图片格式请参见  VDEC功能及约束说明
。
- 图像解码，输入输出内存要求、输入图片格式、输出图片格式请参见  JPEGE功能及约束说明
。


#### 资源参考

接口调用流程，参见JPEGE图片编码(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/acldevg/aclpythondevg_0062.html)、VENC视频编码(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/acldevg/aclpythondevg_0065.html)。
