因为项目需要,从某宝采购了一个pipivision HDMI采集卡,该采集卡为USB3.0接口,支持HDMI输入和环出,还有混音功能,以下是示例源码下载链接
查看QT示例源码,在文件DevManager.h中包装了设备的很多操作,使用起来非常方便,我们只需要把源文件DevManager.cpp添加到工程并包含该头文件即可,内部的层次结构如下图所示。
查看对应的资料发现,可叠加的OSD包括时间、文字、图片、矩形、圆和直线等,而且支持位置动态修改,这样能呈现一些实时的效果。
OSD还能进行其他控制,比如使能、颜色、透明度、裁剪等等,使用方便而且还支持Windows/Linux跨平台,堪称码农利器。
要操作对应的设备,我们先在自定义的类里面声明一个对象:
CDevSDK dev;
然后在自定义类的构造函数初始化列表中初始化对象时打开第0个采集卡:
dev(0)
如果设备打开成功我们就启动该设备
if (dev) dev.DeviceStart();
接下来我们根据需要使用OSD叠加功能,示例代码如下:
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
, dev(0) // open device 0
{
ui->setupUi(this);
if (dev)
{
dev.DeviceStart();
}
}
// 时间OSD
void Dialog::on_timeosd_clicked(bool checked)
{
if (dev)
{
/* %M month, %D month of day, %H 24 hours, %h 12 hours, %m minute, %s second, %Y year,
* %t AM/PM, %N month name, %n month short name, %W week name, %w week short name, %% % */
QString str("%Y-%M-%D %H:%m:%s");
uvs_font_info_tX info;
currentFont(info); // 字体
dev.SetTimeOSD(timeindex, 20, 20, _string(str), info);
}
}
// 文字OSD
void Dialog::on_textosd_clicked(bool checked)
{
if (dev)
{
QString str("Text Sample");
uvs_font_info_tX info;
currentFont(info); // 字体
dev.SetTextOSD(textindex, 20, 100, 0, 0, _string(str), info);
}
}
// 图片OSD
void Dialog::on_imageosd_clicked(bool checked)
{
if (dev)
{
QString str("image file path");
dev.SetImageOSD(imageindex, 20, 160, 0, 0, 192, _string(str));
}
}
Dialog::~Dialog()
{
dev.DeviceClose();
delete ui;
}