libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ancop47sdp.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 <cstdint>
14#include <promeki/array.h>
15#include <promeki/datatype.h>
16#include <promeki/error.h>
17#include <promeki/json.h>
18#include <promeki/list.h>
19#include <promeki/namespace.h>
20#include <promeki/result.h>
21#include <promeki/string.h>
22
23PROMEKI_NAMESPACE_BEGIN
24
25class DataStream;
26
123class AncOp47Sdp {
124 public:
125 PROMEKI_DATATYPE(AncOp47Sdp, DataTypeAncOp47Sdp, 1)
126
127
129 static constexpr size_t MaxVbiPackets = 5;
130
134 static constexpr size_t WstPacketSize = 45;
135
137 static constexpr uint8_t Identifier1 = 0x51;
138
140 static constexpr uint8_t Identifier2 = 0x15;
141
144 static constexpr uint8_t FormatCodeWstTeletext = 0x02;
145
147 static constexpr uint8_t FooterId = 0x74;
148
151 static constexpr uint8_t RunInCode = 0x55;
152
155 static constexpr uint8_t FramingCode = 0x27;
156
159 static constexpr uint8_t FieldOneBit = 0x80;
160
163 static constexpr uint8_t LineMask = 0x1F;
164
173 struct VbiPacket {
176 uint8_t lineNumber = 0;
177
181 bool fieldOne = false;
182
193 uint8_t reservedBits = 0;
194
198 ::promeki::Array<uint8_t, WstPacketSize> wstData{};
199
201 bool operator==(const VbiPacket &o) const {
202 return lineNumber == o.lineNumber &&
203 fieldOne == o.fieldOne &&
204 reservedBits == o.reservedBits &&
205 wstData == o.wstData;
206 }
207
209 bool operator!=(const VbiPacket &o) const { return !(*this == o); }
210 };
211
213 using PacketList = ::promeki::List<VbiPacket>;
214
216 AncOp47Sdp() = default;
217
218 // -- Footer Sequence Counter -----------------------------
219
221 uint16_t footerSequenceCounter() const { return _fsc; }
222
224 void setFooterSequenceCounter(uint16_t v) { _fsc = v; }
225
226 // -- VBI packets ----------------------------------------
227
229 const PacketList &packets() const { return _packets; }
230
240 void setPackets(PacketList p) { _packets = std::move(p); }
241
243 void addPacket(const VbiPacket &p) { _packets.pushToBack(p); }
244
246 void clearPackets() { _packets.clear(); }
247
248 // -- Comparison -----------------------------------------
249
251 bool operator==(const AncOp47Sdp &o) const {
252 return _fsc == o._fsc && _packets == o._packets;
253 }
254
256 bool operator!=(const AncOp47Sdp &o) const { return !(*this == o); }
257
258 // -- Diagnostics ----------------------------------------
259
261 String toString() const;
262
264 JsonObject toJson() const;
265
266 // -- DataStream -----------------------------------------
267
269 Error writeToStream(DataStream &s) const;
270
272 template <uint32_t V> static Result<AncOp47Sdp> readFromStream(DataStream &s);
273
274 private:
275 uint16_t _fsc = 0;
276 PacketList _packets;
277};
278
279PROMEKI_NAMESPACE_END
280
281#endif // PROMEKI_ENABLE_PROAV