libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
sdisignalconfig.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <promeki/datatype.h>
14#include <promeki/enums.h>
15#include <promeki/error.h>
16#include <promeki/list.h>
17#include <promeki/namespace.h>
18#include <promeki/result.h>
20#include <promeki/sharedptr.h>
21#include <promeki/string.h>
23
24PROMEKI_NAMESPACE_BEGIN
25
26class DataStream;
27
28// ============================================================================
29// SdiSignalConfig
30// ============================================================================
31
68class SdiSignalConfig {
69 public:
70 PROMEKI_DATATYPE(SdiSignalConfig, DataTypeSdiSignalConfig, 1)
71
72
73 using PortList = ::promeki::List<VideoPortRef>;
74
79 SdiSignalConfig();
80
85 SdiSignalConfig(SdiLinkStandard standard, PortList ports);
86
93 bool isValid() const;
94
96 SdiLinkStandard standard() const;
97
99 const PortList &ports() const;
100
102 int cableCount() const;
103
105 void setStandard(SdiLinkStandard standard);
106
108 void setPorts(PortList ports);
109
111 void appendPort(VideoPortRef port);
112
123 static SdiSignalConfig singleLink(SdiLinkStandard standard, VideoPortRef port);
124
128 static SdiSignalConfig dualLink(SdiLinkStandard standard, VideoPortRef a, VideoPortRef b);
129
133 static SdiSignalConfig quadLink(SdiLinkStandard standard, VideoPortRef a, VideoPortRef b,
134 VideoPortRef c, VideoPortRef d);
135
147 Error validate() const;
148
156 String toString() const;
157
168 static Result<SdiSignalConfig> fromString(const String &s);
169
171 bool operator==(const SdiSignalConfig &other) const;
172
174 bool operator!=(const SdiSignalConfig &other) const { return !(*this == other); }
175
180 Error writeToStream(DataStream &s) const;
181
186 template <uint32_t V> static Result<SdiSignalConfig> readFromStream(DataStream &s);
187
192 struct Impl {
193 PROMEKI_SHARED_FINAL(Impl)
194
195 SdiLinkStandard standard = SdiLinkStandard::Auto;
196 PortList ports;
197 };
198
199 private:
200 SharedPtr<Impl> _d;
201};
202
203PROMEKI_NAMESPACE_END
204
205#endif // PROMEKI_ENABLE_CORE