AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
ancillarydata.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_ANCILLARYDATA_H
9 #define AJA_ANCILLARYDATA_H
10 
11 #include "ajatypes.h"
12 #include "ntv2version.h"
13 #include "ajabase/common/types.h" // for AJAStatus
14 #include "ntv2publicinterface.h"
15 #include <sstream>
16 #include <vector>
17 
18 
19 // Default Packet IDs used when building "analog" packets
20 // NOTE: There's NO guarantee that the Anc Extractor hardware will use these codes - nor does the
21 // Anc Inserter hardware care. To determine if a given packet is "analog" or "digital", check
22 // the appropriate flag in the packet header. This is just to have all the locally (software)
23 // built "analog" IDs come from a single location.
24 const uint8_t AJAAncData_AnalogDID = 0x00;
25 const uint8_t AJAAncData_AnalogSID = 0x00;
26 
27 typedef std::pair <uint8_t, uint8_t> AJAAncDIDSIDPair, AJAAncillaryDIDSIDPair;
28 typedef uint16_t AJAAncPktDIDSID;
29 #define ToAJAAncPktDIDSID(_d_,_s_) (uint16_t((_d_) << 8) | uint16_t(_s_))
30 #define FromAJAAncPktDIDSID(_k_,_d_,_s_) (_d_) = uint8_t(((_k_) & 0xFF00) >> 8); (_d_) = uint8_t(_k_ & 0x00FF);
31 
38 AJAExport std::ostream & operator << (std::ostream & inOutStream, const AJAAncDIDSIDPair & inData);
39 
40 
44 typedef enum
45 {
63 
64 #define IS_VALID_AJAAncDataType(_x_) ((_x_) >= AJAAncDataType_Unknown && (_x_) < AJAAncDataType_Size)
65 #define IS_KNOWN_AJAAncDataType(_x_) ((_x_) > AJAAncDataType_Unknown && (_x_) < AJAAncDataType_Size)
66 
72 AJAExport const std::string & AJAAncDataTypeToString (const AJAAncDataType inValue, const bool inCompact = true);
73 
74 
75 
79 typedef enum
80 {
88 
89 #define IS_VALID_AJAAncDataLink(_x_) ((_x_) >= AJAAncDataLink_A && (_x_) < AJAAncDataLink_Unknown)
90 
96 AJAExport const std::string & AJAAncDataLinkToString (const AJAAncDataLink inValue, const bool inCompact = true);
97 
98 
99 
103 typedef enum
104 {
112 
113 #define IS_VALID_AJAAncDataStream(_x_) ((_x_) >= AJAAncDataStream_1 && (_x_) < AJAAncDataStream_Unknown)
114 #define IS_LINKA_AJAAncDataStream(_x_) ((_x_) == AJAAncDataStream_1)
115 #define IS_LINKB_AJAAncDataStream(_x_) ((_x_) == AJAAncDataStream_2)
116 
122 AJAExport const std::string & AJAAncDataStreamToString (const AJAAncDataStream inValue, const bool inCompact = true);
123 
124 
125 
129 typedef enum
130 {
137 
138 #define IS_VALID_AJAAncDataChannel(_x_) ((_x_) >= AJAAncDataChannel_C && (_x_) < AJAAncDataChannel_Unknown)
139 
145 AJAExport const std::string & AJAAncDataChannelToString (const AJAAncDataChannel inValue, const bool inCompact = true);
146 
147 
148 
152 typedef enum
153 {
159 
160 #define IS_VALID_AncChannelSearchSelect(_x_) ((_x_) >= AncChannelSearch_Y && (_x_) < AncChannelSearch_Invalid)
161 
167 AJAExport std::string AncChannelSearchSelectToString (const AncChannelSearchSelect inSelect, const bool inCompact = true);
168 
169 
175 typedef enum
176 {
182 
183 #define IS_VALID_AJAAncDataSpace(_x_) ((_x_) >= AJAAncDataSpace_VANC && (_x_) < AJAAncDataSpace_Unknown)
184 #define IS_HANC_AJAAncDataSpace(_x_) ((_x_) == AJAAncDataSpace_HANC)
185 #define IS_VANC_AJAAncDataSpace(_x_) ((_x_) == AJAAncDataSpace_VANC)
186 
192 AJAExport const std::string & AJAAncDataSpaceToString (const AJAAncDataSpace inValue, const bool inCompact = true);
193 
194 
195 
196 #define AJAAncDataLineNumber_Unknown uint16_t(0x0000)
197 #define AJAAncDataLineNumber_DontCare uint16_t(0x07FF)
198 #define AJAAncDataLineNumber_Anywhere (AJAAncDataLineNumber_DontCare)
199 #define AJAAncDataLineNumber_AnyVanc uint16_t(0x07FE)
200 #define AJAAncDataLineNumber_Future uint16_t(0x07FD)
201 
202 #define IS_UNKNOWN_AJAAncDataLineNumber(_x_) ((_x_) == AJAAncDataLineNumber_Unknown)
203 #define IS_IRRELEVANT_AJAAncDataLineNumber(_x_) ((_x_) == AJAAncDataLineNumber_DontCare)
204 #define IS_GOOD_AJAAncDataLineNumber(_x_) ((_x_) > 0 && (_x_) < AJAAncDataLineNumber_DontCare)
205 
206 AJAExport std::string AJAAncLineNumberToString (const uint16_t inValue);
207 
208 // Special horizOffset values:
209 #define AJAAncDataHorizOffset_Unknown uint16_t(0x0000)
210 #define AJAAncDataHorizOffset_Anywhere uint16_t(0x0FFF)
211 #define AJAAncDataHorizOffset_AnyHanc uint16_t(0x0FFE)
212 #define AJAAncDataHorizOffset_AnyVanc uint16_t(0x0FFD)
213 #define AJAAncDataHorizOffset_Future uint16_t(0x0FFC)
214 
215 
219 AJAExport std::string AJAAncHorizOffsetToString (const uint16_t inValue);
220 
221 
225 typedef struct AJAExport AJAAncDataLoc
226 {
227  // Instance Methods
228  public:
231  const AJAAncDataSpace inIgnored = AJAAncDataSpace_Unknown,
232  const uint16_t inLineNum = AJAAncDataLineNumber_Unknown,
233  const uint16_t inHorizOffset = AJAAncDataHorizOffset_Unknown,
234  const AJAAncDataStream inStream = AJAAncDataStream_1)
235  { AJA_UNUSED(inIgnored);
236  SetDataLink(inLink).SetDataChannel(inChannel).SetLineNumber(inLineNum).SetHorizontalOffset(inHorizOffset).SetDataStream(inStream);
237  }
238 
239  inline bool operator == (const AJAAncDataLoc & inRHS) const
240  {
241  // Everything must match exactly:
242  bool equal = (GetDataLink() == inRHS.GetDataLink()
243  && GetDataStream() == inRHS.GetDataStream()
244  && GetDataChannel() == inRHS.GetDataChannel()
245 // No longer necessary && GetDataSpace() == inRHS.GetDataSpace()
246  && GetLineNumber() == inRHS.GetLineNumber());
247  if (equal && GetHorizontalOffset() && inRHS.GetHorizontalOffset())
248  equal = (GetHorizontalOffset() == inRHS.GetHorizontalOffset());
249 
250  return equal;
251  }
252 
253  inline bool operator != (const AJAAncDataLoc & inRHS) const {return !(*this == inRHS);}
254 
255  inline bool operator < (const AJAAncDataLoc & inRHS) const
256  {
257  const uint64_t lhs (OrdinalValue());
258  const uint64_t rhs (inRHS.OrdinalValue());
259  return lhs < rhs; // 64-bit unsigned compare:
260  }
261 
262  inline bool IsValid (void) const
263  {
264  return IS_VALID_AJAAncDataLink(mLink)
265  && IS_VALID_AJAAncDataStream(mStream)
266  && IS_VALID_AJAAncDataChannel(mChannel)
267  && (IS_VALID_AJAAncDataSpace(GetDataSpace())
268  || (GetDataSpace() == AJAAncDataSpace_Unknown));
269  }
270 
276  virtual AJAStatus Compare (const AJAAncDataLoc & inRHS) const;
277 
284  virtual std::string CompareWithInfo (const AJAAncDataLoc & inRHS) const;
285 
290  inline AJAAncDataLoc & Reset (void)
291  {
292  mLink = AJAAncDataLink_Unknown;
293  mStream = AJAAncDataStream_Unknown;
294  mChannel = AJAAncDataChannel_Unknown;
295  mLineNum = AJAAncDataLineNumber_Unknown;
296  mHorizOffset = AJAAncDataHorizOffset_Unknown;
297  return *this;
298  }
299 
300  inline AJAAncDataLink GetDataLink (void) const {return mLink;}
301  inline bool IsDataLinkA (void) const {return mLink == AJAAncDataLink_A;}
302  inline bool IsDataLinkB (void) const {return mLink == AJAAncDataLink_B;}
303 
304  inline AJAAncDataStream GetDataStream (void) const {return mStream;}
305 
306  inline AJAAncDataChannel GetDataChannel (void) const {return mChannel;}
307  inline bool IsLumaChannel (void) const {return mChannel == AJAAncDataChannel_Y;}
308  inline bool IsChromaChannel (void) const {return mChannel == AJAAncDataChannel_C;}
309 
316  inline AJAAncDataSpace GetDataSpace (void) const
317  {
318  if (mHorizOffset == AJAAncDataHorizOffset_AnyVanc)
319  return AJAAncDataSpace_VANC;
320  if (mHorizOffset == AJAAncDataHorizOffset_AnyHanc)
321  return AJAAncDataSpace_HANC;
323  }
324  inline bool IsVanc (void) const {return GetDataSpace() == AJAAncDataSpace_VANC;}
325  inline bool IsHanc (void) const {return GetDataSpace() == AJAAncDataSpace_HANC;}
326 
327  inline uint16_t GetLineNumber (void) const {return mLineNum;}
328 
339  inline uint16_t GetHorizontalOffset (void) const {return mHorizOffset & 0x0FFF;}
340 
347  std::ostream & Print (std::ostream & ostrm, const bool inCompact = true) const;
348 
354  inline AJAAncDataLoc & SetDataLink (const AJAAncDataLink inLink) {mLink = inLink; return *this;}
355 
361  inline AJAAncDataLoc & SetDataStream (const AJAAncDataStream inStream) {mStream = inStream; return *this;}
362 
368  inline AJAAncDataLoc & SetDataChannel (const AJAAncDataChannel inChannel) {mChannel = inChannel; return *this;}
369 #if AJA_NTV2_SDK_VERSION_AT_LEAST(16,3)
370  inline AJAAncDataLoc & SetDataVideoStream (const AJAAncDataChannel inChannel) {return SetDataChannel(inChannel);}
371 #endif
372 
378  inline AJAAncDataLoc & SetDataSpace (const AJAAncDataSpace inSpace)
379  {
380  if (IS_VANC_AJAAncDataSpace(inSpace))
381  mHorizOffset = AJAAncDataHorizOffset_AnyVanc;
382  else if (IS_HANC_AJAAncDataSpace(inSpace))
383  mHorizOffset = AJAAncDataHorizOffset_AnyHanc;
384  return *this;
385  }
386 
393  inline AJAAncDataLoc & SetLineNumber (const uint16_t inLineNum) {mLineNum = inLineNum; return *this;}
394 
395 
408  inline AJAAncDataLoc & SetHorizontalOffset (uint16_t inHOffset)
409  { inHOffset &= 0x0FFF;
410  if (inHOffset == AJAAncDataHorizOffset_AnyVanc)
411  mHorizOffset = inHOffset; // Force [any] VANC
412  else if (inHOffset == AJAAncDataHorizOffset_AnyHanc)
413  mHorizOffset = inHOffset; // Force [any] HANC
414  else if (inHOffset == AJAAncDataHorizOffset_Anywhere)
415  mHorizOffset = inHOffset; // Anywhere (unknown DataSpace)
416  else
417  mHorizOffset = inHOffset; // Trust the caller; don't mess with existing DataSpace
418  return *this;
419  }
420 
431  inline uint64_t OrdinalValue (void) const
432  { // 64-bit unsigned compare: LLLLLLLLLLLLSSSHHHHHHHHHHHHCCCDDDDDDDKK
433  const uint64_t hOffset (mHorizOffset == AJAAncDataHorizOffset_AnyVanc || mHorizOffset == AJAAncDataHorizOffset_Anywhere ? 0 : mHorizOffset);
434  return ((uint64_t(mLineNum) << 27) // LLLLLLLLLLLL
435  | (uint64_t(GetDataSpace()) << 24) // SSS
436  | (hOffset << 12) // HHHHHHHHHHHH
437  | (uint64_t(mChannel) << 9) // CCC
438  | (uint64_t(mStream) << 2) // DDDDDDD
439  | uint64_t(mLink)); // KK
440  }
441 
442  private: // Made private in SDK 15.2
443  AJAAncDataLink mLink;
444  AJAAncDataStream mStream;
445  AJAAncDataChannel mChannel;
446  uint16_t mLineNum;
447  uint16_t mHorizOffset;
448 
449 } AJAAncDataLoc;
450 
453 
459 AJAExport std::string AJAAncDataLocToString (const AJAAncDataLoc & inValue, const bool inCompact = true);
460 
467 AJAExport std::ostream & operator << (std::ostream & inOutStream, const AJAAncDataLoc & inData);
468 
469 
470 
474 typedef enum
475 {
481 
482 #define IS_VALID_AJAAncDataCoding(_x_) ((_x_) >= AJAAncDataCoding_Digital && (_x_) < AJAAncDataCoding_Size)
483 
489 AJAExport const std::string & AJAAncDataCodingToString (const AJAAncDataCoding inValue, const bool inCompact = true);
490 
491 
492 
496 typedef enum
497 {
505 
507 
508 #define IS_VALID_AJAAncBufferFormat(_x_) ((_x_) >= AJAAncBufferFormat_Unknown && (_x_) < AJAAncBufferFormat_Size)
509 #define IS_KNOWN_AJAAncBufferFormat(_x_) ((_x_) > AJAAncBufferFormat_Unknown && (_x_) < AJAAncBufferFormat_Size)
510 
516 AJAExport const std::string & AJAAncBufferFormatToString (const AJAAncBufferFormat inValue, const bool inCompact = true);
517 
518 
553 {
554 public:
558 
560  AJAAncillaryData ();
561 
566  AJAAncillaryData (const AJAAncillaryData & inClone);
567 
572  AJAAncillaryData (const AJAAncillaryData * pInClone);
573 
574  virtual ~AJAAncillaryData ();
575  virtual void Clear (void);
576  virtual AJAAncillaryData * Clone (void) const;
577 
579 
583 
585  virtual inline uint8_t GetDID (void) const {return m_DID;}
586  virtual inline uint8_t GetSID (void) const {return m_SID;}
587  virtual inline uint32_t GetDC (void) const {return uint32_t(m_payload.size());}
588  virtual inline AJAAncDIDSIDPair GetDIDSIDPair (void) const {return AJAAncDIDSIDPair(GetDID(),GetSID());}
589  virtual inline AJAAncPktDIDSID GetDIDSID (void) const {return ToAJAAncPktDIDSID(GetDID(),GetSID());}
590  virtual inline size_t GetPayloadByteCount (void) const {return size_t(GetDC());}
591  virtual AJAAncDataType GetAncillaryDataType (void) const {return m_ancType;}
592  virtual inline uint32_t GetFrameID (void) const {return m_frameID;}
593 
594  virtual inline const AJAAncDataLoc & GetDataLocation (void) const {return m_location;}
595  virtual inline AJAAncDataLoc & GetDataLocation (void) {return m_location;}
596  virtual inline AJAAncDataCoding GetDataCoding (void) const {return m_coding;}
597  virtual inline AJAAncBufferFormat GetBufferFormat (void) const {return m_bufferFmt;}
598  virtual uint8_t GetChecksum (void) const {return m_checksum;}
599 
600  virtual inline AJAAncDataLink GetLocationVideoLink (void) const {return GetDataLocation().GetDataLink();}
601  virtual inline AJAAncDataStream GetLocationDataStream (void) const {return GetDataLocation().GetDataStream();}
602  virtual inline AJAAncDataChannel GetLocationDataChannel (void) const {return GetDataLocation().GetDataChannel();}
603  virtual inline AJAAncDataSpace GetLocationVideoSpace (void) const {return GetDataLocation().GetDataSpace();}
604  virtual inline uint16_t GetLocationLineNumber (void) const {return GetDataLocation().GetLineNumber();}
605  virtual inline uint16_t GetLocationHorizOffset (void) const {return GetDataLocation().GetHorizontalOffset();}
606  virtual uint16_t GetStreamInfo (void) const;
607  virtual inline const uint64_t & UserData (void) const {return m_userData;}
608 
609  virtual uint8_t GetAuxType (void) const {return m_auxType;}
610  virtual uint8_t GetAuxHB1 (void) const {return m_auxHB1;}
611  virtual uint8_t GetAuxHB2 (void) const {return m_auxHB2;}
612 
616  virtual inline bool HasStreamInfo (void) const {return IS_VALID_AJAAncDataLink(GetLocationVideoLink()) && IS_VALID_AJAAncDataStream(GetLocationDataStream());}
617  virtual inline bool IsEmpty (void) const {return GetDC() == 0;}
618  virtual inline bool IsLumaChannel (void) const {return GetDataLocation().IsLumaChannel ();}
619  virtual inline bool IsChromaChannel (void) const {return GetDataLocation().IsChromaChannel ();}
620  virtual inline bool IsVanc (void) const {return GetDataLocation().IsVanc ();}
621  virtual inline bool IsHanc (void) const {return GetDataLocation().IsHanc ();}
622  virtual inline bool IsDigital (void) const {return GetDataCoding() == AJAAncDataCoding_Digital;}
623  virtual inline bool IsRaw (void) const {return GetDataCoding() == AJAAncDataCoding_Raw;}
624  virtual inline bool IsFBVANC (void) const {return GetBufferFormat() == AJAAncBufferFormat_FBVANC;}
625  virtual inline bool IsSDI (void) const {return GetBufferFormat() == AJAAncBufferFormat_SDI;}
626  virtual inline bool IsRTP (void) const {return GetBufferFormat() == AJAAncBufferFormat_RTP;}
627  virtual inline bool IsHDMI (void) const {return GetBufferFormat() == AJAAncBufferFormat_HDMI;}
628 
634  virtual bool isHDMIAuxInfoFrame(void) const {return false;}
635 
642  virtual uint8_t Calculate8BitChecksum (void) const;
643 
649  virtual uint16_t Calculate9BitChecksum (void) const;
650 
656  virtual bool ChecksumOK (void) const {return m_checksum == Calculate8BitChecksum ();}
657 
658  AJAAncillaryData & operator = (const AJAAncillaryData & inRHS);
659 
664  virtual bool operator == (const AJAAncillaryData & inRHS) const;
665 
670  virtual inline bool operator != (const AJAAncillaryData & inRHS) const {return !(*this == inRHS);}
671 
679  virtual AJAStatus Compare (const AJAAncillaryData & inRHS, const bool inIgnoreLocation = true, const bool inIgnoreChecksum = true) const;
681 
682 
686 
693  virtual AJAStatus SetDID (const uint8_t inDataID);
694 
700  virtual AJAStatus SetSID (const uint8_t inSID);
701 
707  virtual inline AJAStatus SetDIDSID (const AJAAncDIDSIDPair & inDIDSID) {SetDID(inDIDSID.first); return SetSID(inDIDSID.second);} // New in SDK 16.0
708 
718  virtual AJAStatus SetChecksum (const uint8_t inChecksum8, const bool inValidate = false);
719 
725  virtual AJAStatus SetDataLocation (const AJAAncDataLoc & inLoc);
726 
732  virtual AJAStatus SetLocationVideoLink (const AJAAncDataLink inLink);
733 
739  virtual AJAStatus SetLocationDataStream (const AJAAncDataStream inStream);
740 
746  virtual AJAStatus SetLocationDataChannel (const AJAAncDataChannel inChannel);
747 
753  virtual AJAStatus SetLocationLineNumber (const uint16_t inLineNum);
754 
760  virtual AJAStatus SetLocationHorizOffset (const uint16_t inOffset);
761 
767  virtual AJAStatus SetDataCoding (const AJAAncDataCoding inCodingType);
768 
774  virtual inline AJAAncillaryData & SetFrameID (const uint32_t inFrameID) {m_frameID = inFrameID; return *this;}
775 
781  virtual inline AJAAncillaryData & SetBufferFormat (const AJAAncBufferFormat inFmt) {m_bufferFmt = inFmt; return *this;}
782 
783  virtual inline uint64_t & UserData (void) {return m_userData;}
784 
786 
790 
796  virtual uint8_t GetPayloadByteAtIndex (const uint32_t inIndex0) const;
797 
801  virtual inline const uint8_t * GetPayloadData (void) const {return m_payload.empty() ? NULL : &(m_payload[0]);}
802 
809  virtual AJAStatus GetPayloadData (uint8_t * pBuffer, const uint32_t inByteCapacity) const;
810 
817  virtual AJAStatus GetPayloadData (UWordSequence & outUDWs, const bool inAddParity = true) const;
819 
820 
824 
831  virtual AJAStatus SetPayloadByteAtIndex (const uint8_t inDataByte, const uint32_t inIndex0);
832 
839  virtual AJAStatus SetPayloadData (const uint8_t * pInData, const uint32_t inByteCount);
840 
847  virtual AJAStatus AppendPayloadData (const uint8_t * pInBuffer, const uint32_t inByteCount);
848 
854  virtual AJAStatus AppendPayload (const AJAAncillaryData & inAncData);
855 
859  virtual inline NTV2_DEPRECATED_f(AJAStatus AppendPayload (const AJAAncillaryData * pInAncData)) {return pInAncData ? AppendPayload (*pInAncData) : AJA_STATUS_NULL;}
860 
869  virtual AJAStatus SetFromSMPTE334 (const uint16_t * pInData, const uint32_t inNumWords, const AJAAncDataLoc & inLocInfo);
870 
876  virtual AJAStatus ParsePayloadData (void);
877 
887  virtual inline bool GotValidReceiveData (void) const {return m_rcvDataValid;}
888 
894  virtual inline AJAStatus GeneratePayloadData (void) {return AJA_STATUS_SUCCESS;}
896 
897 
901 
911  virtual AJAStatus InitWithReceivedData ( const uint8_t * pInData,
912  const size_t inMaxBytes,
913  const AJAAncDataLoc & inLocationInfo,
914  uint32_t & outPacketByteCount);
923  virtual AJAStatus InitAuxWithReceivedData ( const uint8_t * pInData,
924  const size_t inMaxBytes,
925  //const AJAAncDataLoc & inLocationInfo,
926  uint32_t & outPacketByteCount);
927 
934  virtual AJAStatus InitWithReceivedData ( const std::vector<uint8_t> & inData,
935  const AJAAncDataLoc & inLocationInfo);
936 
948  virtual AJAStatus InitWithReceivedData (const ULWordSequence & inData, uint16_t & inOutStartIndex, const bool inIgnoreChecksum = false);
950 
951 
955 
963  virtual AJAStatus GetRawPacketSize (uint32_t & outPacketSize) const;
964 
972  virtual AJAStatus GenerateTransmitData (uint8_t * pBuffer, const size_t inMaxBytes, uint32_t & outPacketSize);
973 
979  virtual AJAStatus GenerateTransmitData (UWordSequence & outData);
980 
987  virtual AJAStatus GenerateTransmitData (ULWordSequence & outData);
989 
990 
994 
1002  virtual std::ostream & Print (std::ostream & inOutStream, const bool inDetailed = false) const;
1003 
1009  virtual std::ostream & DumpPayload (std::ostream & inOutStream) const;
1010 
1019  virtual std::string CompareWithInfo (const AJAAncillaryData & inRHS, const bool inIgnoreLocation = true, const bool inIgnoreChecksum = true) const;
1020 
1021  virtual std::string IDAsString (void) const;
1022 
1027  virtual std::string AsString (const uint16_t inDumpMaxBytes = 0) const;
1028 
1035  static std::string DIDSIDToString (const uint8_t inDID, const uint8_t inSDID);
1036 
1042  static std::string AuxPacketTypeToString (const uint8_t inAuxPktType);
1043 
1048  static bool AuxPacketTypeIsValid (const uint8_t inAuxPktType);
1049 
1050 
1051 
1053 
1058  static uint16_t AddEvenParity (const uint8_t inDataByte);
1059 
1060 
1062  typedef std::vector<U16Packet> U16Packets;
1063 
1081  static bool GetAncPacketsFromVANCLine (const UWordSequence & inYUV16Line,
1082  const AncChannelSearchSelect inChanSelect,
1083  U16Packets & outRawPackets,
1084  U16Packet & outWordOffsets);
1104  static bool Unpack8BitYCbCrToU16sVANCLine (const void * pInYUV8Line,
1105  U16Packet & outU16YUVLine,
1106  const uint32_t inNumPixels);
1126  static bool Unpack8BitYCbCrToU16sVANCLineSD (const void * pInYUV8Line,
1127  UWordSequence & outU16YUVLine,
1128  const uint32_t inNumPixels);
1129 
1130  static void GetInstanceCounts (uint32_t & outConstructed, uint32_t & outDestructed);
1131  static uint32_t GetNumActiveInstances (void);
1132  static uint32_t GetNumConstructed (void);
1133  static uint32_t GetNumDestructed (void);
1134  static void ResetInstanceCounts (void);
1135 
1136  protected:
1137  typedef std::vector<uint8_t> ByteVector;
1138  typedef ByteVector::size_type ByteVectorIndex;
1139  typedef ByteVector::const_iterator ByteVectorConstIter;
1140 
1141  void Init (void); // NOT virtual - called by constructors
1142 
1143  AJAStatus AllocDataMemory (const uint32_t inNumBytes);
1144  AJAStatus FreeDataMemory (void);
1145 
1146  static inline uint8_t GetGUMPHeaderByte1 (void) {return 0xFF;}
1147  virtual uint8_t GetGUMPHeaderByte2 (void) const;
1148  virtual inline uint8_t GetGUMPHeaderByte3 (void) const {return GetLocationLineNumber() & 0x7F;} // ls 7 bits [6:0] of line num
1149 
1150  // Instance Data
1151  protected:
1152  uint8_t m_DID;
1153  uint8_t m_SID;
1154  uint8_t m_checksum;
1161  uint32_t m_frameID;
1162  uint64_t m_userData;
1163  //HDMI Aux specific types
1164  uint8_t m_auxType;
1165  uint8_t m_auxHB1;
1166  uint8_t m_auxHB2;
1167 
1168 }; // AJAAncillaryData
1169 
1171 
1172 
1179 static inline std::ostream & operator << (std::ostream & inOutStream, const AJAAncillaryData & inAncData) {return inAncData.Print(inOutStream);}
1180 
1181 
1186 {
1187  public: // CLASS METHODS
1191 
1196  static bool BufferStartsWithRTPHeader (const NTV2Buffer & inBuffer);
1197 
1198  static inline size_t GetHeaderWordCount (void) {return 5;}
1199  static inline size_t GetHeaderByteCount (void) {return GetHeaderWordCount() * sizeof(uint32_t);}
1200 
1205  static const std::string & FieldSignalToString (const uint8_t inFBits);
1207 
1208 
1209  public: // INSTANCE METHODS
1211  virtual inline ~AJARTPAncPayloadHeader () {}
1212 
1216  virtual bool IsNULL (void) const;
1218  virtual bool IsValid (void) const;
1219  virtual inline bool IsEndOfFieldOrFrame (void) const {return mMarkerBit;}
1220  virtual inline uint8_t GetPayloadType (void) const {return mPayloadType;}
1221  virtual inline uint32_t GetSequenceNumber (void) const {return mSequenceNumber;}
1222  virtual inline uint32_t GetTimeStamp (void) const {return mTimeStamp;}
1223  virtual inline uint32_t GetSyncSourceID (void) const {return mSyncSourceID;}
1224  virtual inline uint16_t GetPayloadLength (void) const {return mPayloadLength;}
1225  virtual inline uint8_t GetAncPacketCount (void) const {return mAncCount;}
1226  virtual inline uint8_t GetFieldSignal (void) const {return mFieldSignal & 3;}
1227  virtual inline bool IsProgressive (void) const {return mFieldSignal == 0;}
1228  virtual inline bool NoFieldSpecified (void) const {return IsProgressive();}
1229  virtual inline bool IsField1 (void) const {return mFieldSignal == 2;}
1230  virtual inline bool IsField2 (void) const {return mFieldSignal == 3;}
1231  virtual inline bool IsValidFieldSignal (void) const {return mFieldSignal != 1;}
1232  virtual inline bool HasPaddingBytes (void) const {return mPBit;}
1233  virtual inline bool HasExtendedHeader (void) const {return mXBit;}
1234 
1239  virtual bool operator == (const AJARTPAncPayloadHeader & inRHS) const;
1240 
1245  virtual inline bool operator != (const AJARTPAncPayloadHeader & inRHS) const {return !(operator == (inRHS));}
1246 
1252  virtual std::ostream & Print (std::ostream & inOutStream) const;
1254 
1258 
1267  virtual bool WriteToULWordVector (ULWordSequence & outVector, const bool inReset = true) const;
1268 
1277  virtual bool WriteToBuffer (NTV2Buffer & outBuffer, const ULWord inU32Offset = 0) const;
1278 
1285  virtual bool ReadFromULWordVector (const ULWordSequence & inVector);
1286 
1293  virtual bool ReadFromBuffer (const NTV2Buffer & inBuffer);
1295 
1299 
1304  virtual inline AJARTPAncPayloadHeader & SetField1 (void) {return SetFieldSignal(2);}
1305 
1310  virtual inline AJARTPAncPayloadHeader & SetField2 (void) {return SetFieldSignal(3);}
1311 
1316  virtual inline AJARTPAncPayloadHeader & SetProgressive (void) {return SetFieldSignal(0);}
1317 
1323  virtual inline AJARTPAncPayloadHeader & SetPayloadType (const uint8_t inPayloadType) {mPayloadType = inPayloadType & 0x7F; return *this;}
1324 
1330  virtual inline AJARTPAncPayloadHeader & SetPayloadLength (const uint16_t inByteCount) {mPayloadLength = inByteCount; return *this;}
1331 
1337  virtual inline AJARTPAncPayloadHeader & SetAncPacketCount (const uint8_t inPktCount) {mAncCount = inPktCount; return *this;}
1338 
1344  virtual inline AJARTPAncPayloadHeader & SetTimeStamp (const uint32_t inTimeStamp) {mTimeStamp = inTimeStamp; return *this;}
1345 
1351  virtual inline AJARTPAncPayloadHeader & SetSyncSourceID (const uint32_t inSyncSrcID) {mSyncSourceID = inSyncSrcID; return *this;}
1352 
1358  virtual inline AJARTPAncPayloadHeader & SetSequenceNumber (const uint32_t inSeqNumber) {mSequenceNumber = inSeqNumber; return *this;}
1359 
1365  virtual inline AJARTPAncPayloadHeader & SetCCBits (const uint8_t inCCBits) {mCCBits = inCCBits & 0x0F; return *this;}
1366 
1372  virtual inline AJARTPAncPayloadHeader & SetEndOfFieldOrFrame (const bool inIsLast = true) {mMarkerBit = inIsLast; return *this;}
1374 
1375  protected:
1382  virtual bool SetFromPacketHeaderULWordAtIndex (const unsigned inIndex0, const uint32_t inULWord);
1383 
1389  virtual inline AJARTPAncPayloadHeader & SetFieldSignal (const uint8_t inFieldSignal) {mFieldSignal = (inFieldSignal & 0x03); return *this;}
1390 
1397  virtual bool GetPacketHeaderULWordForIndex (const unsigned inIndex0, uint32_t & outULWord) const;
1398 
1403  virtual inline uint32_t GetPacketHeaderULWordForIndex (const unsigned inIndex0) const {uint32_t result(0); GetPacketHeaderULWordForIndex(inIndex0, result); return result;}
1404 
1405  private: // INSTANCE DATA
1406  uint8_t mVBits;
1407  bool mPBit;
1408  bool mXBit;
1409  bool mMarkerBit;
1410  uint8_t mCCBits;
1411  uint8_t mPayloadType;
1412  uint32_t mSequenceNumber;
1413  uint32_t mTimeStamp;
1414  uint32_t mSyncSourceID;
1415  uint16_t mPayloadLength;
1416  uint8_t mAncCount;
1419  uint8_t mFieldSignal;
1420 }; // AJARTPAncPayloadHeader
1421 
1428 static inline std::ostream & operator << (std::ostream & inOutStrm, const AJARTPAncPayloadHeader & inObj) {return inObj.Print(inOutStrm);}
1429 
1430 
1435 {
1436  public: // INSTANCE METHODS
1442  explicit AJARTPAncPacketHeader (const AJAAncDataLoc & inLocation);
1443  virtual inline ~AJARTPAncPacketHeader () {}
1444 
1449  virtual uint32_t GetULWord (void) const;
1451  virtual inline bool IsCBitSet (void) const {return mCBit;}
1452  virtual inline bool IsSBitSet (void) const {return mSBit;}
1453  virtual inline uint16_t GetLineNumber (void) const {return mLineNum;}
1454  virtual inline uint16_t GetHorizOffset (void) const {return mHOffset;}
1455  virtual inline uint8_t GetStreamNumber (void) const {return mStreamNum;}
1456  virtual AJAAncDataLoc AsDataLocation(void) const;
1457 
1463  virtual std::ostream & Print (std::ostream & inOutStream) const;
1465 
1469 
1474  virtual inline AJARTPAncPacketHeader & SetCChannel (void) {mCBit = true; return *this;}
1475 
1480  virtual inline AJARTPAncPacketHeader & SetYChannel (void) {mCBit = false; return *this;}
1481 
1487  virtual inline AJARTPAncPacketHeader & SetLineNumber (const uint16_t inLineNum) {mLineNum = inLineNum & 0x7FF; return *this;}
1488 
1494  virtual inline AJARTPAncPacketHeader & SetHorizOffset (const uint16_t inHOffset) {mHOffset = inHOffset & 0x0FFF; return *this;}
1495 
1502  virtual inline AJARTPAncPacketHeader & SetStreamNumber (const uint8_t inStreamNum) {mStreamNum = inStreamNum & 0x07F; return *this;}
1503 
1510  virtual inline AJARTPAncPacketHeader & SetDataStreamFlag (const bool inFlag) {mSBit = inFlag; return *this;}
1511 
1517  virtual AJARTPAncPacketHeader & SetFrom (const AJAAncDataLoc & inLocation);
1518 
1524  virtual inline AJARTPAncPacketHeader & operator = (const AJAAncDataLoc & inRHS) {return SetFrom(inRHS);}
1526 
1530 
1536  virtual bool SetFromULWord (const uint32_t inULWord);
1537 
1545  virtual bool ReadFromULWordVector (const ULWordSequence & inVector, const unsigned inIndex0);
1546 
1554  virtual bool WriteToULWordVector (ULWordSequence & outVector, const bool inReset = true) const;
1556 
1557  private: // INSTANCE DATA
1558  bool mCBit;
1559  bool mSBit;
1560  uint16_t mLineNum;
1561  uint16_t mHOffset;
1562  uint8_t mStreamNum;
1563 }; // AJARTPAncPacketHeader
1564 
1571 static inline std::ostream & operator << (std::ostream & inOutStrm, const AJARTPAncPacketHeader & inObj) {return inObj.Print(inOutStrm);}
1572 
1573 
1574 #if !defined(NTV2_DEPRECATE_16_3)
1575  // The old, original long names...
1585 // typedef AJAAncillaryDataChannel AJAAncDataChannel;
1587 
1588  AJAExport inline const std::string & AJAAncillaryDataVideoStreamToString (const AJAAncillaryDataVideoStream inValue, const bool inCompact = true)
1589  {
1590  return AJAAncDataChannelToString(inValue,inCompact);
1591  }
1592 
1593  #define AJAAncillaryDataChannel_C AJAAncDataChannel_C
1594  #define AJAAncillaryDataChannel_Both AJAAncDataChannel_Both
1595  #define AJAAncillaryDataChannel_Y AJAAncDataChannel_Y
1596  #define AJAAncillaryDataChannel_Unknown AJAAncDataChannel_Unknown
1597  #define AJAAncillaryDataChannel_Size AJAAncDataChannel_Size
1598  #define IS_VALID_AJAAncillaryDataVideoStream(_x_) (IS_VALID_AJAAncDataChannel(_x_))
1599  #define AJAAncillaryDataVideoStream_C AJAAncillaryDataChannel_C
1600  #define AJAAncillaryDataVideoStream_Y AJAAncillaryDataChannel_Y
1601  #define AJAAncillaryDataVideoStream_Unknown AJAAncillaryDataChannel_Unknown
1602  #define AJAAncillaryDataVideoStream_Size AJAAncillaryDataChannel_Size
1603  #define IS_VALID_AJAAncillaryDataChannel IS_VALID_AJAAncDataChannel
1604  #define AJAAncillaryDataChannelToString AJAAncDataChannelToString
1605 
1606  #define AJAAncillaryDataSpace_VANC AJAAncDataSpace_VANC
1607  #define AJAAncillaryDataSpace_HANC AJAAncDataSpace_HANC
1608  #define AJAAncillaryDataSpace_Unknown AJAAncDataSpace_Unknown
1609  #define AJAAncillaryDataSpace_Size AJAAncDataSpace_Size
1610  #define IS_VALID_AJAAncillaryDataSpace IS_VALID_AJAAncDataSpace
1611  #define IS_HANC_AJAAncillaryDataSpace IS_HANC_AJAAncDataSpace
1612  #define IS_VANC_AJAAncillaryDataSpace IS_VANC_AJAAncDataSpace
1613  #define AJAAncillaryDataSpaceToString AJAAncDataSpaceToString
1614 
1615  #define AJAAncillaryDataStream_1 AJAAncDataStream_1
1616  #define AJAAncillaryDataStream_2 AJAAncDataStream_2
1617  #define AJAAncillaryDataStream_3 AJAAncDataStream_3
1618  #define AJAAncillaryDataStream_4 AJAAncDataStream_4
1619  #define AJAAncillaryDataStream_Unknown AJAAncDataStream_Unknown
1620  #define AJAAncillaryDataStream_Size AJAAncDataStream_Size
1621  #define IS_VALID_AJAAncillaryDataStream IS_VALID_AJAAncDataStream
1622  #define IS_LINKA_AJAAncillaryDataStream IS_LINKA_AJAAncDataStream
1623  #define IS_LINKB_AJAAncillaryDataStream IS_LINKB_AJAAncDataStream
1624  #define AJAAncillaryDataStreamToString AJAAncDataStreamToString
1625 
1626  #define AJAAncillaryDataLink_A AJAAncDataLink_A
1627  #define AJAAncillaryDataLink_B AJAAncDataLink_B
1628  #define AJAAncillaryDataLink_LeftEye AJAAncDataLink_LeftEye
1629  #define AJAAncillaryDataLink_RightEye AJAAncDataLink_RightEye
1630  #define AJAAncillaryDataLink_Unknown AJAAncDataLink_Unknown
1631  #define AJAAncillaryDataLink_Size AJAAncDataLink_Size
1632  #define IS_VALID_AJAAncillaryDataLink IS_VALID_AJAAncDataLink
1633  #define AJAAncillaryDataLinkToString AJAAncDataLinkToString
1634 
1635  #define AJAAncillaryDataType_Unknown AJAAncDataType_Unknown
1636  #define AJAAncillaryDataType_Smpte2016_3 AJAAncDataType_Smpte2016_3
1637  #define AJAAncillaryDataType_Timecode_ATC AJAAncDataType_Timecode_ATC
1638  #define AJAAncillaryDataType_Timecode_VITC AJAAncDataType_Timecode_VITC
1639  #define AJAAncillaryDataType_Cea708 AJAAncDataType_Cea708
1640  #define AJAAncillaryDataType_Cea608_Vanc AJAAncDataType_Cea608_Vanc
1641  #define AJAAncillaryDataType_Cea608_Line21 AJAAncDataType_Cea608_Line21
1642  #define AJAAncillaryDataType_Smpte352 AJAAncDataType_Smpte352
1643  #define AJAAncillaryDataType_Smpte2051 AJAAncDataType_Smpte2051
1644  #define AJAAncillaryDataType_FrameStatusInfo524D AJAAncDataType_FrameStatusInfo524D
1645  #define AJAAncillaryDataType_FrameStatusInfo5251 AJAAncDataType_FrameStatusInfo5251
1646  #define AJAAncillaryDataType_HDR_SDR AJAAncDataType_HDR_SDR
1647  #define AJAAncillaryDataType_HDR_HDR10 AJAAncDataType_HDR_HDR10
1648  #define AJAAncillaryDataType_HDR_HLG AJAAncDataType_HDR_HLG
1649  #define AJAAncillaryDataType_Size AJAAncDataType_Size
1650  #define IS_VALID_AJAAncillaryDataType IS_VALID_AJAAncDataType
1651  #define IS_KNOWN_AJAAncillaryDataType IS_KNOWN_AJAAncDataType
1652  #define AJAAncillaryDataTypeToString AJAAncDataTypeToString
1653  #define AJAAncillaryData_AnalogDID AJAAncData_AnalogDID
1654  #define AJAAncillaryData_AnalogSID AJAAncData_AnalogSID
1655 
1656  #define AJAAncillaryDataCoding_Digital AJAAncDataCoding_Digital
1657  #define AJAAncillaryDataCoding_Raw AJAAncDataCoding_Raw
1658  #define AJAAncillaryDataCoding_Analog AJAAncDataCoding_Raw
1659  #define AJAAncillaryDataCoding_Unknown AJAAncDataCoding_Unknown
1660  #define AJAAncillaryDataCoding_Size AJAAncDataCoding_Size
1661  #define IS_VALID_AJAAncillaryDataCoding(_x_) IS_VALID_AJAAncDataCoding(_x_)
1662  #define AJAAncillaryDataCodingToString AJAAncDataCodingToString
1663 
1664  #define AJAAncillaryBufferFormat_Unknown AJAAncBufferFormat_Unknown
1665  #define AJAAncillaryBufferFormat_FBVANC AJAAncBufferFormat_FBVANC
1666  #define AJAAncillaryBufferFormat_SDI AJAAncBufferFormat_SDI
1667  #define AJAAncillaryBufferFormat_RTP AJAAncBufferFormat_RTP
1668  #define AJAAncillaryBufferFormat_Invalid AJAAncBufferFormat_Invalid
1669  #define AJAAncillaryBufferFormat_Size AJAAncBufferFormat_Invalid
1670  #define IS_VALID_AJAAncillaryBufferFormat(_x_) IS_VALID_AJAAncBufferFormat(_x_)
1671  #define IS_KNOWN_AJAAncillaryBufferFormat(_x_) IS_KNOWN_AJAAncBufferFormat(_x_)
1672  #define AJAAncillaryBufferFormatToString AJAAncBufferFormatToString
1673 #endif // !defined(NTV2_DEPRECATE_16_3)
1674 
1675 #endif // AJA_ANCILLARYDATA_H
const std::string & AJAAncillaryDataVideoStreamToString(const AJAAncillaryDataVideoStream inValue, const bool inCompact=true)
#define AJAAncDataHorizOffset_Unknown
Unknown.
static size_t GetHeaderByteCount(void)
virtual AJARTPAncPayloadHeader & SetCCBits(const uint8_t inCCBits)
Sets my RTP Packet CC Bits value.
virtual bool IsValidFieldSignal(void) const
virtual const uint8_t * GetPayloadData(void) const
CEA708 (SMPTE 334) HD Closed Captioning.
Definition: ancillarydata.h:50
virtual uint8_t GetDID(void) const
const uint8_t AJAAncData_AnalogDID
Definition: ancillarydata.h:24
virtual AJARTPAncPayloadHeader & SetTimeStamp(const uint32_t inTimeStamp)
Sets my RTP Packet Time Stamp value.
AJAAncillaryDataChannel AJAAncillaryDataVideoStream
AJAAncDataLoc AJAAncillaryDataLocation
The ancillary data is associated with the Left Eye stereoscopic video stream.
Definition: ancillarydata.h:83
The ancillary data is associated with DS2 of the video stream (Link A).
Declares common types used in the ajabase library.
SMPTE 12-M Vertical Interval Timecode (aka "VITC")
Definition: ancillarydata.h:49
It&#39;s unknown which raster section contains the ancillary data (.
const std::string & AJAAncDataTypeToString(const AJAAncDataType inValue, const bool inCompact=true)
#define NULL
const std::string & AJAAncDataSpaceToString(const AJAAncDataSpace inValue, const bool inCompact=true)
virtual uint8_t GetSID(void) const
SMPTE 12-M Ancillary Timecode (formerly known as "RP-188")
Definition: ancillarydata.h:48
AJAAncDataLoc & SetHorizontalOffset(uint16_t inHOffset)
Specifies the horizontal packet position in the raster.
AJAAncillaryData AJAAncData
virtual AJAAncPktDIDSID GetDIDSID(void) const
AJAAncDataChannel
Identifies which component of a video stream in which the ancillary data is placed or found...
virtual AJARTPAncPacketHeader & SetLineNumber(const uint16_t inLineNum)
Sets my line number value to least-significant 11 bits of the given value.
virtual AJAAncBufferFormat GetBufferFormat(void) const
#define AJAAncDataLineNumber_Unknown
Packet line number is unknown.
AJAStatus
Definition: types.h:380
UWordSequence U16Packet
An ordered sequence of 10-bit packet words stored in uint16_t values.
Ancillary data found between SAV and EAV (.
virtual uint8_t GetPayloadType(void) const
It is not known which data stream the ancillary data is associated with.
AJAAncDataLoc & Reset(void)
Resets all of my location elements to an unknown, invalid state.
AJAAncDataSpace
Identified the raster section of a video stream that contains the ancillary data. Deprecated in favor...
virtual uint8_t GetGUMPHeaderByte3(void) const
AJAAncDataLink AJAAncillaryDataLink
virtual uint32_t GetSequenceNumber(void) const
virtual AJARTPAncPayloadHeader & SetSyncSourceID(const uint32_t inSyncSrcID)
Sets my RTP Packet Sync Source ID value.
bool IsVanc(void) const
AJAAncDataType m_ancType
One of a known set of ancillary data types (or "Custom" if not identified)
Only look in luma samples.
Unknown or "don&#39;t care".
virtual AJAAncDIDSIDPair GetDIDSIDPair(void) const
virtual const AJAAncDataLoc & GetDataLocation(void) const
AJAAncDataType
Identifies the ancillary data types that are known to this module.
Definition: ancillarydata.h:44
bool IsHanc(void) const
#define IS_VALID_AJAAncDataLink(_x_)
Definition: ancillarydata.h:89
AJAAncillaryData AJAAncPacket
#define ToAJAAncPktDIDSID(_d_, _s_)
Definition: ancillarydata.h:29
virtual bool IsEndOfFieldOrFrame(void) const
const std::string & AJAAncDataLinkToString(const AJAAncDataLink inValue, const bool inCompact=true)
struct AJAAncDataLoc AJAAncDataLoc
Defines where the ancillary data can be found within a video stream.
AJAAncDataStream GetDataStream(void) const
AJAAncDataLoc(const AJAAncDataLink inLink=AJAAncDataLink_Unknown, const AJAAncDataChannel inChannel=AJAAncDataChannel_Unknown, const AJAAncDataSpace inIgnored=AJAAncDataSpace_Unknown, const uint16_t inLineNum=uint16_t(0x0000), const uint16_t inHorizOffset=uint16_t(0x0000), const AJAAncDataStream inStream=AJAAncDataStream_1)
The ancillary data is in the form of a digitized waveform (e.g. CEA-608 captions, VITC...
virtual bool IsHDMI(void) const
uint64_t OrdinalValue(void) const
It is not known which link of the video stream the ancillary data is associated with.
Definition: ancillarydata.h:85
uint8_t m_auxType
HDMI Aux Header Byte 0 (Packet Type)
virtual AJARTPAncPayloadHeader & SetField2(void)
Sets my Field Signal value to "Field 2".
virtual bool HasExtendedHeader(void) const
virtual bool IsChromaChannel(void) const
bool operator!=(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
Definition: json.hpp:14762
virtual uint32_t GetFrameID(void) const
virtual ~AJARTPAncPayloadHeader()
My destructor.
const std::string & AJAAncBufferFormatToString(const AJAAncBufferFormat inValue, const bool inCompact=true)
uint32_t ULWord
Definition: ajatypes.h:223
AJAAncDataLoc & SetDataLink(const AJAAncDataLink inLink)
Sets my data link value to the given value (if valid).
uint8_t m_checksum
My 8-bit checksum: DID + SID + DC + payload (w/o parity) [note: NOT the same as the 9-bit checksum in...
Frame buffer VANC lines.
The ancillary data is associated with DS3 of the video stream (Link B).
#define AJAAncDataHorizOffset_AnyVanc
VANC – Packet placed/found in any legal area of raster line after SAV, but before EAV...
Ancillary data found between EAV and SAV (.
ByteVector m_payload
My payload data (DC = size)
AJAAncDataCoding m_coding
Analog or digital data.
uint16_t GetLineNumber(void) const
virtual AJAAncDataLink GetLocationVideoLink(void) const
virtual AJARTPAncPayloadHeader & SetFieldSignal(const uint8_t inFieldSignal)
Sets my Field Signal value from the given 8-bit value.
virtual uint16_t GetLocationLineNumber(void) const
uint8_t m_auxHB1
HDMI Aux Header Byte 1 (Header Data)
virtual uint8_t GetAuxHB1(void) const
virtual uint8_t GetAuxHB2(void) const
Defines where the ancillary data can be found within a video stream.
virtual AJAAncDataType GetAncillaryDataType(void) const
It is not known which channel of the video stream the ancillary data is associated with...
virtual ~AJARTPAncPacketHeader()
My destructor.
virtual bool isHDMIAuxInfoFrame(void) const
Returns whether or not this is an HDMI Aux Info Frame Packet.
I represent the header of a SMPTE 2110 compliant RTP Anc network packet.
std::vector< uint8_t > ByteVector
virtual AJARTPAncPacketHeader & SetCChannel(void)
Sets my "C" channel bit setting to &#39;true&#39;.
virtual AJARTPAncPacketHeader & SetDataStreamFlag(const bool inFlag)
Sets my data stream flag.
static uint8_t GetGUMPHeaderByte1(void)
virtual std::ostream & Print(std::ostream &inOutStream, const bool inDetailed=false) const
Streams a human-readable representation of me to the given output stream.
uint64_t m_userData
User data (for client use)
virtual AJAAncillaryData & SetFrameID(const uint32_t inFrameID)
Sets my originating frame identifier.
AJAAncillaryData AJAAuxPacket
virtual bool IsHanc(void) const
virtual bool IsField2(void) const
virtual uint32_t GetPacketHeaderULWordForIndex(const unsigned inIndex0) const
std::vector< U16Packet > U16Packets
An ordered sequence of zero or more U16Packet values.
Includes data that is valid, but we don&#39;t recognize.
Definition: ancillarydata.h:46
virtual AJARTPAncPayloadHeader & SetPayloadType(const uint8_t inPayloadType)
Sets my Payload Type value.
virtual AJARTPAncPacketHeader & SetHorizOffset(const uint16_t inHOffset)
Sets my horizontal offset value to least-significant 12 bits of the given value.
ByteVector::const_iterator ByteVectorConstIter
#define AJAAncDataHorizOffset_Anywhere
Unspecified – Packet placed/found in any legal area of raster line.
virtual AJAAncillaryData & SetBufferFormat(const AJAAncBufferFormat inFmt)
Sets my originating buffer format.
AJAAncillaryData AJAAuxiliaryData
std::string AncChannelSearchSelectToString(const AncChannelSearchSelect inSelect, const bool inCompact=true)
uint8_t m_auxHB2
HDMI Aux Header Byte 2 (Header Data)
It is not known which coding type the ancillary data is using.
virtual bool NoFieldSpecified(void) const
virtual uint16_t GetLineNumber(void) const
AJAAncDataChannel GetDataChannel(void) const
virtual uint16_t GetHorizOffset(void) const
virtual AJARTPAncPayloadHeader & SetAncPacketCount(const uint8_t inPktCount)
Sets my RTP Anc Packet Count value.
Declares the most fundamental data types used by NTV2. Since Windows NT was the first principal devel...
AJAAncDataChannel AJAAncillaryDataChannel
AJAAncDataLoc & SetLineNumber(const uint16_t inLineNum)
Sets my anc data line number value.
Defines for the NTV2 SDK version number, used by ajantv2/includes/ntv2enums.h. See the ajantv2/includ...
The ancillary data is associated with the chrominance (C) channel of the video stream.
The ancillary data is associated with the luminance (Y) channel of the video stream.
virtual AJAAncDataStream GetLocationDataStream(void) const
virtual bool IsEmpty(void) const
virtual bool IsField1(void) const
std::vector< uint16_t > UWordSequence
An ordered sequence of UWord (uint16_t) values.
virtual AJAStatus GeneratePayloadData(void)
Generates the payload data from the "local" ancillary data.
AJAAncDataLink GetDataLink(void) const
virtual std::ostream & Print(std::ostream &inOutStream) const
Writes a human-readable dump of my current state into a given output stream.
virtual size_t GetPayloadByteCount(void) const
AJAAncDataLoc & SetDataVideoStream(const AJAAncDataChannel inChannel)
AJAAncDataCoding AJAAncillaryDataCoding
AJAAncDataLoc & SetDataStream(const AJAAncDataStream inStream)
Sets my data link value to the given value (if valid).
virtual AJARTPAncPayloadHeader & SetEndOfFieldOrFrame(const bool inIsLast=true)
Sets my RTP Packet End-Of-Field or End-Of-Frame (Marker Bit) value.
virtual uint16_t GetLocationHorizOffset(void) const
virtual const uint64_t & UserData(void) const
virtual AJARTPAncPayloadHeader & SetProgressive(void)
Sets my Field Signal value to "Progressive".
#define AJA_UNUSED(_x_)
Definition: types.h:426
virtual uint8_t GetFieldSignal(void) const
virtual bool GotValidReceiveData(void) const
HDMI Auxiliary data.
Definition: ancillarydata.h:60
std::string AJAAncHorizOffsetToString(const uint16_t inValue)
SMPTE 2016-3 VANC Aspect Format Description (AFD) metadata.
Definition: ancillarydata.h:47
The ancillary data is associated with the Right Eye stereoscopic video stream.
Definition: ancillarydata.h:84
virtual AJARTPAncPayloadHeader & SetField1(void)
Sets my Field Signal value to "Field 1".
virtual AJAStatus SetDIDSID(const AJAAncDIDSIDPair &inDIDSID)
Sets both my Data ID (DID) and Secondary Data ID (SID).
virtual uint32_t GetSyncSourceID(void) const
Describes a user-space buffer on the host computer. I have an address and a length, plus some optional attributes (allocated by SDK?, page-aligned? etc.).
bool IsChromaChannel(void) const
bool IsDataLinkB(void) const
AJAAncDataStream
Identifies which data stream the ancillary data is associated with.
AJAAncDataLoc * AJAAncDataLocPtr
#define IS_VANC_AJAAncDataSpace(_x_)
bool IsValid(void) const
AncChannelSearchSelect
Specifies which channel of a video stream in which to look for Anc data.
virtual AJARTPAncPayloadHeader & SetSequenceNumber(const uint32_t inSeqNumber)
Sets my RTP Packet Sequence Number value.
AJAAncDataLoc & SetDataChannel(const AJAAncDataChannel inChannel)
Sets my data video stream value to the given value (if valid).
virtual bool HasPaddingBytes(void) const
bool operator==(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
Definition: json.hpp:14737
virtual uint8_t GetAncPacketCount(void) const
#define AJAExport
Definition: export.h:33
Frame Status Information, such as Active Frame flag.
Definition: ancillarydata.h:56
virtual uint8_t GetStreamNumber(void) const
uint8_t m_SID
Official SMPTE secondary ID (or DBN - w/o parity)
virtual bool IsSDI(void) const
virtual bool IsDigital(void) const
AJAAncBufferFormat AJAAncillaryBufferFormat
virtual bool IsSBitSet(void) const
std::pair< uint8_t, uint8_t > AJAAncDIDSIDPair
Definition: ancillarydata.h:27
#define IS_VALID_AJAAncDataStream(_x_)
#define AJAAncDataHorizOffset_AnyHanc
HANC – Packet placed/found in any legal area of raster line after EAV.
The ancillary data is associated with Link A of the video stream.
Definition: ancillarydata.h:81
SMPTE 2051 "Two Frame Marker".
Definition: ancillarydata.h:54
virtual AJARTPAncPacketHeader & SetYChannel(void)
Sets my "C" channel bit setting to &#39;false&#39;.
virtual AJARTPAncPayloadHeader & SetPayloadLength(const uint16_t inByteCount)
Sets my RTP Packet Length value.
virtual bool ChecksumOK(void) const
Compares the received 8-bit checksum with a newly calculated 8-bit checksum. Returns &#39;true&#39; if they m...
Look both luma and chroma samples (SD only)
uint32_t m_frameID
ID of my originating frame, if known.
ByteVector::size_type ByteVectorIndex
virtual AJAAncDataCoding GetDataCoding(void) const
SDI (AJA "GUMP")
const uint8_t AJAAncData_AnalogSID
Definition: ancillarydata.h:25
virtual uint64_t & UserData(void)
virtual bool HasStreamInfo(void) const
bool IsLumaChannel(void) const
AJAAncDataLoc & SetDataSpace(const AJAAncDataSpace inSpace)
Sets my data space value to the given value (if valid).
virtual bool IsFBVANC(void) const
AJAAncillaryDataLocation * AJAAncillaryDataLocationPtr
AJAAncDataSpace GetDataSpace(void) const
#define IS_VALID_AJAAncDataChannel(_x_)
virtual bool IsVanc(void) const
virtual bool IsRaw(void) const
bool operator<(const value_t lhs, const value_t rhs) noexcept
comparison operator for JSON types
Definition: json.hpp:2902
#define IS_HANC_AJAAncDataSpace(_x_)
AJAAncDataCoding
Identifies the ancillary data coding type: digital or non-digital (analog/raw).
enum AJAAncDataStream AJAAncillaryDataStream
virtual bool IsProgressive(void) const
SD ONLY – The ancillary data is associated with both the chroma and luma channels.
The ancillary data is associated with DS4 of the video stream (Link B).
AJAAncDataLink
Identifies which link of a video stream the ancillary data is associated with.
Definition: ancillarydata.h:79
static size_t GetHeaderWordCount(void)
uint8_t m_DID
Official SMPTE ancillary packet ID (w/o parity)
AJAAncillaryData AJAAuxData
std::vector< uint32_t > ULWordSequence
An ordered sequence of ULWord (uint32_t) values.
uint16_t AJAAncPktDIDSID
Packet DID/SID pair: DID (MS 8 bits) and SID (LS 8 bits)
Definition: ancillarydata.h:28
AJAAncDataLoc m_location
Location of the ancillary data in the video stream (Y or C, HANC or VANC, etc.)
CEA608 SD Closed Captioning (SMPTE 334 VANC packet)
Definition: ancillarydata.h:51
const std::string & AJAAncDataCodingToString(const AJAAncDataCoding inValue, const bool inCompact=true)
const std::string & AJAAncDataChannelToString(const AJAAncDataChannel inValue, const bool inCompact=true)
virtual bool IsCBitSet(void) const
const std::string & AJAAncDataStreamToString(const AJAAncDataStream inValue, const bool inCompact=true)
virtual uint8_t GetChecksum(void) const
virtual uint32_t GetDC(void) const
virtual AJAAncDataLoc & GetDataLocation(void)
virtual bool IsRTP(void) const
bool IsDataLinkA(void) const
std::pair< uint8_t, uint8_t > AJAAncillaryDIDSIDPair
A DID/SID pair, typically used as an indexing key.
Definition: ancillarydata.h:27
AJAAncDataSpace AJAAncillaryDataSpace
I am the principal class that stores a single SMPTE-291 SDI ancillary data packet OR the digitized co...
bool m_rcvDataValid
This is set true (or not) by ParsePayloadData()
uint16_t GetHorizontalOffset(void) const
virtual AJAAncDataChannel GetLocationDataChannel(void) const
virtual bool IsLumaChannel(void) const
#define NTV2_DEPRECATED_f(__f__)
Definition: ajatypes.h:524
Declares enums and structs used by all platform drivers and the SDK.
I represent the 4-byte header of an anc packet that&#39;s inside an RTP packet.
virtual uint16_t GetPayloadLength(void) const
Only look in chroma samples.
std::string AJAAncLineNumberToString(const uint16_t inValue)
AJAAncBufferFormat m_bufferFmt
My originating buffer format, if known.
CEA608 SD Closed Captioning ("Line 21" waveform)
Definition: ancillarydata.h:52
The ancillary data is associated with Link B of the video stream.
Definition: ancillarydata.h:82
std::ostream & operator<<(std::ostream &inOutStream, const AJAAncDIDSIDPair &inData)
Writes a human-readable rendition of the given AJAAncDIDSIDPair into the given output stream...
virtual AJARTPAncPacketHeader & SetStreamNumber(const uint8_t inStreamNum)
Sets my stream number value to least-significant 7 bits of the given value.
#define IS_VALID_AJAAncDataSpace(_x_)
virtual std::ostream & Print(std::ostream &inOutStream) const
Streams a human-readable represetation of my current state to the given output stream.
The ancillary data is associated with DS1 of the video stream (Link A).
virtual AJAStatus AppendPayload(const AJAAncillaryData *pInAncData)
AJAAncDataType AJAAncillaryDataType
SMPTE 352 "Payload ID".
Definition: ancillarydata.h:53
Frame Status Information, such as Active Frame flag.
Definition: ancillarydata.h:55
virtual uint32_t GetTimeStamp(void) const
The ancillary data is in the form of a SMPTE-291 Ancillary Packet.
std::string AJAAncDataLocToString(const AJAAncDataLoc &inValue, const bool inCompact=true)
virtual AJAAncDataSpace GetLocationVideoSpace(void) const
virtual uint8_t GetAuxType(void) const
AJAAncBufferFormat
Identifies the type of anc buffer the packet originated from: GUMP, RTP, VANC, or unknown...