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
236class Cea708DtvccPacket {
237 public:
238 PROMEKI_DATATYPE(Cea708DtvccPacket, DataTypeCea708DtvccPacket, 1)
239
240
242 static constexpr uint8_t MaxPayloadBytes = 127;
243
246 static constexpr uint8_t CcTypePacketStart = 2;
247
249 static constexpr uint8_t CcTypePacketData = 3;
250
253 Cea708DtvccPacket() = default;
254
256 Cea708DtvccPacket(uint8_t sequenceNumber, List<Cea708Service> blocks)
257 : _sequenceNumber(sequenceNumber & 0x03), _serviceBlocks(std::move(blocks)) {}
258
260 uint8_t sequenceNumber() const { return _sequenceNumber; }
261
263 void setSequenceNumber(uint8_t n) { _sequenceNumber = static_cast<uint8_t>(n & 0x03); }
264
266 const List<Cea708Service> &serviceBlocks() const { return _serviceBlocks; }
267
269 List<Cea708Service> &serviceBlocks() { return _serviceBlocks; }
270
274 size_t payloadByteCount() const;
275
280 Buffer toPayloadBytes() const;
281
284 static Result<List<Cea708Service>> parsePayloadBytes(const void *data, size_t size);
285
293 Cea708Cdp::CcDataList toCcData() const;
294
300 static Result<Cea708DtvccPacket> fromCcData(const Cea708Cdp::CcDataList &triples);
301
308 JsonObject toJson() const;
309
316 String toString() const;
317
318 bool operator==(const Cea708DtvccPacket &o) const {
319 return _sequenceNumber == o._sequenceNumber && _serviceBlocks == o._serviceBlocks;
320 }
321 bool operator!=(const Cea708DtvccPacket &o) const { return !(*this == o); }
322
330 Error writeToStream(DataStream &s) const;
331
336 template <uint32_t V> static Result<Cea708DtvccPacket> readFromStream(DataStream &s);
337
338 private:
339 uint8_t _sequenceNumber = 0;
340 List<Cea708Service> _serviceBlocks;
341};
342
343PROMEKI_NAMESPACE_END
344
345#endif // PROMEKI_ENABLE_PROAV