DM365-OSD 小结
1、OSD 线程的流程
OSD 的功能就是在视频上显示预定的内容,视频是由一帧一帧的图像组成的,因此
OSD 的作用就是在每一帧上打上印记。OSD 的流程如图 1 所示:
图 1
关于有帧消息的发送:
当有一个新的帧产生的时候,
通过调用该函数发送新数据
消息命令。
int VIDEO_swosdRun(int
tskId, int streamId,
OSA_BufInfo *pBufInfo)
该消息命令的数据结构:
typedef struct
_videoSWOSDMessage
{
int streamId; //对应的码
流
OSA_BufInfo *pBufInfo; //这里有帧的数据
}videoSWOSDMessage;
2、OSD 环境的创建
OSD 环境的创建,包括初始化、字体的设置、创建句柄以及窗口数目的划分、窗口有
参数的设置、字符转化成 YUV 格式。
初始化:
在调用其他的 OSD 函数之前,一定要调用 SWOSD_init 函数完成初始化,返回 0 成
功,-1 失败。
int SWOSD_init();
字体的设置:
字体的设置,就像 doc 设置字体一个意思,至于为什么这么操作,不清楚。照着例子来
吧。SWOSD_Fontdata 为字体的数据结构体。SWOSD_createFontDatabase 函数的意思,大
概就是把能够显示的字符按照 fontAddr 的格式转化成 YUV 格式存放在 fontDB 中。
typedef struct {
char format; //视频的格式 YUV420p 还是 YUV422i
int charWidth; //字符的宽度
int charHeight; //字符的高度
int totFontWidth;
int totFontHeight;
int totFontLineoffset;
char *fontAddr; //字体对应 YUV 格式数据的存储
char *fontAddrUV;
int * fontDB_Y;//所有能够显示字符的 YUV 格式
int * fontDB_UV;