Note

This is the documentation for the latest development branch and may refer to features that are not available in released versions. If you are looking for the documentation for a specific release, use the drop-down menu on the left and select the desired version.

K230 nonai 2D API reference#

Overview#

Overview#

nonai 2D hardware can implement OSD, picture frame and CSC functions. This article only describes the CSC function. The OSD and picture frame functions have not yet been implemented in the API of this article. They can be added in the future if there is demand.

The VENC module uses nonai 2D hardware to superimpose OSD and picture frames on encoded images. It is limited to encoded images and cannot be used alone. See chapters 1.2.1.4 and 2.1.14 ~ 2.1.29 of “K230_Video Codec_API Reference”.

Functional Description#

Realizes the mutual conversion between RGB and YUV. As a module of mpp, it can participate in the system binding function and can perform single frame processing without binding.

Supports mutual conversion of the following image formats:

PIXEL_FORMAT_YUV_SEMIPLANAR_420

PIXEL_FORMAT_YVU_PLANAR_420

PIXEL_FORMAT_YUV_PACKAGE_444

PIXEL_FORMAT_YVU_PLANAR_444

PIXEL_FORMAT_RGB_565

PIXEL_FORMAT_RGB_888

PIXEL_FORMAT_RGB_888_PLANAR

Code example:

k_nonai_2d_chn_attr attr_2d;
k_video_frame_info input;
k_video_frame_info output;
int ch = 0;

attr_2d.mode = K_NONAI_2D_CALC_MODE_CSC;
attr_2d.dst_fmt = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
kd_mpi_nonai_2d_create_chn(ch, &attr_2d);
kd_mpi_nonai_2d_start_chn(ch);

input.v_frame.pixel_format = PIXEL_FORMAT_RGB_888;
kd_mpi_nonai_2d_send_frame(ch, &input, 1000);
kd_mpi_nonai_2d_get_frame(ch, &output, 1000);

kd_mpi_nonai_2d_stop_chn(ch);
kd_mpi_nonai_2d_destroy_chn(ch);

API Reference#

kd_mpi_nonai_2d_request_chn#

Description

Apply for free 2D channels.

Syntax

k_s32 kd_mpi_nonai_2d_request_chn(k_u32* chn_num);

Parameters

Parameter Name

Description

Input/Output

chn_num

Output the requested idle channel number, value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Output

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • If chn_num is a null pointer, K_ERR_NONAI_2D_NULL_PTR is returned.

  • If there is no free channel, K_ERR_NONAI_2D_NOBUF or the corresponding no resource error code is returned.

  • The applied channel needs to be initialized through kd_mpi_nonai_2d_create_chn before it can be used.

Example

None.

Related Topics

kd_mpi_nonai_2d_release_chn、kd_mpi_nonai_2d_create_chn

kd_mpi_nonai_2d_release_chn#

Description

Release the applied 2D channel.

Syntax

k_s32 kd_mpi_nonai_2d_release_chn(k_u32 chn_num);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number to be released, value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • If the channel number exceeds the legal range, K_ERR_NONAI_2D_INVALID_CHNID is returned.

  • If the channel has not been applied for or has been released, K_ERR_NONAI_2D_UNEXIST is returned.

  • Before releasing the channel, make sure that the channel has been stopped (kd_mpi_nonai_2d_stop_chn) and destroyed (kd_mpi_nonai_2d_destroy_chn), otherwise the return operation does not allow errors.

Example

None.

Related Topics

kd_mpi_nonai_2d_request_chn、kd_mpi_nonai_2d_destroy_chn

kd_mpi_nonai_2d_attach_vb_pool#

Description

Bind the VB (Video Buffer) pool to the specified 2D channel.

Syntax

k_s32 kd_mpi_nonai_2d_attach_vb_pool(k_u32 chn_num, k_u32 pool_id);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

pool_id

VB pool ID.

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • It can be set on the fly

  • If the channel number is illegal, K_ERR_NONAI_2D_INVALID_CHNID is returned.

  • If the channel is not created, K_ERR_NONAI_2D_UNEXIST is returned.

  • If the VB pool ID is invalid, K_ERR_NONAI_2D_ILLEGAL_PARAM is returned.

  • A channel can only be bound to one VB pool at the same time, and repeated binding will overwrite the original binding relationship.

Example

None.

