JPEGE Functions and Restrictions

The Atlas training products do not support the JPEGE function described in this section.

Description

JPEG Encoder (JPEGE) encodes YUV images into JPEG images, for example, .jpg images.

Resolution Restrictions

  • Input image resolution:

    Model

    Resolution Range

    Atlas A3 training products/Atlas A3 inference products

    Atlas A2 training products/Atlas A2 inference products

    Atlas inference products

    32 x 32 to 8192 x 8192

    Atlas 200I/500 A2 inference products

    32 x 32 to 16384 x 16384

  • Output image resolution:

    JPEGE encodes images without changing the image resolution. Therefore, the output image resolution is the same as the input image resolution.

APIs for Buffer Allocation and Freeing

The size of the input buffer refers to the actual size occupied by the input stream. For details about the size of the output buffer, see the formula in Table 1.

Model

APIs for Input Buffer Allocation and Freeing

APIs for Output Buffer Allocation and Freeing

Atlas inference products

During JPEGE image encoding, call hi_mpi_dvpp_malloc to allocate the input buffer on the device, and hi_mpi_dvpp_free to free. The buffer lifetime is managed by the user.

The following two methods are supported:
  • Managed by DVPP: Call hi_mpi_venc_send_frame to send source images for encoding.

    When creating a channel by calling hi_mpi_venc_create_chn, you must properly configure hi_venc_chn_attr.venc_attr.buf_size by referring to hi_venc_attr.

    In this method, the JPEG header of the output data does not contain the COM comment field, and the data length is smaller. However, you need to copy the output data from the buffer returned by DVPP to the specified memory.

  • Managed by users: Call hi_mpi_venc_send_jpege_frame to send source images for encoding.

    When creating a channel by calling hi_mpi_venc_create_chn, set hi_venc_chn_attr.venc_attr.buf_size to 0 (see hi_venc_attr). Call hi_mpi_venc_get_jpege_predicted_size to predict the output buffer size, and call hi_mpi_dvpp_malloc or hi_mpi_dvpp_free to allocate or free the output buffer.

    This method sets the output buffer address when hi_mpi_venc_send_jpege_frame is called. The output data is directly stored in the buffer you set, so that you do not need to copy the output data from the buffer returned by DVPP to the specified memory. However, the JPEG header of the output data may contain the COM comment field (whose length ranges from 4 to 19 bytes), and the data length is larger.

Atlas A3 training products/Atlas A3 inference products

Atlas A2 training products/Atlas A2 inference products

Atlas 200I/500 A2 inference products

During JPEGE image encoding, the following two types of buffer allocation/freeing APIs are supported:

  • Call aclrtMalloc to allocate the input buffer on the device, and aclrtFree to free the input buffer. The buffer lifetime is managed by the user. During buffer allocation, you are advised to allocate buffer of the ACL_MEM_MALLOC_HUGE_FIRST type. Huge page buffer has better performance and is preferred.
  • Call hi_mpi_dvpp_malloc to allocate the input buffer on the device, and hi_mpi_dvpp_free to free the input buffer. The buffer lifetime is managed by the user.

Note: hi_mpi_dvpp_malloc allocates a dedicated buffer for processing media data. However, the address space of the dedicated buffer is limited. If buffer resources are limited, aclrtMalloc is recommended for allocating buffer.

The following two methods are supported:
  • Managed by DVPP: Call hi_mpi_venc_send_frame to send source images for encoding.

    When creating a channel by calling hi_mpi_venc_create_chn, you must properly configure hi_venc_chn_attr.venc_attr.buf_size by referring to hi_venc_attr.

    In this method, the JPEG header of the output data does not contain the COM comment field, and the data length is smaller. However, you need to copy the output data from the buffer returned by DVPP to the specified memory.

  • Managed by users: Call hi_mpi_venc_send_jpege_frame to send source images for encoding.

    When creating a channel by calling hi_mpi_venc_create_chn, set hi_venc_chn_attr.venc_attr.buf_size to 0 (see hi_venc_attr). Call hi_mpi_venc_get_jpege_predicted_size to predict the output buffer size, and call hi_mpi_dvpp_malloc or hi_mpi_dvpp_free to allocate or free the output buffer. (You can also call aclrtMalloc or aclrtFree to allocate or free the output buffer on the device.)

    This method sets the output buffer address when hi_mpi_venc_send_jpege_frame is called. The output data is directly stored in the buffer you set, so that you do not need to copy the output data from the buffer returned by DVPP to the specified memory. However, the JPEG header of the output data may contain the COM comment field (whose length ranges from 4 to 19 bytes), and the data length is larger.

Restrictions on Image Formats, Width and Height Alignment, and Buffers

For details about the definition of the input image format, see hi_pixel_format. For details about the concepts such as width stride and height stride, see Terminology.

Table 1 Restrictions on the image format, width and height alignment, and buffer size

Input Image Format

Input Width and Height Alignment

Input Width Stride, Height Stride, and Buffer Size

Atlas A3 training products/Atlas A3 inference products

Atlas A2 training products/Atlas A2 inference products

Atlas 200I/500 A2 inference products

Atlas inference products

Output Image Format

YUV420SP NV12 8-bit

Width: Must be a multiple of 2.

Height: Must be a multiple of 2.

Width stride: Round up the width to the nearest multiple of 16 or any multiple of 16, for example, 128 (which offers better performance).

The height stride does not need to be configured.

Buffer size (in bytes) = Width stride x Height x 3/2

Output format: JPEG, for example, *.jpg

Only Huffman coding is supported. Arithmetic coding and progressive coding are not supported.

YUV420SP NV21 8-bit

YUV422 Packed YUYV 8-bit

Width: Must be a multiple of 2.

Height: No alignment requirements.

Width stride: Double the width and then round up the result to the nearest multiple of 16.

The height stride does not need to be configured.

Buffer size (in bytes) = Width stride x Height

YUV422 Packed UYVY 8-bit

YUV422 Packed YVYU 8-bit

YUV422 Packed VYUY 8-bit