libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
cscmediaio.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV && PROMEKI_ENABLE_CSC
13#include <promeki/namespace.h>
16#include <promeki/pixelformat.h>
18#include <promeki/list.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
82class CscMediaIO : public SharedThreadMediaIO {
83 PROMEKI_OBJECT(CscMediaIO, SharedThreadMediaIO)
84 public:
86 static inline const MediaIOStats::ID StatsFramesConverted{"FramesConverted"};
87
88 CscMediaIO(ObjectBase *parent = nullptr);
89 ~CscMediaIO() override;
90
91 Error describe(MediaIODescription *out) const override;
92 Error proposeInput(const MediaDesc &offered, MediaDesc *preferred) const override;
93 Error proposeOutput(const MediaDesc &requested, MediaDesc *achievable,
94 MediaConfig *configDelta = nullptr) const override;
95 int pendingInternalWrites() const override;
96
97 protected:
98 Error executeCmd(MediaIOCommandOpen &cmd) override;
99 Error executeCmd(MediaIOCommandClose &cmd) override;
100 Error executeCmd(MediaIOCommandRead &cmd) override;
101 Error executeCmd(MediaIOCommandWrite &cmd) override;
102 Error executeCmd(MediaIOCommandStats &cmd) override;
103
104 private:
105 Error convertPayload(const UncompressedVideoPayload &input,
106 UncompressedVideoPayload::Ptr &output) const;
107 Error convertFrame(const Frame &input, Frame &output);
108
109 PixelFormat _outputPixelFormat;
110 bool _outputPixelFormatSet = false;
111 int _capacity = 4;
112
113 Frame::List _outputQueue;
114 FrameCount _frameCount{0};
115 int64_t _readCount = 0;
116 FrameCount _framesConverted{0};
117 bool _capacityWarned = false;
118};
119
124class CscFactory : public MediaIOFactory {
125 public:
126 CscFactory() = default;
127
128 String name() const override { return String("CSC"); }
129 String displayName() const override { return String("Color Space Converter"); }
130 String description() const override {
131 return String("Color space converter (uncompressed pixel format conversion)");
132 }
133 bool canBeTransform() const override { return true; }
134
135 Config::SpecMap configSpecs() const override;
136 bool bridge(const MediaDesc &from, const MediaDesc &to, Config *outConfig,
137 int *outCost) const override;
138 MediaIO *create(const Config &config, ObjectBase *parent = nullptr) const override;
139};
140
141PROMEKI_NAMESPACE_END
142
143#endif // PROMEKI_ENABLE_PROAV && PROMEKI_ENABLE_CSC