394 lines
15 KiB
C
Executable File
394 lines
15 KiB
C
Executable File
/*
|
||
* Copyright (c) XMEDIA. All rights reserved.
|
||
*/
|
||
|
||
#ifndef __XMEDIA_TDE_H__
|
||
#define __XMEDIA_TDE_H__
|
||
|
||
#include "xmedia_errcode.h"
|
||
#include "xmedia_video_common.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif /* __cplusplus */
|
||
|
||
#define XMEDIA_COLOR_COMPONENT_NUM 3
|
||
|
||
typedef struct {
|
||
xmedia_u64 phys_addr[XMEDIA_COLOR_COMPONENT_NUM]; // 0:Y或RGB; 1:UV; 2:U或V
|
||
xmedia_u32 stride[XMEDIA_COLOR_COMPONENT_NUM]; // 0:Y或RGB; 1:UV; 2:U或V
|
||
xmedia_u32 width;
|
||
xmedia_u32 height;
|
||
xmedia_video_pixel_format pixel_format;
|
||
xmedia_bool is_alpha_ext_1555; // ARGB1555 alpha位扩展8位有效位场景,0:系统默认扩展,1:用户配置
|
||
xmedia_u8 alpha0; // ARGB1555 alpha位扩展8位有效位场景,0对应的8位有效位
|
||
xmedia_u8 alpha1; // ARGB1555 alpha位扩展8位有效位场景,1对应的8位有效位
|
||
xmedia_u64 clut_phys_addr; // 256个argb8888颜色,总内存256*4字节
|
||
xmedia_bool clut_reload;
|
||
} xmedia_tde_surface;
|
||
|
||
typedef struct {
|
||
xmedia_tde_surface surface;
|
||
xmedia_video_rect rect;
|
||
} xmedia_tde_surface_info;
|
||
|
||
typedef struct {
|
||
xmedia_video_point start_point;
|
||
xmedia_video_point end_point;
|
||
xmedia_u32 thick;
|
||
xmedia_u32 color; // 颜色值固定按照ARGB8888解析,可配范围[0x0, 0xffffffff]
|
||
} xmedia_tde_line_attr;
|
||
|
||
typedef enum {
|
||
XMEDIA_TDE_BLEND_MODE_CLEAR = 0, // fs: 0.0 fd: 0.0
|
||
XMEDIA_TDE_BLEND_MODE_SRC, // fs: 1.0 fd: 0.0
|
||
XMEDIA_TDE_BLEND_MODE_DST, // fs: 0.0 fd: 1.0
|
||
XMEDIA_TDE_BLEND_MODE_SRCOVER, // fs: 1.0 fd: 1.0-sa
|
||
XMEDIA_TDE_BLEND_MODE_DSTOVER, // fs: 1.0-da fd: 1.0
|
||
XMEDIA_TDE_BLEND_MODE_SRCIN, // fs: da fd: 0.0
|
||
XMEDIA_TDE_BLEND_MODE_DSTIN, // fs: 0.0 fd: sa
|
||
XMEDIA_TDE_BLEND_MODE_SRCOUT, // fs: 1.0-da fd: 0.0
|
||
XMEDIA_TDE_BLEND_MODE_DSTOUT, // fs: 0.0 fd: 1.0-sa
|
||
XMEDIA_TDE_BLEND_MODE_SRCATOP, // fs: da fd: 1.0-sa
|
||
XMEDIA_TDE_BLEND_MODE_DSTATOP, // fs: 1.0-da fd: sa
|
||
XMEDIA_TDE_BLEND_MODE_XOR, // fs: 1.0-da fd: 1.0-sa
|
||
XMEDIA_TDE_BLEND_MODE_DARKEN, // alpha取1,color取min(s1, s2)
|
||
XMEDIA_TDE_BLEND_MODE_LIGHTEN, // alpha取1,color取max(s1, s2)
|
||
XMEDIA_TDE_BLEND_MODE_MULTIPLY, // As1 * As2/256, Cs1 * Cs2/256
|
||
XMEDIA_TDE_BLEND_MODE_SCREEN, // As1 + As2 - As1 * As2/256, Cs1 + Cs2 - Cs1 * Cs2/256
|
||
XMEDIA_TDE_BLEND_MODE_MAX
|
||
} xmedia_tde_blend_mode;
|
||
|
||
typedef struct {
|
||
xmedia_bool global_alpha_en;
|
||
xmedia_bool pixel_alpha_en;
|
||
xmedia_bool bg_premulti_en;
|
||
xmedia_bool fg_premulti_en;
|
||
xmedia_tde_blend_mode blend_mode;
|
||
} xmedia_tde_blend_attr;
|
||
|
||
typedef enum {
|
||
XMEDIA_TDE_ROP_MODE_BLACKNESS = 0, // Blackness
|
||
XMEDIA_TDE_ROP_MODE_NOTMERGEPEN, // ~(S2 | S1)
|
||
XMEDIA_TDE_ROP_MODE_MASKNOTPEN, // ~S2&S1
|
||
XMEDIA_TDE_ROP_MODE_NOTCOPYPEN, // ~S2
|
||
XMEDIA_TDE_ROP_MODE_MASKPENNOT, // S2&~S1
|
||
XMEDIA_TDE_ROP_MODE_NOT, // ~S1
|
||
XMEDIA_TDE_ROP_MODE_XORPEN, // S2^S1
|
||
XMEDIA_TDE_ROP_MODE_NOTMASKPEN, // ~(S2 & S1)
|
||
XMEDIA_TDE_ROP_MODE_MASKPEN, // S2&S1
|
||
XMEDIA_TDE_ROP_MODE_NOTXORPEN, // ~(S2^S1)
|
||
XMEDIA_TDE_ROP_MODE_NOP, // S1
|
||
XMEDIA_TDE_ROP_MODE_MERGENOTPEN, // ~S2|S1
|
||
XMEDIA_TDE_ROP_MODE_COPYPEN, // S2
|
||
XMEDIA_TDE_ROP_MODE_MERGEPENNOT, // S2|~S1
|
||
XMEDIA_TDE_ROP_MODE_MERGEPEN, // S2|S1
|
||
XMEDIA_TDE_ROP_MODE_WHITE, // Whiteness
|
||
XMEDIA_TDE_ROP_MODE_MAX
|
||
} xmedia_tde_rop_mode;
|
||
|
||
typedef struct {
|
||
xmedia_tde_rop_mode alpha_rop;
|
||
xmedia_tde_rop_mode color_rop;
|
||
} xmedia_tde_rop_attr;
|
||
|
||
typedef enum {
|
||
XMEDIA_TDE_COLORKEY_MODE_FOREGROUND = 0,
|
||
XMEDIA_TDE_COLORKEY_MODE_BACKGROUND,
|
||
XMEDIA_TDE_COLORKEY_MODE_MAX
|
||
} xmedia_tde_colorkey_mode;
|
||
|
||
typedef struct {
|
||
xmedia_u8 component_min;
|
||
xmedia_u8 component_max;
|
||
xmedia_u8 component_mask;
|
||
xmedia_bool is_component_out;
|
||
xmedia_bool is_component_ignore;
|
||
} xmedia_tde_colorkey_comp;
|
||
|
||
typedef union {
|
||
struct {
|
||
xmedia_tde_colorkey_comp alpha;
|
||
xmedia_tde_colorkey_comp red;
|
||
xmedia_tde_colorkey_comp green;
|
||
xmedia_tde_colorkey_comp blue;
|
||
} argb_color_key;
|
||
struct {
|
||
xmedia_tde_colorkey_comp alpha;
|
||
xmedia_tde_colorkey_comp y;
|
||
xmedia_tde_colorkey_comp cb;
|
||
xmedia_tde_colorkey_comp cr;
|
||
} yuv_color_key;
|
||
struct {
|
||
xmedia_tde_colorkey_comp alpha;
|
||
xmedia_tde_colorkey_comp clut;
|
||
} clut_color_key;
|
||
} xmedia_tde_colorkey_value;
|
||
|
||
typedef struct {
|
||
xmedia_tde_colorkey_mode ck_mode;
|
||
xmedia_tde_colorkey_value ck_value;
|
||
} xmedia_tde_colorkey_attr;
|
||
|
||
typedef enum {
|
||
XMEDIA_TDE_CLIP_MODE_INSIDE = 0,
|
||
XMEDIA_TDE_CLIP_MODE_OUTSIDE,
|
||
XMEDIA_TDE_CLIP_MODE_MAX
|
||
} xmedia_tde_clip_mode;
|
||
|
||
typedef struct {
|
||
xmedia_tde_clip_mode clip_mode;
|
||
xmedia_video_rect clip_rect;
|
||
} xmedia_tde_clip_attr;
|
||
|
||
typedef enum {
|
||
XMEDIA_TDE_OUT_ALPHA_MODE_NORMAL = 0,
|
||
XMEDIA_TDE_OUT_ALPHA_MODE_FROM_BACKGROUND,
|
||
XMEDIA_TDE_OUT_ALPHA_MODE_FROM_FOREGROUND,
|
||
XMEDIA_TDE_OUT_ALPHA_MODE_FROM_GLOBALALPHA,
|
||
XMEDIA_TDE_OUT_ALPHA_MODE_MAX
|
||
} xmedia_tde_out_alpha_mode;
|
||
|
||
typedef struct {
|
||
xmedia_bool blend_en;
|
||
xmedia_tde_blend_attr blend_attr;
|
||
xmedia_bool rop_en;
|
||
xmedia_tde_rop_attr rop_attr;
|
||
xmedia_bool colorkey_en;
|
||
xmedia_tde_colorkey_attr ck_attr;
|
||
xmedia_bool clip_en;
|
||
xmedia_tde_clip_attr clip_attr;
|
||
xmedia_bool mirror_en;
|
||
xmedia_bool flip_en;
|
||
xmedia_tde_out_alpha_mode alpha_mode;
|
||
xmedia_u8 global_alpha;
|
||
} xmedia_tde_operation_attr;
|
||
|
||
/*
|
||
* 函数功能: 初始化tde模块
|
||
* 函数参数:
|
||
* NA
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NOT_READY - 驱动未加载
|
||
*/
|
||
xmedia_s32 xmedia_tde_init(xmedia_void);
|
||
|
||
/*
|
||
* 函数功能: 去初始化tde模块
|
||
* 函数参数:
|
||
* NA
|
||
* 返回值:
|
||
* NA
|
||
*/
|
||
xmedia_void xmedia_tde_exit(xmedia_void);
|
||
|
||
/*
|
||
* 函数功能: 创建一个工作组(job)
|
||
* 函数参数:
|
||
* handle - 输出参数, 对应job的有效句柄
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的job资源
|
||
*/
|
||
xmedia_s32 xmedia_tde_create_job(xmedia_s32 *handle);
|
||
|
||
/*
|
||
* 函数功能: 添加一个或多个画线任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* line - 输入参数, 线条属性信息
|
||
* line_num - 输入参数, 线条个数
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_draw_line(xmedia_s32 handle, const xmedia_tde_surface_info *dst,
|
||
xmedia_tde_line_attr *line, xmedia_u32 line_num);
|
||
|
||
/*
|
||
* 函数功能: 添加一个快速填充任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* fill_color - 输入参数, 填充色, 固定按ARGB8888配
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_quick_fill(xmedia_s32 handle, const xmedia_tde_surface_info *dst,
|
||
xmedia_u32 fill_color);
|
||
|
||
/*
|
||
* 函数功能: 添加一个快速拷贝任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* src - 输入参数, 源surface和源rect
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_quick_copy(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||
const xmedia_tde_surface_info *dst);
|
||
|
||
/*
|
||
* 函数功能: 添加一个缩放任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* src - 输入参数, 源surface和源rect
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_scale(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||
const xmedia_tde_surface_info *dst);
|
||
|
||
/*
|
||
* 函数功能: 添加一个旋转任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* src - 输入参数, 源surface和源rect
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* rot - 输入参数, 旋转角度
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_rotation(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||
const xmedia_tde_surface_info *dst, xmedia_video_rotation rot);
|
||
|
||
/*
|
||
* 函数功能: 添加一个单源搬移任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* src - 输入参数, 源surface和源rect
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* fill_color - 输入参数, 可以配ARGB8888格式的填充色当做前景与背景叠加输出到目标位图
|
||
* opt - 输入参数, 附加操作集合(alpha blending/rop/colorkey/clip/mirro/flip); opt可以为NULL
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_single_blit(xmedia_s32 handle, const xmedia_tde_surface_info *src,
|
||
const xmedia_tde_surface_info *dst, xmedia_u32 fill_color, xmedia_tde_operation_attr *opt);
|
||
|
||
/*
|
||
* 函数功能: 添加一个双源搬移任务(task)到指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* bg - 输入参数, 背景surface和背景rect
|
||
* fg - 输入参数, 前景surface和前景rect
|
||
* dst - 输入参数, 目标surface和目标rect
|
||
* opt - 输入参数, 附加操作集合(alpha blending/rop/colorkey/clip/mirro/flip);不能为NULL
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NULL_PTR - 空指针
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_BUFFER_EMPTY - 没有空闲的task资源
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_SUPPORT - 参数配置超出能力范围,不支持
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许(如已经提交的工作组不可再添加任务)
|
||
*/
|
||
xmedia_s32 xmedia_tde_add_task_double_blit(xmedia_s32 handle, const xmedia_tde_surface_info *bg,
|
||
const xmedia_tde_surface_info *fg, const xmedia_tde_surface_info *dst, xmedia_tde_operation_attr *opt);
|
||
|
||
/*
|
||
* 函数功能: 提交指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
||
*/
|
||
xmedia_s32 xmedia_tde_submit_job(xmedia_s32 handle);
|
||
|
||
/*
|
||
* 函数功能: 取消指定的工作组(job)
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_NOT_PERMITTED - 操作不允许
|
||
* 注意:异步提交, 接口返回不代表硬件已经完成,可使用xmedia_vgs_wait_job同步
|
||
*/
|
||
xmedia_s32 xmedia_tde_cancel_job(xmedia_s32 handle);
|
||
|
||
/*
|
||
* 函数功能: 等待指定的工作组(job)完成
|
||
* 函数参数:
|
||
* handle - 输入参数, 对应xmedia_tde_create_job得到的有效句柄
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
* XMEDIA_ERRCODE_TIMEOUT - 等待超时
|
||
*/
|
||
xmedia_s32 xmedia_tde_wait_job(xmedia_s32 handle, xmedia_u32 timeout);
|
||
|
||
/*
|
||
* 函数功能: 指定alpha阈值
|
||
* 函数参数:
|
||
* value - 输入参数, alpha阈值 0~255
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
*/
|
||
xmedia_s32 xmedia_tde_set_alpha_threshold_value(xmedia_u8 value);
|
||
|
||
/*
|
||
* 函数功能: 获取alpha阈值
|
||
* 函数参数:
|
||
* value - 输出参数, alpha阈值 0~255
|
||
* 返回值:
|
||
* XMEDIA_SUCCESS - 函数执行成功
|
||
* XMEDIA_ERRCODE_NOT_INIT - tde模块未初始化
|
||
* XMEDIA_ERRCODE_INVALID_PARAM - 参数不合法
|
||
*/
|
||
xmedia_s32 xmedia_tde_get_alpha_threshold_value(xmedia_u8 *value);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif /* __cplusplus */
|
||
|
||
#endif /* __XMEDIA_TDE_H__ */
|