Related Topics

kd_mpi_nonai_2d_detach_vb_pool

kd_mpi_nonai_2d_detach_vb_pool#

Description

Unbind the specified 2D channel from the VB pool.

Syntax

k_s32 kd_mpi_nonai_2d_detach_vb_pool(k_u32 chn_num);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • It can be set on the fly

  • If the channel number is illegal, K_ERR_NONAI_2D_INVALID_CHNID is returned.

  • If the channel is not created, K_ERR_NONAI_2D_UNEXIST is returned.

  • If the channel is not bound to any VB pool, success is still returned (no error).

Example

None.

Related Topics

kd_mpi_nonai_2d_attach_vb_pool

kd_mpi_nonai_2d_create_chn#

Description

Create channel.

Syntax

k_s32 kd_mpi_nonai_2d_create_chn(k_u32 chn_num, const k_nonai_2d_chn_attr *attr);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

attr

Channel attribute pointer.

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

None.

Example

None.

Related Topics

None.

kd_mpi_nonai_2d_destroy_chn#

Description

Destroy the channel.

Syntax

k_s32 kd_mpi_nonai_2d_destroy_chn(k_u32 chn_num);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • You must call kd_mpi_nonai_2d_stop_chn to stop receiving images before destruction, otherwise failure will be returned.

Example

None.

Related Topics

None.

kd_mpi_nonai_2d_start_chn#

Description

Enables receiving input images.

Syntax

k_s32 kd_mpi_nonai_2d_start_chn(k_u32 chn_num);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • If the channel is not created, failure K_ERR_NONAI_2D_UNEXIST is returned.

  • If the channel has started to receive images and calls this interface again to specify the number of frames to receive before stopping receiving images, the return operation is not allowed.

  • Frame processing begins only after reception is turned on.

Example

None.

Related Topics

None.

kd_mpi_nonai_2d_stop_chn#

Description

Stop receiving input images.

Syntax

k_s32 kd_mpi_nonai_2d_stop_chn(k_u32 chn_num);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • If the channel is not created, failure is returned.

  • This interface does not determine whether to stop receiving currently, that is, it allows repeated stopping of reception without returning an error.

  • This interface is used to stop receiving images, which must be stopped before the channel is destroyed or reset.

  • Calling this interface only stops receiving raw data, and the frame buffer will not be cleared.

Example

None.

Related Topics

None.

kd_mpi_nonai_2d_get_frame#

Description

Get the processed image.

Syntax

k_s32 kd_mpi_nonai_2d_get_frame(k_u32 chn_num, k_video_frame_info *frame, k_s32 milli_sec);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

frame

Image structure pointer.

Output

milli_sec

Get image timeout. Value range: [-1, +∞] -1: blocking. 0: Non-blocking. Greater than 0: timeout period

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • If the channel is not created, failure is returned.

  • If the frame is empty, K_ERR_NONAI_2D_NULL_PTR is returned.

  • If milli_sec is less than -1, return K_ERR_NONAI_2D_ILLEGAL_PARAM.

Example

None.

Related Topics

None.

kd_mpi_nonai_2d_release_frame#

Description

Release the image cache.

Syntax

k_s32 kd_mpi_nonai_2d_release_frame(k_u32 chn_num, k_video_frame_info *frame);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

frame

Image structure pointer.

Output

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • If the channel is not created, error code K_ERR_NONAI_2D_UNEXIST is returned.

  • If the frame is empty, error code K_ERR_NONAI_2D_NULL_PTR is returned.

Example

None.

Related Topics

None.

kd_mpi_nonai_2d_send_frame#

Description

Support users to send original images for 2D operations.

Syntax

k_s32 kd_mpi_nonai_2d_send_frame(k_u32 chn_num, k_video_frame_info *frame, k_s32 milli_sec);

Parameters

Parameter Name

Description

Input/Output

chn_num

Channel number. Value range: [0, K_NONAI_2D_MAX_CHN_NUMS].

Input

frame

For the original image information structure pointer, refer to “K230 System Control API Reference”.

Input

milli_sec

Timeout for sending images. Value range: [-1,+∞] -1: blocking. 0: Non-blocking. > 0: timeout period.

Input

Return Value

Return Value

Description

0

success.

non-0

Failure, see error code.

Chip differences

None.

