AntiClipSettings/Application.cpp
2024-08-13 20:06:10 +08:00

72 lines
2.4 KiB
C++

#include "Application.h"
#include "BoostLog.h"
#include "Configuration.h"
#include "DeviceConnection.h"
#include "H264Palyer.h"
#include "VideoFrameProvider.h"
#include <QGuiApplication>
#include <QQmlApplicationEngine>
Application::Application(int &argc, char **argv)
: m_app(std::make_shared<QGuiApplication>(argc, argv)), m_videoFrameProvider(new VideoFrameProvider()),
m_player(std::make_shared<H264Palyer>()) {
m_app->setApplicationName(APPLICATION_NAME);
m_app->setApplicationVersion(QString("v%1_%2 build: %3 %4").arg(APP_VERSION, GIT_COMMIT_ID, __DATE__, __TIME__));
m_player->open();
}
QList<QPointF> Application::currentOpenDoorAreaPoints() const {
return m_currentOpenDoorAreaPoints;
}
void Application::setCurrentOpenDoorAreaPoints(const QList<QPointF> &points) {
if (m_currentOpenDoorAreaPoints != points) {
m_currentOpenDoorAreaPoints = points;
emit currentOpenDoorAreaPointsChanged();
}
}
void Application::onDeviceOpenDoorAreaPoints(const QList<QPointF> &points) {
setCurrentOpenDoorAreaPoints(points);
LOG(info) << "onDeviceOpenDoorAreaPoints: " << points.size();
}
int Application::exec() {
QQmlApplicationEngine engine;
engine.addImageProvider("videoframe", m_videoFrameProvider);
QObject::connect(
&engine, &QQmlApplicationEngine::objectCreationFailed, this, []() { QCoreApplication::exit(-1); },
Qt::QueuedConnection);
engine.loadFromModule("AntiClipSettings", "Main");
return m_app->exec();
}
void Application::open() {
LOG(info) << "Application::start";
m_device = new DeviceConnection();
connect(m_device, &DeviceConnection::currentOpenDoorAreaPointsChanged, this,
&Application::onDeviceOpenDoorAreaPoints);
m_device->connect();
m_device->setH264FrameCallback([this](const char *data, uint32_t size) {
auto image = m_player->decode((const uint8_t *)data, size);
if (image) {
m_videoFrameProvider->setImage(*image);
emit newVideoFrame();
}
});
}
void Application::start() {
m_device->start();
}
Application *Application::create(QQmlEngine *qmlEngine, QJSEngine *jsEngine) {
Application *ret = nullptr;
auto app = Amass::Singleton<Application>::instance();
if (app) {
ret = app.get();
QJSEngine::setObjectOwnership(ret, QJSEngine::CppOwnership);
}
return ret;
}