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/enum.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
71class Cea608Packet {
72 public:
73 PROMEKI_DATATYPE(Cea608Packet, DataTypeCea608, 1)
74
75
79 enum class Channel : uint8_t {
80 CC1 = 0,
81 CC2 = 1,
82 CC3 = 2,
83 CC4 = 3,
84 };
85
87 Channel channel = Channel::CC1;
88
95 Cea708Cdp::CcDataList ccData;
96
97 Cea608Packet() = default;
98
105 Cea608Packet(Channel channel, Cea708Cdp::CcDataList ccData)
106 : channel(channel), ccData(std::move(ccData)) {}
107
108 // -- Conversion to / from Cea708Cdp -----------------------
109
127 static Cea608Packet fromCdp(const Cea708Cdp &cdp, Channel channel);
128
143 Cea708Cdp toCdp(uint8_t frameRateCode = 0, uint16_t sequenceCounter = 0) const;
144
145 // -- JSON dump --------------------------------------------
146
155 JsonObject toJson() const;
156
163 String toString() const;
164
165 // -- Comparison -------------------------------------------
166
167 bool operator==(const Cea608Packet &o) const {
168 return channel == o.channel && ccData == o.ccData;
169 }
170 bool operator!=(const Cea608Packet &o) const { return !(*this == o); }
171
176 static String channelName(Channel c);
177
185 Error writeToStream(DataStream &s) const;
186
191 template <uint32_t V> static Result<Cea608Packet> readFromStream(DataStream &s);
192};
193
194PROMEKI_NAMESPACE_END
195
196#endif // PROMEKI_ENABLE_PROAV