35 lines
2.8 KiB
C++
35 lines
2.8 KiB
C++
/* Backend камеры внутри изолированного worker-процесса; интерфейс для Qt и тестовых источников.
|
|
* Управление/опрос идут в потоке Qt worker event loop и могут блокироваться в драйвере: watchdog GUI завершит процесс.
|
|
* Сигнал frame может приходить из потока backend; worker забирает последний кадр и конвертирует вне callback. */
|
|
#pragma once
|
|
#include "call_camera_capture.h"
|
|
#ifdef HAVE_STREAM_CAPTURE
|
|
#include <QVideoFrame>
|
|
#include <functional>
|
|
#include <memory>
|
|
|
|
class CallCameraSource : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
/* Возвращает текущий полный список с аппаратными размерами/FPS передачи, допустимыми для звонка. */
|
|
virtual CallCameraDevices devices() = 0;
|
|
/* Запрашивает точный device/размер и предел FPS выдачи; worker вызывает stop перед каждым start.
|
|
* true — запуск принят, готовность наступает с frame; отказ/асинхронная ошибка сообщаются также сигналом error.
|
|
* Сам return false не создаёт IPC-ошибку. Qt backend выбирает подходящий формат без масштабирования кадров. */
|
|
virtual bool start(const QByteArray& device, int width, int height, int fps) = 0;
|
|
/* Освобождает захват; должен допускать вызов без успешного start и повтор при уничтожении worker. */
|
|
virtual void stop() = 0;
|
|
signals:
|
|
/* Запрашивает повторный опрос devices, не несёт сам список. */
|
|
void devicesChanged();
|
|
/* Заимствованный на callback QVideoFrame; получатель сохраняет копию Qt-объекта, не указатель на аргумент. */
|
|
void frame(const QVideoFrame& frame);
|
|
/* Текст ошибки, передаётся GUI с поколением активной конфигурации. */
|
|
void error(const QString& message);
|
|
};
|
|
/* Забирает ненулевой source, подключается к endpoint GUI и выполняет QCoreApplication::exec.
|
|
* Qt application уже должен существовать, event loop ещё не запущен; возвращает его exit code.
|
|
* При выходе останавливает/уничтожает backend; предназначен только для отдельного процесса. */
|
|
int call_camera_worker_run(const QString& endpoint, std::unique_ptr<CallCameraSource> source);
|
|
#endif
|