11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
18PROMEKI_NAMESPACE_BEGIN
41class DebugMediaMediaIO :
public SharedThreadMediaIO {
42 PROMEKI_OBJECT(DebugMediaMediaIO, SharedThreadMediaIO)
45 static inline const MediaIOStats::ID StatsFramesWritten{
"FramesWritten"};
47 static inline const MediaIOStats::ID StatsFramesRead{
"FramesRead"};
50 DebugMediaMediaIO(ObjectBase *parent =
nullptr);
53 ~DebugMediaMediaIO()
override;
55 Error proposeInput(
const MediaDesc &offered, MediaDesc *preferred)
const override;
56 Error proposeOutput(
const MediaDesc &requested, MediaDesc *achievable,
57 MediaConfig *configDelta =
nullptr)
const override;
60 Error executeCmd(MediaIOCommandOpen &cmd)
override;
61 Error executeCmd(MediaIOCommandClose &cmd)
override;
62 Error executeCmd(MediaIOCommandRead &cmd)
override;
63 Error executeCmd(MediaIOCommandWrite &cmd)
override;
64 Error executeCmd(MediaIOCommandSeek &cmd)
override;
65 Error executeCmd(MediaIOCommandStats &cmd)
override;
68 DebugMediaFile::UPtr _file;
71 bool _isWrite =
false;
72 FrameCount _framesWritten{0};
73 FrameCount _framesRead{0};
80class DebugMediaFactory :
public MediaIOFactory {
82 DebugMediaFactory() =
default;
84 String name()
const override {
return String(
"PMDF"); }
85 String displayName()
const override {
return String(
"Debug Media (.pmdf)"); }
86 String description()
const override {
87 return String(
"ProMEKI Debug Frame (.pmdf) — lossless Frame capture for debugging");
90 StringList extensions()
const override {
return {String(
"pmdf")}; }
91 StringList schemes()
const override {
return {String(
"pmdf")}; }
93 bool canBeSource()
const override {
return true; }
94 bool canBeSink()
const override {
return true; }
95 bool canHandlePath(
const String &path)
const override {
return path.toLower().endsWith(
".pmdf"); }
97 Config::SpecMap configSpecs()
const override;
98 Error urlToConfig(
const Url &url, Config *outConfig)
const override;
100 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;