11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
26PROMEKI_NAMESPACE_BEGIN
115class TranscriptionEngine {
118 using UPtr = UniquePtr<TranscriptionEngine>;
121 using Factory = Function<UPtr()>;
134 struct BackendRecord {
151 int weight = BackendWeight::Vendored;
166 List<int> supportedInputs;
179 List<int> supportedModes;
196 virtual ~TranscriptionEngine();
199 const String &name()
const {
return _name; }
209 void configure(
const MediaConfig &config);
223 virtual Error submitFrame(
const Frame &frame) = 0;
236 virtual Frame receiveFrame() = 0;
248 virtual Error flush() = 0;
258 virtual Error reset() = 0;
261 Error lastError()
const {
return _lastError; }
264 const String &lastErrorMessage()
const {
return _lastErrorMessage; }
276 static Error registerBackend(BackendRecord record);
284 static List<BackendRecord> registeredBackends();
290 static Result<BackendRecord> lookupBackend(
const String &name);
304 static Result<UPtr> create(
const String &name,
const MediaConfig *config =
nullptr);
319 static PcmAudioPayload::Ptr selectInputPayload(
const Frame &frame,
int streamIndex = -1);
346 static Frame buildOutputFrame(
const Frame &source,
const Transcript &transcript);
375 static TimeStamp wordTimestamp(
const PcmAudioPayload &payload,
size_t sampleOffset);
378 TranscriptionEngine() =
default;
381 void setName(String name) { _name = std::move(name); }
389 virtual void onConfigure(
const MediaConfig &config);
397 const MediaConfig &config()
const;
400 String _lastErrorMessage;
403 void setError(Error err,
const String &msg = String());
409 UniquePtr<MediaConfig> _stashedConfig;