Files
utun2/tools/chatgui/src/call_camera_capture.h
T

34 lines
1.5 KiB
C++

#pragma once
#include <QObject>
#include <QImage>
#include <QList>
#include "stream_video_modes.h"
// Только аппаратные режимы камеры, пригодные для звонка; опрос выполняется в процессе захвата.
struct CallCameraDevice {
QString name; // Отображаемое имя устройства.
QByteArray id; // Непрозрачный идентификатор Qt backend.
QList<StreamVideoMode> modes; // Размеры до Full HD и частоты передачи до 60 fps, capture может быть быстрее.
};
using CallCameraDevices = QList<CallCameraDevice>;
constexpr qint64 CallCameraMaxFrameAgeUs = 250000;
// GUI получает только собственную CPU-память. Процесс захвата завершается асинхронно.
class CallCameraCapture : public QObject {
Q_OBJECT
public:
explicit CallCameraCapture(QObject* parent = nullptr);
~CallCameraCapture() override;
void configure(bool enabled, const QByteArray& device = {}, int width = 640, int height = 480, int fps = 30);
signals:
void devicesChanged(const CallCameraDevices& devices);
void frameReady(const QImage& image, qint64 pts, qint64 correction);
void failed(const QString& error);
private:
struct Session;
Session* m;
};
// Вызывается до обычной инициализации приложения, конфига, БД и single-instance lock.
int call_camera_worker_main(int argc, char** argv);