libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
debugmediamediaio.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
15#include <promeki/namespace.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
41class DebugMediaMediaIO : public SharedThreadMediaIO {
42 PROMEKI_OBJECT(DebugMediaMediaIO, SharedThreadMediaIO)
43 public:
45 static inline const MediaIOStats::ID StatsFramesWritten{"FramesWritten"};
47 static inline const MediaIOStats::ID StatsFramesRead{"FramesRead"};
48
50 DebugMediaMediaIO(ObjectBase *parent = nullptr);
51
53 ~DebugMediaMediaIO() override;
54
55 Error proposeInput(const MediaDesc &offered, MediaDesc *preferred) const override;
56 Error proposeOutput(const MediaDesc &requested, MediaDesc *achievable,
57 MediaConfig *configDelta = nullptr) const override;
58
59 protected:
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;
66
67 private:
68 DebugMediaFile::UPtr _file;
69 String _filename;
70 bool _isOpen = false;
71 bool _isWrite = false;
72 FrameCount _framesWritten{0};
73 FrameCount _framesRead{0};
74};
75
80class DebugMediaFactory : public MediaIOFactory {
81 public:
82 DebugMediaFactory() = default;
83
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");
88 }
89
90 StringList extensions() const override { return {String("pmdf")}; }
91 StringList schemes() const override { return {String("pmdf")}; }
92
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"); }
96
97 Config::SpecMap configSpecs() const override;
98 Error urlToConfig(const Url &url, Config *outConfig) const override;
99
100 MediaIO *create(const Config &config, ObjectBase *parent = nullptr) const override;
101};
102
103PROMEKI_NAMESPACE_END
104
105#endif // PROMEKI_ENABLE_PROAV