Files

447 lines
17 KiB
C
Executable File

/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __XMEDIA_REGION_H__
#define __XMEDIA_REGION_H__
#include "xmedia_sys.h"
#include "xmedia_video_common.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
// 定义颜色查表长度
#define RGN_CLUT_NUM 16
// 定义任意四边形坐标点个数
#define RGN_QUAD_POINT_NUM 4
// 定义区域类型
typedef enum {
XMEDIA_RGN_TYPE_OVERLAY = 0,
XMEDIA_RGN_TYPE_OVERLAYEX,
XMEDIA_RGN_TYPE_COVER,
XMEDIA_RGN_TYPE_COVEREX,
XMEDIA_RGN_TYPE_MOSAIC,
XMEDIA_RGN_TYPE_MOSAICEX,
XMEDIA_RGN_TYPE_CORNER_RECT,
XMEDIA_RGN_TYPE_CORNER_RECTEX,
XMEDIA_RGN_TYPE_MAX
}xmedia_rgn_type;
// 定义overlay区域属性结构体
typedef struct {
xmedia_u32 bg_color; // 背景色
xmedia_u32 canvas_num; // 内存个数
xmedia_video_size size; // 区域大小
xmedia_video_pixel_format pixel_format; // 像素格式
} xmedia_rgn_overlay_attr;
// 定义overlayex区域属性结构体
typedef struct {
xmedia_u32 bg_color; // 背景色
xmedia_u32 canvas_num; // 内存个数
xmedia_video_size size; // 区域大小
xmedia_video_pixel_format pixel_format; // 像素格式
} xmedia_rgn_overlayex_attr;
// 定义区域属性联合体
typedef union {
xmedia_rgn_overlay_attr overlay; // overlay属性
xmedia_rgn_overlayex_attr overlayex; // overlayex属性
} xmedia_rgn_type_attr;
// 定义区域属性结构体
typedef struct {
xmedia_rgn_type type; // 区域类型
xmedia_rgn_type_attr attr; // 区域属性
} xmedia_rgn_attr;
// 定义mosaic/mosaicex 块大小
typedef enum {
XMEDIA_RGN_MOSAIC_BLK_SIZE_8,
XMEDIA_RGN_MOSAIC_BLK_SIZE_16,
XMEDIA_RGN_MOSAIC_BLK_SIZE_32,
XMEDIA_RGN_MOSAIC_BLK_SIZE_MAX
} xmedia_rgn_mosaic_blk_size;
// 定义mosaic属性结构体
typedef struct {
xmedia_u32 layer; // 区域层次
xmedia_video_rect rect; // 位置宽高
xmedia_rgn_mosaic_blk_size blk_size; // 块大小
} xmedia_rgn_mosaic_chn_attr;
// 定义mosaicex属性结构体
typedef struct {
xmedia_u32 layer; // 区域层次
xmedia_video_rect rect; // 位置宽高
xmedia_rgn_mosaic_blk_size blk_size; // 块大小
} xmedia_rgn_mosaicex_chn_attr;
// 定义cover/coverex 类型
typedef enum {
XMEDIA_RGN_COVER_TYPE_RECT = 0, // 矩形
XMEDIA_RGN_COVER_TYPE_QUAD, // 任意四边形
XMEDIA_RGN_COVER_TYPE_MAX
} xmedia_rgn_cover_type;
// 定义任意四边形属性结构体
typedef struct {
xmedia_bool is_solid; // 实心虚心标志位
xmedia_u32 thick; // 厚度
xmedia_video_point point[RGN_QUAD_POINT_NUM];// 坐标点位置
} xmedia_rgn_quad;
// 定义cover通道属性结构体
typedef struct {
xmedia_rgn_cover_type cover_type; // 类型
union {
xmedia_video_rect rect; // 位置宽高
xmedia_rgn_quad quad; // 任意四边形属性
};
xmedia_u32 color; // 颜色
xmedia_u32 layer; // 区域层次
} xmedia_rgn_cover_chn_attr;
// 定义coverex通道属性结构体
typedef struct {
xmedia_rgn_cover_type coverex_type;// 类型
union {
xmedia_video_rect rect; // 位置宽高
xmedia_rgn_quad quad; // 任意四边形属性
};
xmedia_u32 color; // 颜色
xmedia_u32 layer; // 区域层次
} xmedia_rgn_coverex_chn_attr;
// 定义qp保护
typedef struct {
xmedia_bool disable; // 关闭 osd与roi重叠区域 的osd qp保护
xmedia_bool is_abs_qp; // 是否绝对qp
xmedia_s32 qp_val; // qp值
} xmedia_rgn_overlay_qp_info;
// 定义 venc 图像类型
typedef enum {
XMEDIA_RGN_ATTACH_JPEG_MAIN = 0,
XMEDIA_RGN_ATTACH_JPEG_MPF0,
XMEDIA_RGN_ATTACH_JPEG_MPF1,
XMEDIA_RGN_ATTACH_JPEG_MAX
} xmedia_rgn_attach_dst;
// 定义反色模式
typedef enum {
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_RGB = 0,
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_ALPHA,
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_BOTH,
XMEDIA_RGN_OSD_INVERT_COLOR_MODE_MAX
} xmedia_rgn_osd_invert_color_mode;
// 定义反色属性
typedef struct {
xmedia_bool enable; // 是否开启反色
xmedia_rgn_osd_invert_color_mode mode; // 反色模式
} xmedia_rgn_osd_invert_color_attr;
// 定义overlay通道属性结构体
typedef struct {
xmedia_u8 alpha0; // 仅用于位图是ARGB1555场景,alpha位0对应的8位有效值
xmedia_u8 alpha1; // 仅用于位图是ARGB1555场景,alpha位1对应的8位有效值
xmedia_u32 layer; // 区域层次
xmedia_u32 clut[RGN_CLUT_NUM]; // 颜色查找表
xmedia_video_point point; // 坐标点
xmedia_rgn_attach_dst dst; // venc 图像类型
xmedia_rgn_overlay_qp_info qp_info; // qp保护
xmedia_rgn_osd_invert_color_attr invert_color; // 反色属性
} xmedia_rgn_overlay_chn_attr;
// 定义overlayex通道属性结构体
typedef struct {
xmedia_u8 alpha0; // 仅用于位图是ARGB1555场景,alpha位0对应的8位有效值
xmedia_u8 alpha1; // 仅用于位图是ARGB1555场景,alpha位1对应的8位有效值
xmedia_u32 layer; // 区域层次
xmedia_u32 clut[RGN_CLUT_NUM]; // 颜色查找表
xmedia_video_point point; // 坐标点
xmedia_rgn_osd_invert_color_attr invert_color; // 反色属性
} xmedia_rgn_overlayex_chn_attr;
// 定义corner rect通道属性结构体
typedef struct {
xmedia_u32 thick; // 线宽
xmedia_u32 color; // 颜色
xmedia_u32 layer; // 区域层次
xmedia_u32 hor_len; // 水平线长
xmedia_u32 ver_len; // 垂直线长
xmedia_video_rect rect; // 位置宽高
} xmedia_rgn_corner_rect_chn_attr;
// 定义corner rectex通道属性结构体
typedef struct {
xmedia_u32 thick; // 线宽
xmedia_u32 color; // 颜色
xmedia_u32 layer; // 区域层次
xmedia_u32 hor_len; // 水平线长
xmedia_u32 ver_len; // 垂直线长
xmedia_video_rect rect; // 位置宽高
} xmedia_rgn_corner_rectex_chn_attr;
// 定义区域通道属性联合体
typedef union {
xmedia_rgn_overlay_chn_attr overlay_chn; // overlay区域
xmedia_rgn_overlayex_chn_attr overlayex_chn; // overlayex区域
xmedia_rgn_cover_chn_attr cover_chn; // cover区域
xmedia_rgn_coverex_chn_attr coverex_chn; // coverex区域
xmedia_rgn_mosaic_chn_attr mosaic_chn; // mosaic区域
xmedia_rgn_mosaicex_chn_attr mosaicex_chn; // mosaicex区域
xmedia_rgn_corner_rect_chn_attr corner_rect_chn; // corner区域
xmedia_rgn_corner_rectex_chn_attr corner_rectex_chn; // cornerex区域
} xmedia_rgn_type_chn_attr;
// 定义区域通道属性
typedef struct {
xmedia_bool is_show; // 是否显示
xmedia_rgn_type type; // 区域类型
xmedia_rgn_type_chn_attr attr; // 区域属性
} xmedia_rgn_chn_attr;
// 定义区域画布信息
typedef struct {
xmedia_u64 phy_addr; // 画布物理地址
xmedia_void *ATTRIBUTE virt_addr; // 画布虚拟地址
xmedia_u32 stride; // 画布跨距
xmedia_video_size size; // 画布大小
xmedia_video_pixel_format pixel_format; // 像素格式
} xmedia_rgn_canvas_info;
/*
* 函数功能: 初始化region模块
* 函数参数:
* NA
* 返回值:
* XMEDIA_SUCCESS - 函数执行成功
* XMEDIA_ERRCODE_NOT_READY - 驱动未加载
*/
xmedia_s32 xmedia_rgn_init(xmedia_void);
/*
* 函数功能: 去初始化region模块
* 函数参数:
* NA
* 返回值:
* NA
*/
xmedia_void xmedia_rgn_exit(xmedia_void);
/*
* 函数功能: 创建一个区域
* 函数参数:
* handle - 输入参数,区域号
* rgn_attr - 输入参数,区域属性指针
* 返回值:
* XMEDIA_SUCCESS - 区域创建成功
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_EXIST - 重复创建已存在的区域
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NO_BUFFER_FREE - 分配内存失败
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_create(xmedia_u32 handle, const xmedia_rgn_attr *rgn_attr);
/*
* 函数功能: 销毁一个区域
* 函数参数:
* handle - 输入参数,区域号
*
* 返回值:
* XMEDIA_SUCCESS - 区域销毁成功
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_destroy(xmedia_u32 handle);
/*
* 函数功能: 获取区域属性
* 函数参数:
* handle - 输入参数,区域号
* rgn_attr - 输出参数,区域属性指针
* 返回值:
* XMEDIA_SUCCESS - 获取区域属性成功
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_get_attr(xmedia_u32 handle, xmedia_rgn_attr *rgn_attr);
/*
* 函数功能: 设置区域属性
* 函数参数:
* handle - 输入参数,区域号
* rgn_attr - 输入参数,区域属性指针
* 返回值:
* XMEDIA_SUCCESS - 设置区域属性成功
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_BUFFER_FULL - 缓冲区数据满
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_set_attr(xmedia_u32 handle, const xmedia_rgn_attr *rgn_attr);
/*
* 函数功能: 将区域叠加到通道上
* 函数参数:
* handle - 输入参数,区域号
* chn - 输入参数,通道结构体指针
* chn_attr - 输入参数,区域通道属性指针
* 返回值:
* XMEDIA_SUCCESS - 区域成功叠加到区域
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
* XMEDIA_ERRCODE_NO_BUFFER_FREE - 分配内存失败
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_attach_to_chn(xmedia_u32 handle, const xmedia_chn_info *chn, const xmedia_rgn_chn_attr *chn_attr);
/*
* 函数功能: 将区域从通道中撤离
* 函数参数:
* handle - 输入参数,区域号
* chn - 输入参数,通道结构体指针
* 返回值:
* XMEDIA_SUCCESS - 区域成功从通道中撤离
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_detach_from_chn(xmedia_u32 handle, const xmedia_chn_info *chn);
/*
* 函数功能: 获取区域通道属性
* 函数参数:
* handle - 输入参数,区域号
* chn - 输入参数,通道结构体指针
* chn_attr - 输出参数,区域通道属性指针
* 返回值:
* XMEDIA_SUCCESS - 成功获取区域通道属性
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_get_display_attr(xmedia_u32 handle, const xmedia_chn_info *chn, xmedia_rgn_chn_attr *chn_attr);
/*
* 函数功能: 设置区域通道属性
* 函数参数:
* handle - 输入参数,区域号
* chn - 输入参数,通道结构体指针
* chn_attr - 输入参数,区域通道属性指针
* 返回值:
* XMEDIA_SUCCESS - 成功设置区域通道属性
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_INVALID_DEV_ID - 无效的设备号
* XMEDIA_ERRCODE_INVALID_CHN_ID - 无效的通道号
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_set_display_attr(xmedia_u32 handle, const xmedia_chn_info *chn, const xmedia_rgn_chn_attr *chn_attr);
/*
* 函数功能: 获取区域画布信息
* 函数参数:
* handle - 输入参数,区域号
* canvas_info --输出参数,画布信息
* 返回值:
* XMEDIA_SUCCESS - 成功获取区域画布信息
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_BUFFER_FULL - 缓冲区数据满
* XMEDIA_ERRCODE_NO_BUFFER_FREE - 分配内存失败
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_get_canvas_info(xmedia_u32 handle, xmedia_rgn_canvas_info *canvas_info);
/*
* 函数功能: 获取区域画布信息
* 函数参数:
* handle - 输入参数,区域号
* 返回值:
* XMEDIA_SUCCESS - 成功获取区域画布信息
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_update_canvas (xmedia_u32 handle);
/*
* 函数功能: 开启批处理
* 函数参数:
* grp - 输入参数,批处理组号
* handle_num - 输入参数,一组批处理中,区域个数
* handle[] - 输入参数,区域句柄号
* 返回值:
* XMEDIA_SUCCESS - 成功获取区域画布信息
* XMEDIA_ERRCODE_NULL_PTR - 函数参数中有空指针
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_batch_begin(xmedia_u32 *grp, xmedia_u32 handle_num, const xmedia_u32 handle[]);
/*
* 函数功能: 结束批处理
* 函数参数:
* grp - 输入参数,组号
* 返回值:
* XMEDIA_SUCCESS - 成功获取区域画布信息
* XMEDIA_ERRCODE_INVALID_PARAM - 参数超出合法范围
* XMEDIA_ERRCODE_NOT_SUPPORT - 不支持的参数或功能
* XMEDIA_ERRCODE_NOT_EXIST - 区域不存在
* XMEDIA_ERRCODE_NOT_PERMITTED - 该操作不允许
* XMEDIA_ERRCODE_NOT_READY - 系统没有初始化或没有加载相应模块的ko
*/
xmedia_s32 xmedia_rgn_batch_end(xmedia_u32 grp);
#ifdef __cplusplus
}
#endif
#endif /* __XMEDIA_REGION_H__ */