libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
mediapipelinestats.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/namespace.h>
14#include <promeki/datastream.h>
15#include <promeki/error.h>
16#include <promeki/json.h>
17#include <promeki/list.h>
18#include <promeki/map.h>
21#include <promeki/sharedptr.h>
22#include <promeki/string.h>
23#include <promeki/stringlist.h>
25
26PROMEKI_NAMESPACE_BEGIN
27
43class MediaPipelineStageStats {
44 public:
46 using WindowedMap = ::promeki::Map<MediaIOCommand::Kind, WindowedStatsBundle>;
47
49 using List = ::promeki::List<MediaPipelineStageStats>;
50
51 MediaPipelineStageStats() = default;
52
54 String name;
55
64 MediaIOStats cumulative;
65
78 WindowedMap windowed;
79
88 WindowedStatsBundle &windowedBundle(MediaIOCommand::Kind kind);
89
91 bool isEmpty() const { return cumulative.size() == 0 && windowed.isEmpty(); }
92
94 void clear();
95
97 bool operator==(const MediaPipelineStageStats &other) const;
98 bool operator!=(const MediaPipelineStageStats &other) const { return !(*this == other); }
99
101 JsonObject toJson() const;
102
108 static MediaPipelineStageStats fromJson(const JsonObject &obj, Error *err = nullptr);
109};
110
112DataStream &operator<<(DataStream &stream, const MediaPipelineStageStats &s);
113
115DataStream &operator>>(DataStream &stream, MediaPipelineStageStats &s);
116
131class MediaPipelineStats {
132 PROMEKI_SHARED_FINAL(MediaPipelineStats)
133 public:
135 using Ptr = SharedPtr<MediaPipelineStats>;
136
138 using List = ::promeki::List<MediaPipelineStats>;
139
141 using PtrList = ::promeki::List<Ptr>;
142
144 using StageList = MediaPipelineStageStats::List;
145
146 MediaPipelineStats() = default;
147
148 // ------------------------------------------------------------
149 // Stage accessors
150 // ------------------------------------------------------------
151
153 const StageList &stages() const { return _stages; }
154
156 StageList &stages() { return _stages; }
157
159 void addStage(const MediaPipelineStageStats &s) { _stages.pushToBack(s); }
160
162 void addStage(MediaPipelineStageStats &&s) { _stages.pushToBack(std::move(s)); }
163
175 MediaPipelineStageStats stage(const String &name) const;
176
182 const MediaPipelineStageStats *findStage(const String &name) const;
183
185 MediaPipelineStageStats *findStage(const String &name);
186
188 bool containsStage(const String &name) const { return findStage(name) != nullptr; }
189
191 StringList stageNames() const;
192
194 bool isEmpty() const { return _stages.isEmpty(); }
195
197 void clear() { _stages.clear(); }
198
199 // ------------------------------------------------------------
200 // Rendering / serialization
201 // ------------------------------------------------------------
202
212 StringList describe() const;
213
215 JsonObject toJson() const;
216
222 static MediaPipelineStats fromJson(const JsonObject &obj, Error *err = nullptr);
223
225 bool operator==(const MediaPipelineStats &other) const;
226 bool operator!=(const MediaPipelineStats &other) const { return !(*this == other); }
227
228 private:
229 StageList _stages;
230};
231
233DataStream &operator<<(DataStream &stream, const MediaPipelineStats &s);
234
236DataStream &operator>>(DataStream &stream, MediaPipelineStats &s);
237
238PROMEKI_NAMESPACE_END
239
240#endif // PROMEKI_ENABLE_PROAV