libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
cea608ext.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/namespace.h>
15
16PROMEKI_NAMESPACE_BEGIN
17
48struct Cea608Ext {
51 static constexpr uint32_t NoCodepoint = 0;
52
55 static constexpr uint8_t NoMapping = 0xFF;
56
57 // -- Basic G0 (10 remapped positions) -----------------------
58
73 static uint32_t decodeG0(uint8_t b);
74
86 static uint8_t encodeG0(uint32_t cp);
87
88 // -- Special Characters (16 glyphs) -------------------------
89
94 static uint32_t decodeSpecial(uint8_t idx);
95
102 static uint8_t encodeSpecial(uint32_t cp);
103
116 static uint8_t specialPlaceholder(uint8_t idx);
117
118 // -- Extended Spanish / Misc (0x12 / 0x1A) ------------------
119
124 static uint32_t decodeExtSpanish(uint8_t idx);
125
132 static uint8_t encodeExtSpanish(uint32_t cp);
133
139 static uint8_t extSpanishPlaceholder(uint8_t idx);
140
141 // -- Extended Portuguese / German (0x13 / 0x1B) -------------
142
147 static uint32_t decodeExtFrench(uint8_t idx);
148
155 static uint8_t encodeExtFrench(uint32_t cp);
156
161 static uint8_t extFrenchPlaceholder(uint8_t idx);
162
163 // -- Composite encode --------------------------------------
164
166 enum class Kind : uint8_t {
170 None = 0,
174 BasicG0 = 1,
181 Special = 2,
185 ExtSpanish = 3,
190 ExtFrench = 4,
191 };
192
196 struct EncodedChar {
197 Kind kind = Kind::None;
198 uint8_t byte = 0;
199 uint8_t placeholder = 0;
200 uint8_t code = 0;
201 };
202
219 static EncodedChar encode(uint32_t cp);
220
221 Cea608Ext() = delete;
222};
223
224PROMEKI_NAMESPACE_END
225
226#endif // PROMEKI_ENABLE_PROAV