280 lines
10 KiB
C
280 lines
10 KiB
C
/*
|
|
* Copyright (c) XMEDIA. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __XMEDIA_VGS_H__
|
|
#define __XMEDIA_VGS_H__
|
|
|
|
#include "xmedia_errcode.h"
|
|
#include "xmedia_video_common.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
#define XMEDIA_VGS_CLUT_LEN 16
|
|
#define XMEDIA_VGS_POINT_NUM 4
|
|
|
|
typedef struct {
|
|
xmedia_video_frame_info img_in;
|
|
xmedia_video_frame_info img_out;
|
|
} xmedia_vgs_frame_info;
|
|
|
|
typedef struct {
|
|
xmedia_video_point start_point;
|
|
xmedia_video_point end_point;
|
|
xmedia_u32 thick;
|
|
xmedia_u32 color; // 颜色值固定按照ARGB8888解析,alpha固定0xff,RGB用户可配,范围[0x0, 0x00ffffff]
|
|
} xmedia_vgs_line_attr;
|
|
|
|
typedef enum {
|
|
XMEDIA_VGS_COVER_TYPE_RECT = 0,
|
|
XMEDIA_VGS_COVER_TYPE_QUAD_RANGLE,
|
|
XMEDIA_VGS_COVER_TYPE_MAX
|
|
} xmedia_vgs_cover_type;
|
|
|
|
typedef struct {
|
|
xmedia_bool is_solid;
|
|
xmedia_u32 thick;
|
|
xmedia_video_point points[XMEDIA_VGS_POINT_NUM];
|
|
} xmedia_vgs_quadrangle_cover;
|
|
|
|
typedef struct {
|
|
xmedia_vgs_cover_type cover_type;
|
|
union {
|
|
xmedia_video_rect dst_rect;
|
|
xmedia_vgs_quadrangle_cover quadrangle;
|
|
};
|
|
xmedia_u32 color;
|
|
} xmedia_vgs_cover_attr;
|
|
|
|
typedef enum {
|
|
XMEDIA_VGS_OSD_REVERT_MODE_RGB = 0,
|
|
XMEDIA_VGS_OSD_REVERT_MODE_ALPHA,
|
|
XMEDIA_VGS_OSD_REVERT_MODE_BOTH,
|
|
XMEDIA_VGS_OSD_REVERT_MODE_MAX
|
|
} xmedia_vgs_osd_revert_mode;
|
|
|
|
typedef struct {
|
|
xmedia_video_rect osd_rect;
|
|
xmedia_video_pixel_format pixel_fmt;
|
|
xmedia_u64 phys_addr;
|
|
xmedia_u32 stride;
|
|
xmedia_u8 alpha0; // 仅用于位图是ARGB1555的场景, alpha值为0时使用alpha0
|
|
xmedia_u8 alpha1; // 仅用于位图是ARGB1555的场景, alpha值为1时使用alpha1
|
|
xmedia_bool is_osd_revert;
|
|
xmedia_vgs_osd_revert_mode revert_mode;
|
|
xmedia_u32 clut[XMEDIA_VGS_CLUT_LEN];
|
|
} xmedia_vgs_osd_attr;
|
|
|
|
typedef struct {
|
|
xmedia_video_size dst_img_size;
|
|
xmedia_video_point out_block_offset;
|
|
} xmedia_vgs_block_info;
|
|
|
|
/*
|
|
* 函数功能: 初始化vgs模块
|
|
* 函数参数:
|
|
* NA
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NOT_READY - 驱动未加载
|
|
*/
|
|
xmedia_s32 xmedia_vgs_init(xmedia_void);
|
|
|
|
/*
|
|
* 函数功能: 去初始化vgs模块
|
|
* 函数参数:
|
|
* NA
|
|
* 返回值:
|
|
* NA
|
|
*/
|
|
xmedia_void xmedia_vgs_exit(xmedia_void);
|
|
|
|
/*
|
|
* 函数功能: 创建job
|
|
* 函数参数:
|
|
* handle - 输出参数, 对应job的有效句柄
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
*/
|
|
xmedia_s32 xmedia_vgs_create_job(xmedia_s32 *handle);
|
|
|
|
/*
|
|
* 函数功能: 添加缩放task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入、输出帧信息
|
|
* scale_mode - 输入参数, 缩放模式
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_scale(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
xmedia_video_scale_mode scale_mode);
|
|
|
|
/*
|
|
* 函数功能: 添加画线task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入、输出帧信息
|
|
* line - 输入参数, 线条属性信息
|
|
* num - 输入参数, 线条个数
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_line(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
const xmedia_vgs_line_attr *line, xmedia_u32 num);
|
|
|
|
/*
|
|
* 函数功能: 添加遮挡task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入、输出帧信息
|
|
* cover - 输入参数, 遮挡属性信息
|
|
* num - 输入参数, 遮挡个数
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_cover(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
const xmedia_vgs_cover_attr *cover, xmedia_u32 num);
|
|
|
|
/*
|
|
* 函数功能: 添加叠加位图task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入、输出帧信息
|
|
* osd - 输入参数, 位图属性信息
|
|
* num - 输入参数, 位图个数
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_osd(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
const xmedia_vgs_osd_attr *osd, xmedia_u32 num);
|
|
|
|
/*
|
|
* 函数功能: 添加旋转task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入、输出帧信息
|
|
* rotation - 输入参数, 旋转角度
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_rotation(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
xmedia_video_rotation rotation);
|
|
|
|
/*
|
|
* 函数功能: 添加亮度统计task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入、输出帧信息
|
|
* luma_rect - 输入参数, 亮度统计区域
|
|
* num - 输入参数, 区域个数,针对luma_rect和luma_data同时生效
|
|
* luma_data - 输出参数, 亮度统计结果
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_luma(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
const xmedia_video_rect *luma_rect, xmedia_u32 num, xmedia_u64 *luma_data);
|
|
|
|
/*
|
|
* 函数功能: 添加block scale task到指定的job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* frame_info - 输入参数, 输入原图(整图)、输出分块帧信息
|
|
* block_info - 输入参数, 分块信息
|
|
* scale_mode - 输入参数, 缩放模式
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的job不可再添加任务)
|
|
*/
|
|
xmedia_s32 xmedia_vgs_add_task_block_scale(xmedia_s32 handle, const xmedia_vgs_frame_info *frame_info,
|
|
const xmedia_vgs_block_info *block_info, xmedia_video_scale_mode scale_mode);
|
|
|
|
/*
|
|
* 函数功能: 提交job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
|
*/
|
|
xmedia_s32 xmedia_vgs_submit_job(xmedia_s32 handle);
|
|
|
|
/*
|
|
* 函数功能: 取消job
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
|
* 注意:异步提交, 接口返回不代表硬件已经完成,可使用xmedia_vgs_wait_job同步
|
|
*/
|
|
xmedia_s32 xmedia_vgs_cancel_job(xmedia_s32 handle);
|
|
|
|
/*
|
|
* 函数功能: 等待job完成
|
|
* 函数参数:
|
|
* handle - 输入参数, 对应xmedia_vgs_create_job得到的有效句柄
|
|
* 返回值:
|
|
* XMEDIA_SUCCESS - 函数执行成功
|
|
* XMEDIA_ERRCODE_NOT_INIT - vgs系统没有准备好
|
|
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
|
* XMEDIA_ERRCODE_TIMEOUT - 等待超时
|
|
*/
|
|
xmedia_s32 xmedia_vgs_wait_job(xmedia_s32 handle, xmedia_u32 timeout);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* __XMEDIA_VGS_H__ */
|