libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
cea608packet.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/cea708cdp.h>
15#include <promeki/enums.h>
16#include <promeki/json.h>
17#include <promeki/namespace.h>
18#include <promeki/result.h>
19#include <promeki/string.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
23class DataStream;
24
68class Cea608Packet {
69 public:
70 PROMEKI_DATATYPE(Cea608Packet, DataTypeCea608, 1)
71
72
76 enum class Channel : uint8_t {
77 CC1 = 0,
78 CC2 = 1,
79 CC3 = 2,
80 CC4 = 3,
81 };
82
84 Channel channel = Channel::CC1;
85
92 Cea708Cdp::CcDataList ccData;
93
94 Cea608Packet() = default;
95
102 Cea608Packet(Channel channel, Cea708Cdp::CcDataList ccData)
103 : channel(channel), ccData(std::move(ccData)) {}
104
105 // -- Conversion to / from Cea708Cdp -----------------------
106
124 static Cea608Packet fromCdp(const Cea708Cdp &cdp, Channel channel);
125
140 Cea708Cdp toCdp(uint8_t frameRateCode = 0, uint16_t sequenceCounter = 0) const;
141
142 // -- JSON dump --------------------------------------------
143
152 JsonObject toJson() const;
153
160 String toString() const;
161
162 // -- Comparison -------------------------------------------
163
164 bool operator==(const Cea608Packet &o) const {
165 return channel == o.channel && ccData == o.ccData;
166 }
167 bool operator!=(const Cea608Packet &o) const { return !(*this == o); }
168
173 static String channelName(Channel c);
174
182 Error writeToStream(DataStream &s) const;
183
188 template <uint32_t V> static Result<Cea608Packet> readFromStream(DataStream &s);
189};
190
191PROMEKI_NAMESPACE_END
192
193#endif // PROMEKI_ENABLE_PROAV