Requirements

  • Header File: mpi_nonai_2d_api.h,k_type.h,k_module.h,k_sys_comm.h,k_nonai_2d_comm.h

  • Library File: libvenc.a

Notes

  • This interface enables users to send images to channels.

  • If milli_sec is less than -1, return K_ERR_NONAI_2D_ILLEGAL_PARAM.

  • To call this interface to send images, the user needs to ensure that the channel has been created and enabled to receive input images.

Example

None.

Related Topics

None.

data type#

The relevant data types of this function module are defined as follows:

K_NONAI_2D_MAX_CHN_NUMS#

Description

Define the maximum number of channels.

definition

#define K_NONAI_2D_MAX_CHN_NUMS  24

Notes

None.

Related Data Types and Interfaces

None.

k_nonai_2d_calc_mode#

Description

Define the 2D operation mode.

definition

typedef enum
{
​     K_NONAI_2D_CALC_MODE_CSC = 0,    /* Color space conversion */
​     K_NONAI_2D_CALC_MODE_OSD,      /* On Screen Display */
​     K_NONAI_2D_CALC_MODE_BORDER,     /* Draw border */
​     K_NONAI_2D_CALC_MODE_OSD_BORDER,   /* OSD first, then draw border */
​     K_NONAI_2D_CALC_MODE_BUTT
} k_nonai_2d_calc_mode;

member

member name

Description

mode

2D calculation mode

Notes

Currently, only CSC mode is supported, and other modes have not yet been implemented.

Related Data Types and Interfaces

None.

k_nonai_2d_chn_attr#

Description

Define channel properties.

definition

typedef struct
{
​      k_pixel_format dst_fmt;     /* Format of output image */
​      k_nonai_2d_calc_mode mode;
} k_nonai_2d_chn_attr;

member

member name

Description

dst_fmt

For the format of the output image, see Chapter 1.2

mode

2D calculation mode, see Chapter 3.2

Notes

Related Data Types and Interfaces

None.

k_nonai_2d_color_gamut#

Description

Define the color type of CSC. The default is BT601.

definition

typedef enum
{
​     NONAI_2D_COLOR_GAMUT_BT601 = 0,
​     NONAI_2D_COLOR_GAMUT_BT709,
​     NONAI_2D_COLOR_GAMUT_BT2020,
​     NONAI_2D_COLOR_GAMUT_BUTT
} k_nonai_2d_color_gamut;

Notes

None.

Related Data Types and Interfaces

None.

error code#

Table 41 API error codes

error code

Macro definition

Description

0xa0188001

K_ERR_NONAI_2D_INVALID_DEVID

Device ID is outside the legal range

0xa0188002

K_ERR_NONAI_2D_INVALID_CHNID

Channel ID is outside the legal range

0xa0188003

K_ERR_NONAI_2D_ILLEGAL_PARAM

Parameter exceeds legal range

0xa0188004

K_ERR_NONAI_2D_EXIST

Trying to apply for or create an existing device, channel or resource

0xa0188005

K_ERR_NONAI_2D_UNEXIST

Attempting to use or destroy a non-existent device, channel or resource

0xa0188006

K_ERR_NONAI_2D_NULL_PTR

There is a null pointer in the function parameter

0xa0188007

K_ERR_NONAI_2D_NOT_CONFIG

Not configured before use

0xa0188008

K_ERR_NONAI_2D_NOT_SUPPORT

Unsupported parameters or functions

0xa0188009

K_ERR_NONAI_2D_NOT_PERM

This operation is not allowed, such as trying to modify static configuration parameters

0xa018800c

K_ERR_NONAI_2D_NOMEM

Failed to allocate memory, such as insufficient system memory

0xa018800d

K_ERR_NONAI_2D_NOBUF

Failed to allocate cache, such as the requested data buffer is too large

0xa018800e

K_ERR_NONAI_2D_BUF_EMPTY

No data in buffer

0xa018800f

K_ERR_NONAI_2D_BUF_FULL

The buffer is full of data

0xa0188010

K_ERR_NONAI_2D_NOTREADY

The system is not initialized or the corresponding module is not loaded.

0xa0188011

K_ERR_NONAI_2D_BADADDR

The address is outside the legal range

0xa0188012

K_ERR_NONAI_2D_BUSY

NONAI_2D system busy

Comments list
Comments
Log in