libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
st291packet.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#include <promeki/ancpacket.h>
16#include <promeki/enums.h>
17#include <promeki/list.h>
18#include <promeki/result.h>
19#include <promeki/error.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
131class St291Packet {
132 public:
151
154 static constexpr uint16_t LineNoSpecific = 0x7FF;
155
160 static constexpr uint16_t LineSwitchingDefault = 0x7FE;
161
164 static constexpr uint16_t LineLargerThan11Bits = 0x7FD;
165
170 static constexpr uint16_t UnspecifiedLine = LineSwitchingDefault;
171
174 static constexpr uint16_t UnspecifiedHOffset = 0xFFF;
175
178 static constexpr uint16_t HOffsetInHanc = 0xFFE;
179
182 static constexpr uint16_t HOffsetInActiveVideo = 0xFFD;
183
186 static constexpr uint16_t HOffsetLargerThan12Bits = 0xFFC;
187
189
242 static Result<St291Packet> from(const AncPacket &pkt,
243 AncChecksumPolicy policy = AncChecksumPolicy::PreserveOrRecompute);
244
276 static St291Packet build(const AncFormat &fmt, const List<uint16_t> &udw, uint16_t line,
277 uint16_t hOffset = UnspecifiedHOffset, bool fieldB = false, bool cBit = false,
278 uint8_t streamNum = 0);
279
297 static St291Packet buildRaw(uint8_t did, uint8_t sdid, const List<uint16_t> &udw, uint16_t line,
298 uint16_t hOffset = UnspecifiedHOffset, bool fieldB = false,
299 bool cBit = false, uint8_t streamNum = 0);
300
325 static St291Packet buildRawType1(uint8_t did, uint8_t dbn, const List<uint16_t> &udw, uint16_t line,
326 uint16_t hOffset = UnspecifiedHOffset, bool fieldB = false,
327 bool cBit = false, uint8_t streamNum = 0);
328
330 St291Packet() = default;
331
333 uint8_t did() const;
334
346 uint8_t sdid() const;
347
358 uint8_t dbn() const;
359
361 uint8_t dataCount() const;
362
380 List<uint16_t> udw() const;
381
397 List<uint16_t> udwRaw() const;
398
409 uint16_t checksum() const;
410
415 uint16_t computedChecksum() const;
416
418 bool checksumValid() const;
419
422 uint16_t line() const;
423
426 uint16_t hOffset() const;
427
430 bool fieldB() const;
431
434 bool cBit() const;
435
438 uint8_t streamNum() const;
439
452 bool isType1() const { return (did() & 0x80) != 0; }
453
461 void setUdw(const List<uint16_t> &udw);
462
464 void setLine(uint16_t line);
465
467 void setHOffset(uint16_t hOffset);
468
470 void setFieldB(bool fieldB);
471
473 void setCBit(bool cBit);
474
476 void setStreamNum(uint8_t streamNum);
477
479 const AncPacket &packet() const { return _pkt; }
480
482 operator const AncPacket &() const { return _pkt; }
483
489 bool isValid() const;
490
491 private:
492 explicit St291Packet(const AncPacket &pkt) : _pkt(pkt) {}
493 AncPacket _pkt;
494};
495
496PROMEKI_NAMESPACE_END
497
498#endif // PROMEKI_ENABLE_PROAV