# 约束说明


#### 图片分辨率约束

- 输入图片分辨率
  VPC处理图片时，通用的输入分辨率范围为10*6~8192*8192，其中部分接口的分辨率限制可能不同，请以具体接口内的说明为准，请参见VPC图像处理功能下各接口的说明。其中，当输入图片格式为YUV440SP、YUV440P时，输入图片的宽最大值为4096。

- 输出图片分辨率| 版本 | 分辨率范围 |
| --- | --- |
| Atlas 200/500 A2推理产品 | 10\*6~4096\*8192 |


#### 内存申请/释放接口说明

输入、输出内存大小要求请参见图片格式、宽高对齐、内存约束中的计算公式。

| 版本 | 内存申请接口 |
| --- | --- |
| Atlas 200/500 A2推理产品 | VPC在处理图片时，支持以下两种内存申请接口： 调用aclrtMalloc\aclrtFree接口申请\释放Device上的输入、输出内存，这部分内存的生命周期由用户自行管理。 调用hi\_mpi\_dvpp\_malloc\hi\_mpi\_dvpp\_free接口申请\释放Device上的输入、输出内存，这部分内存的生命周期由用户自行管理。 注意：调用hi\_mpi\_dvpp\_malloc接口申请的内存为媒体数据处理的专用内存，但专用内存的地址空间有限，若关注内存规划或内存资源有限时，建议调用aclrtMalloc接口申请内存。 |


#### 图片格式、宽高对齐、内存约束

在调用接口实现VPC功能时：

- 图片格式的定义请参见  hi_pixel_format
，宽stride、高stride等概念请参见  基本概念
。
- 不同版本中，宽stride、高stride的最小值、最大值不同，如下：

  - Atlas 200/500 A2推理产品上，宽stride最小10、高stride最小6。
- 各接口对图片格式的要求可能不同，请参见  VPC图像处理功能
下各接口的说明。


**表1 输入图片格式、宽高对齐、内存大小约束**

| 版本 | 图片格式 | 图片宽、高对齐要求 | 图片宽stride、高stride对齐要求 Atlas 200/500 A2推理产品 | 内存大小要求（单位Byte） |
| --- | --- | --- | --- | --- |
| 通用格式，各版本都支持 | YUV400 8bit | 无对齐要求 | 宽stride无对齐要求，与宽相同即可； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 通用格式，各版本都支持 | YUV420SP NV12 8bit YUV420SP NV21 8bit | 宽2对齐 高2对齐 | 宽stride无对齐要求，与宽相同即可； 高stride为高2对齐后的值。 | 宽stride \* 高stride \* 3/2 |
| 通用格式，各版本都支持 | YUV422SP 8bit YVU422SP 8bit | 宽2对齐 高无对齐要求 | 宽stride无对齐要求，与宽相同即可； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 2 |
| 通用格式，各版本都支持 | YUV444SP 8bit YVU444SP 8bit | 无对齐要求 | 宽stride无对齐要求，与宽相同即可； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 3 |
| 通用格式，各版本都支持 | YUV422Packed YUYV 8bit YUV422Packed UYVY 8bit YUV422Packed YVYU 8bit YUV422Packed VYUY 8bit | 宽2对齐 高无对齐要求 | 宽stride为宽\*2的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 通用格式，各版本都支持 | YUV444Packed 8bit RGB888 BGR888 | 无对齐要求 | 宽stride为宽\*3的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 通用格式，各版本都支持 | ARGB8888 ABGR8888 RGBA8888 BGRA8888 | 无对齐要求 | 宽stride为宽\*4的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 通用格式，各版本都支持 | YUV440SP 8bit YVU440SP 8bit | 宽无对齐要求，但宽≤4096 高2对齐 | 宽stride无对齐要求，与宽相同即可； 高stride为高2对齐后的值。 | 宽stride \* 高stride \* 2 |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YVU420Planar YUV420Planar | 宽2对齐，高2对齐 | 宽stride无对齐要求，与宽相同即可；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 3/2 |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YVU422Planar YUV422Planar | 无对齐要求 | 宽stride无对齐要求，与宽相同即可；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 2 |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YVU444Planar YUV444Planar | 无对齐要求 | 宽stride无对齐要求，与宽相同即可；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 3 |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YVU444Packed 8bit | 无对齐要求 | 宽stride无对齐要求，宽stride为宽\*3的值；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YUV440Planar YVU440Planar | 宽无对齐要求，但宽≤4096 高2对齐 | 宽stride无对齐要求，与宽相同即可；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 2 |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | RGB888Planar BGR888Planar | 无对齐要求 | 宽stride无对齐要求，与宽相同即可；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 3 |


