libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
cea708service.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/buffer.h>
15#include <promeki/cea708cdp.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
77class Cea708Service {
78 public:
79 PROMEKI_DATATYPE(Cea708Service, DataTypeCea708Service, 1)
80
81
83 static constexpr uint8_t MaxServiceNumber = 63;
84
89 static constexpr uint8_t ExtendedServiceNumberFrom = 7;
90
95 Cea708Service() = default;
96
99 Cea708Service(uint8_t serviceNumber, Buffer data)
100 : _serviceNumber(serviceNumber), _data(std::move(data)) {}
101
104 uint8_t serviceNumber() const { return _serviceNumber; }
105
107 void setServiceNumber(uint8_t n) { _serviceNumber = n; }
108
111 const Buffer &data() const { return _data; }
112
114 Buffer &data() { return _data; }
115
118 bool isNull() const { return _serviceNumber == 0; }
119
122 bool isExtended() const { return _serviceNumber >= ExtendedServiceNumberFrom; }
123
135 static Cea708Service fromText(uint8_t serviceNumber, const String &text);
136
142 String text() const;
143
152 JsonObject toJson() const;
153
160 String toString() const;
161
167 bool operator==(const Cea708Service &o) const;
168 bool operator!=(const Cea708Service &o) const { return !(*this == o); }
169
177 Error writeToStream(DataStream &s) const;
178
183 template <uint32_t V> static Result<Cea708Service> readFromStream(DataStream &s);
184
185 private:
186 uint8_t _serviceNumber = 0;
187 Buffer _data;
188};
189
241class Cea708DtvccPacket {
242 public:
243 PROMEKI_DATATYPE(Cea708DtvccPacket, DataTypeCea708DtvccPacket, 1)
244
245
247 static constexpr uint8_t MaxPayloadBytes = 127;
248
251 static constexpr uint8_t CcTypePacketStart = 2;
252
254 static constexpr uint8_t CcTypePacketData = 3;
255
258 Cea708DtvccPacket() = default;
259
261 Cea708DtvccPacket(uint8_t sequenceNumber, List<Cea708Service> blocks)
262 : _sequenceNumber(sequenceNumber & 0x03), _serviceBlocks(std::move(blocks)) {}
263
265 uint8_t sequenceNumber() const { return _sequenceNumber; }
266
268 void setSequenceNumber(uint8_t n) { _sequenceNumber = static_cast<uint8_t>(n & 0x03); }
269
271 const List<Cea708Service> &serviceBlocks() const { return _serviceBlocks; }
272
274 List<Cea708Service> &serviceBlocks() { return _serviceBlocks; }
275
279 size_t payloadByteCount() const;
280
285 Buffer toPayloadBytes() const;
286
289 static Result<List<Cea708Service>> parsePayloadBytes(const void *data, size_t size);
290
298 Cea708Cdp::CcDataList toCcData() const;
299
305 static Result<Cea708DtvccPacket> fromCcData(const Cea708Cdp::CcDataList &triples);
306
313 JsonObject toJson() const;
314
321 String toString() const;
322
323 bool operator==(const Cea708DtvccPacket &o) const {
324 return _sequenceNumber == o._sequenceNumber && _serviceBlocks == o._serviceBlocks;
325 }
326 bool operator!=(const Cea708DtvccPacket &o) const { return !(*this == o); }
327
335 Error writeToStream(DataStream &s) const;
336
341 template <uint32_t V> static Result<Cea708DtvccPacket> readFromStream(DataStream &s);
342
343 private:
344 uint8_t _sequenceNumber = 0;
345 List<Cea708Service> _serviceBlocks;
346};
347
348PROMEKI_NAMESPACE_END
349
350#endif // PROMEKI_ENABLE_PROAV