
/************************************************* 
 * Copyright (C), Xiongmai Information Technologies Co., Ltd. 2018-2019. All rights reserved. 
 * 文件名: maque_osd.h
 * 作者@编号: XM R&D @02479
 * 版本: V1.00
 * 创建日期: 2019.02.18
 * 功能描述: 定义OSD叠加相关数据结构，声明相关对外接口。
 *
 * 修改历史:  
 ** 1.日期: 2019.02.18
 ** 修改者: XM R&D @02479
 ** 修改内容: 首次创建 。
 ** 2.日期: 2019.02.18
 ** 修改者: XM R&D @02479
 ** 修改内容: 完成了基础版。
 *************************************************/
 

#ifndef MAQUE_OSD_H
#define MAQUE_OSD_H


#include "maque_struct.h"

#ifdef __cplusplus
extern "C" {
#endif


typedef enum
{
	MAQUE_FONT_SIZE_16,
	MAQUE_FONT_SIZE_24,
	MAQUE_FONT_SIZE_32,
	MAQUE_FONT_SIZE_48
} MaQueFontSize_e;

typedef enum
{  
	MAQUE_COLOR_FMT_RGB1555,    ///< 16位表示一个象素。颜色分量位掩码为XRRRRRGG GGGBBBBB。
	MAQUE_COLOR_FMT_RGB565,     ///< 16位表示一个象素。颜色分量位掩码为RRRRRGGG GGGBBBBB。
	MAQUE_COLOR_FMT_RGB888,     ///< 24位表示一个象素。颜色分量位掩码为RRRRRRRR GGGGGGGG BBBBBBBB。
	MAQUE_COLOR_FMT_RGB2BPP,    ///< 2位表示一个象素。颜色分量位掩码为XRR GGBB。
} MaQueColorFormat_e;

typedef struct
{
	XM_S32 index;		/* 标记OSD块索引，[0，7]。时间标题占用0，其它未固定，可任意使用。底层最多只支持同时叠加8块OSD。
						 * 如不调用LibXmMaQue_OSD_showTime()，则索引0，也可以使用。
						 */
	XM_S32 left; 		/* 取值[0, 100]，要叠加对象的左边起始位置相对编码图片宽的百分比。*/
	XM_S32 top; 		/* 取值[0, 100]，要叠加对象的上边起始位置相对编码图片高的百分比。*/
	MaQueFontSize_e eFontSize; 	/* 字点阵大小。单位: 像素。*/
	XM_S32 fgTrans; 	/* 前景透明度，[0，100]。0表示完全透明。*/
	XM_S32 bgTrans;		/* 背景透明度，[0，100]。0表示完全透明。*/
	XM_S32 fgColor; 	/* 前景颜色，0xAARRGGBB格式。*/
	XM_S32 bgColor; 	/* 背景颜色，0xAARRGGBB格式。*/
	XM_CHAR aReserved[4]; /* 保留。*/
} MaQueOsdParam_s;

typedef struct 
{
	XM_S32	index; /* 标记OSD块索引，[0，7]。时间标题占用0，标题占用1，其它未固定，可任意使用。底层最多
					* 只支持同时叠加8块OSD。如不调用LibXmMaQue_OSD_showTime()，则索引0，也可以使用。
					*/
	XM_S32	enable;  /* 是否叠加。0：不叠加，下面的参数将忽略，1：叠加。*/

	XM_U16	x;		/* 左上角x坐标，采用相对坐标体系(CIF：352 x 288(PAL制)或 240(NTSC制))。注意:不是宽的百分比。*/

	XM_U16	y;      /* 左上角y坐标，采用相对坐标体系(CIF：352 x 288(PAL制)或 240(NTSC制))。注意:不是高的百分比。*/

	XM_U16	width;	/* 需叠加OSD块的宽度，即像素点的个数。它是实际宽，不是相对 CIF坐标系。*/	

	XM_U16	height;	 /* 需叠加OSD块的高度，即像素点的个数。它是实际高，不是相对 CIF坐标系。*/

	XM_U32	fg_color; /* 前景颜色，16进制表示为0xAARRGGBB，A(Alpha)表示透明度。*/
 
	XM_U32	bg_color;  /* 背景颜色，16进制表示为0xAARRGGBB，A(Alpha)表示透明度。*/

	MaQueColorFormat_e eColorFormat;  /* 颜色格式。*/

	XM_U8 *pPixel;   /* 叠加的像素颜色值，如果 eColorFormat 的值为MAQUE_COLOR_FMT_RGB1555，
					  * 则需要两个字节来表示一个像素的颜色，所以pixel保存的数据至少应该是 
					  * (width * height * 2)字节。如果pixel是NULL，表示隐藏相应OSD块的叠加。
					  */
}MaQueOsdTitleParam_s;

/*
【功能描述】
	叠加时间到视频图像中。
【参数】
	  参数名称				描述
	channel	[in]		对应sensor输入通道，从0开始。如果设备只有一个sensor该值应设置为0。
	eStreamChn [in]		需要叠加的视频流通道。
	pstOsdParam	[in]	Osd叠加参数。指明字体大小，颜色等。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/ 
XM_S32 LibXmMaQue_OSD_showTime(XM_S32 channel, MaQueStreamChannel_e eStreamChn, MaQueOsdParam_s *pstOsdParam);

/*
【功能描述】
	不叠加时间到视频图像中。
【参数】
	  参数名称				描述
	channel	[in]		对应sensor输入通道，从0开始。如果设备只有一个sensor该值应设置为0。
	eStreamChn [in]		取消时间叠加的视频流通道。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/
XM_S32 LibXmMaQue_OSD_hideTime(XM_S32 channel, MaQueStreamChannel_e eStreamChn);


/*
【功能描述】
	OSD叠加初始化。
【参数】
	  参数名称			描述
	pFontFile [in]	字库文件路径。叠加文字时，需要从字库中提取点阵。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/
XM_S32 LibXmMaQue_OSD_init(const XM_CHAR *pFontFile);


/*
【功能描述】
	叠加标题到视频图像中。
【参数】
	  参数名称				描述
	channel	[in]		对应sensor输入通道，从0开始。如果设备只有一个sensor该值应设置为0。
	eStreamChn [in]		需要叠加的视频流通道。
	pstOsdParam	[in]	Osd叠加参数。
	pTitle [in]			指向需要叠加的标题字符串。如果取消叠加，把该变量设置为NULL即可。
【返回值】
	XM_SUCCESS			成功。
	其它				失败，请参考错误码。
*/
XM_S32 LibXmMaQue_OSD_setTitle(XM_S32 channel, MaQueStreamChannel_e eStreamChn, MaQueOsdParam_s *pstOsdParam, XM_CHAR *pTitle);

/*
【功能描述】
	销毁OSD叠加任务。
【参数】
	无。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/
XM_S32 LibXmMaQue_OSD_destroy(XM_VOID);

/*
【功能描述】
	叠加RGB格式像素点阵到视频图像中。
【参数】
	  参数名称				描述
	channel	[in]		对应sensor输入通道，从0开始。如果设备只有一个sensor该值应设置为0。
	eStreamChn [in]		需要叠加的视频流通道。
	pstParam [in]		叠加的RGB参数。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/
XM_S32 LibXmMaQue_OSD_setRGB(XM_S32 channel, MaQueStreamChannel_e eStreamChn, MaQueOsdTitleParam_s *pstParam);

/*
【功能描述】
	叠加Logo到视频图像中。
【参数】
	  参数名称				描述
	channel	[in]		对应sensor输入通道，从0开始。如果设备只有一个sensor该值应设置为0。
	eStreamChn [in]		需要叠加的视频流通道。
	osdIndex [in]		取值[0，7]，即Osd叠加最多支持8块。如果已经调用了LibXmMaQue_OSD_showTime()，则0被占用，不能再使用。
	pLogoPath [in]		需叠加的Logo文件路径。目前支持Logo文件为Jpeg图片。
	ePos [in]			叠加的位置。
【返回值】
	XM_SUCCESS			成功。
	其它				失败，请参考错误码。
*/
XM_S32 LibXmMaQue_OSD_setLogo(XM_S32 channel, MaQueStreamChannel_e eStreamChn, 
			XM_S32 osdIndex, XM_CHAR *pLogoPath, MaQuePosition_e ePos);


#ifdef __cplusplus
}
#endif


#endif //MAQUE_OSD_H