**表2 输出图片格式、宽高对齐、内存大小约束**

| \- | 图片格式 | 图片宽、高对齐要求 | 图片宽stride、高stride对齐要求 Atlas 200/500 A2推理产品 | 内存大小要求（单位Byte） |
| --- | --- | --- | --- | --- |
| 通用格式，各版本都支持 | YUV400 8bit | 无对齐要求 | 宽stride无对齐要求，与宽相同即可； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 通用格式，各版本都支持 | YUV420SP NV12 8bit YUV420SP NV21 8bit | 宽2对齐 高2对齐 | 宽stride无对齐要求，与宽相同即可； 高stride为高2对齐后的值。 | 宽stride \* 高stride \* 3/2 |
| 通用格式，各版本都支持 | YUV422SP 8bit YVU422SP 8bit | 宽2对齐 高无对齐要求 | 宽stride无对齐要求，与宽相同即可； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 2 |
| 通用格式，各版本都支持 | YUV444Packed 8bit RGB888 BGR888 | 无对齐要求 | 宽stride为宽\*3的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 通用格式，各版本都支持 | ARGB8888 ABGR8888 RGBA8888 BGRA8888 | 无对齐要求 | 宽stride为宽\*4的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YUV422Packed YUYV 8bit YUV422Packed UYVY 8bit YUV422Packed YVYU 8bit YUV422Packed VYUY 8bit | 宽无对齐要求 高2对齐 | 宽stride为宽\*2的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | YVU444Packed | 无对齐要求 | 宽stride为宽\*3的值； 高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride |
| 该部分格式仅以下版本支持： Atlas 200/500 A2推理产品 | RGB888Planar BGR888Planar | 无对齐要求 | 宽stride无对齐要求，与宽相同即可；高stride无对齐要求，与高相同即可。 | 宽stride \* 高stride \* 3 |


#### 抠图、贴图约束

- 抠图区域不超出输入图片区域。
- 抠图、贴图区域的奇数、偶数限制为：
  输出图片格式为YUV420SP，贴图区域奇数、偶数限制为：左偏移和上偏移为偶数、右偏移和下偏移为奇数。

  输出图片格式为YUV422SP，贴图区域奇数、偶数限制为：左偏移为偶数、右偏移为奇数。

  其它格式，贴图区域没有偏移奇偶数的限制。

- 贴图区域不超出输出图片区域，最大贴图个数256个。


#### YUV格式图像下采样约束

VPC在处理图片时，会根据输入或输出图片格式，将输入图片格式转换为YUV444或RGB用于内部处理，YUV444或RGB没有宽高奇偶数的限制，但当输出图片格式为YUV420SP或YUV422SP格式时，会进行下采样处理，由于YUV420SP或YUV422SP格式本身的数据排布导致宽高存在奇偶数限制，因此输出图片的边缘可能存在异常数据。

图1 异常效果图片举例

出现异常数据的根因在于，在计算过程中，出现输出图片位置处于奇数起始点时，此时YUV444格式的图片是正确的，但是下采样到YUV420SP格式时，由于奇数行和偶数行是共用同一个uv的，导致图片起始行的Y与上一行的UV组成新的像素，产生异常数据。
