#include "Application.h" #include "BoostLog.h" #include "Configuration.h" #include "DeviceConnection.h" #include "H264Palyer.h" #include "VideoFrameProvider.h" #include #include Application::Application(int &argc, char **argv) : m_app(std::make_shared(argc, argv)), m_videoFrameProvider(new VideoFrameProvider()), m_player(std::make_shared()) { 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 Application::currentOpenDoorAreaPoints() const { return m_currentOpenDoorAreaPoints; } void Application::setCurrentOpenDoorAreaPoints(const QList &points) { if (m_currentOpenDoorAreaPoints != points) { m_currentOpenDoorAreaPoints = points; emit currentOpenDoorAreaPointsChanged(); } } void Application::onDeviceOpenDoorAreaPoints(const QList &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::instance(); if (app) { ret = app.get(); QJSEngine::setObjectOwnership(ret, QJSEngine::CppOwnership); } return ret; }