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

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;
};