29 lines
1.5 KiB
C++
29 lines
1.5 KiB
C++
#pragma once
|
|
#include "../../../src/call/call_video.h"
|
|
#include <QImage>
|
|
#include <memory>
|
|
|
|
// Один RX worker. Независимые submit/receive сохраняют PTS при задержанном выходе.
|
|
// Automatic использует проверенный capabilities() GPU, затем четыре CPU slice-потока.
|
|
class CallVideoDecoder {
|
|
public:
|
|
enum class Backend { Automatic, HardwareOnly, SoftwareOnly };
|
|
explicit CallVideoDecoder(Backend backend = Backend::Automatic);
|
|
~CallVideoDecoder();
|
|
// 1 — принят/получен, 0 — занят/ещё не готов, -1 — ошибка с подробностями в логе.
|
|
// При submit=0 владелец сохраняет исходный frame. receive отдаёт metadata без data.
|
|
int submit(const call_video_frame& frame);
|
|
int receive(call_video_frame& frame, QImage& image);
|
|
int finish(); // EOS: 1 принят, 0 нужно сначала получить выход, -1 ошибка.
|
|
unsigned pendingFrames() const;
|
|
unsigned pipelineFrames() const; // Минимальный входной pipeline, измеренный отдельной paced пробой.
|
|
bool hardware() const;
|
|
QString error() const;
|
|
void useSoftware(); // После реального отказа устройства: следующий KEY открывает CPU, без повторной GPU пробы.
|
|
void close();
|
|
static call_video_caps capabilities();
|
|
private:
|
|
struct Impl;
|
|
std::unique_ptr<Impl> m;
|
|
};
|