AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
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 {
62 
63 #define IS_VALID_AJAAncDataType(_x_) ((_x_) >= AJAAncDataType_Unknown && (_x_) < AJAAncDataType_Size)
64 #define IS_KNOWN_AJAAncDataType(_x_) ((_x_) > AJAAncDataType_Unknown && (_x_) < AJAAncDataType_Size)
65 
71 AJAExport const std::string & AJAAncDataTypeToString (const AJAAncDataType inValue, const bool inCompact = true);
72 
73 
74 
78 typedef enum
79 {
87 
88 #define IS_VALID_AJAAncDataLink(_x_) ((_x_) >= AJAAncDataLink_A && (_x_) < AJAAncDataLink_Unknown)
89 
95 AJAExport const std::string & AJAAncDataLinkToString (const AJAAncDataLink inValue, const bool inCompact = true);
96 
97 
98 
102 typedef enum
103 {
111 
112 #define IS_VALID_AJAAncDataStream(_x_) ((_x_) >= AJAAncDataStream_1 && (_x_) < AJAAncDataStream_Unknown)
113 #define IS_LINKA_AJAAncDataStream(_x_) ((_x_) == AJAAncDataStream_1)
114 #define IS_LINKB_AJAAncDataStream(_x_) ((_x_) == AJAAncDataStream_2)
115 
121 AJAExport const std::string & AJAAncDataStreamToString (const AJAAncDataStream inValue, const bool inCompact = true);
122 
123 
124 
128 typedef enum
129 {
136 
137 #define IS_VALID_AJAAncDataChannel(_x_) ((_x_) >= AJAAncDataChannel_C && (_x_) < AJAAncDataChannel_Unknown)
138 
144 AJAExport const std::string & AJAAncDataChannelToString (const AJAAncDataChannel inValue, const bool inCompact = true);
145 
146 
147 
151 typedef enum
152 {
158 
159 #define IS_VALID_AncChannelSearchSelect(_x_) ((_x_) >= AncChannelSearch_Y && (_x_) < AncChannelSearch_Invalid)
160 
166 AJAExport std::string AncChannelSearchSelectToString (const AncChannelSearchSelect inSelect, const bool inCompact = true);
167 
168 
174 typedef enum
175 {
181 
182 #define IS_VALID_AJAAncDataSpace(_x_) ((_x_) >= AJAAncDataSpace_VANC && (_x_) < AJAAncDataSpace_Unknown)
183 #define IS_HANC_AJAAncDataSpace(_x_) ((_x_) == AJAAncDataSpace_HANC)
184 #define IS_VANC_AJAAncDataSpace(_x_) ((_x_) == AJAAncDataSpace_VANC)
185 
191 AJAExport const std::string & AJAAncDataSpaceToString (const AJAAncDataSpace inValue, const bool inCompact = true);
192 
193 
194 
195 #define AJAAncDataLineNumber_Unknown uint16_t(0x0000)
196 #define AJAAncDataLineNumber_DontCare uint16_t(0x07FF)
197 #define AJAAncDataLineNumber_Anywhere (AJAAncDataLineNumber_DontCare)
198 #define AJAAncDataLineNumber_AnyVanc uint16_t(0x07FE)
199 #define AJAAncDataLineNumber_Future uint16_t(0x07FD)
200 
201 #define IS_UNKNOWN_AJAAncDataLineNumber(_x_) ((_x_) == AJAAncDataLineNumber_Unknown)
202 #define IS_IRRELEVANT_AJAAncDataLineNumber(_x_) ((_x_) == AJAAncDataLineNumber_DontCare)
203 #define IS_GOOD_AJAAncDataLineNumber(_x_) ((_x_) > 0 && (_x_) < AJAAncDataLineNumber_DontCare)
204 
205 AJAExport std::string AJAAncLineNumberToString (const uint16_t inValue);
206 
207 // Special horizOffset values:
208 #define AJAAncDataHorizOffset_Unknown uint16_t(0x0000)
209 #define AJAAncDataHorizOffset_Anywhere uint16_t(0x0FFF)
210 #define AJAAncDataHorizOffset_AnyHanc uint16_t(0x0FFE)
211 #define AJAAncDataHorizOffset_AnyVanc uint16_t(0x0FFD)
212 #define AJAAncDataHorizOffset_Future uint16_t(0x0FFC)
213 
214 
218 AJAExport std::string AJAAncHorizOffsetToString (const uint16_t inValue);
219 
220 
224 typedef struct AJAExport AJAAncDataLoc
225 {
226  // Instance Methods
227  public:
230  const AJAAncDataSpace inIgnored = AJAAncDataSpace_Unknown,
231  const uint16_t inLineNum = AJAAncDataLineNumber_Unknown,
232  const uint16_t inHorizOffset = AJAAncDataHorizOffset_Unknown,
233  const AJAAncDataStream inStream = AJAAncDataStream_1)
234  { AJA_UNUSED(inIgnored);
235  SetDataLink(inLink).SetDataChannel(inChannel).SetLineNumber(inLineNum).SetHorizontalOffset(inHorizOffset).SetDataStream(inStream);
236  }
237 
238  inline bool operator == (const AJAAncDataLoc & inRHS) const
239  {
240  // Everything must match exactly:
241  bool equal = (GetDataLink() == inRHS.GetDataLink()
242  && GetDataStream() == inRHS.GetDataStream()
243  && GetDataChannel() == inRHS.GetDataChannel()
244 // No longer necessary && GetDataSpace() == inRHS.GetDataSpace()
245  && GetLineNumber() == inRHS.GetLineNumber());
246  if (equal && GetHorizontalOffset() && inRHS.GetHorizontalOffset())
247  equal = (GetHorizontalOffset() == inRHS.GetHorizontalOffset());
248 
249  return equal;
250  }
251 
252  inline bool operator != (const AJAAncDataLoc & inRHS) const {return !(*this == inRHS);}
253 
254  inline bool operator < (const AJAAncDataLoc & inRHS) const
255  {
256  const uint64_t lhs (OrdinalValue());
257  const uint64_t rhs (inRHS.OrdinalValue());
258  return lhs < rhs; // 64-bit unsigned compare:
259  }
260 
261  inline bool IsValid (void) const
262  {
263  return IS_VALID_AJAAncDataLink(mLink)
264  && IS_VALID_AJAAncDataStream(mStream)
265  && IS_VALID_AJAAncDataChannel(mChannel)
266  && (IS_VALID_AJAAncDataSpace(GetDataSpace())
267  || (GetDataSpace() == AJAAncDataSpace_Unknown));
268  }
269 
275  virtual AJAStatus Compare (const AJAAncDataLoc & inRHS) const;
276 
283  virtual std::string CompareWithInfo (const AJAAncDataLoc & inRHS) const;
284 
289  inline AJAAncDataLoc & Reset (void)
290  {
291  mLink = AJAAncDataLink_Unknown;
292  mStream = AJAAncDataStream_Unknown;
293  mChannel = AJAAncDataChannel_Unknown;
294  mLineNum = AJAAncDataLineNumber_Unknown;
295  mHorizOffset = AJAAncDataHorizOffset_Unknown;
296  return *this;
297  }
298 
299  inline AJAAncDataLink GetDataLink (void) const {return mLink;}
300  inline bool IsDataLinkA (void) const {return mLink == AJAAncDataLink_A;}
301  inline bool IsDataLinkB (void) const {return mLink == AJAAncDataLink_B;}
302 
303  inline AJAAncDataStream GetDataStream (void) const {return mStream;}
304 
305  inline AJAAncDataChannel GetDataChannel (void) const {return mChannel;}
306  inline bool IsLumaChannel (void) const {return mChannel == AJAAncDataChannel_Y;}
307  inline bool IsChromaChannel (void) const {return mChannel == AJAAncDataChannel_C;}
308 
315  inline AJAAncDataSpace GetDataSpace (void) const
316  {
317  if (mHorizOffset == AJAAncDataHorizOffset_AnyVanc)
318  return AJAAncDataSpace_VANC;
319  if (mHorizOffset == AJAAncDataHorizOffset_AnyHanc)
320  return AJAAncDataSpace_HANC;
322  }
323  inline bool IsVanc (void) const {return GetDataSpace() == AJAAncDataSpace_VANC;}
324  inline bool IsHanc (void) const {return GetDataSpace() == AJAAncDataSpace_HANC;}
325 
326  inline uint16_t GetLineNumber (void) const {return mLineNum;}
327 
338  inline uint16_t GetHorizontalOffset (void) const {return mHorizOffset & 0x0FFF;}
339 
346  std::ostream & Print (std::ostream & ostrm, const bool inCompact = true) const;
347 
353  inline AJAAncDataLoc & SetDataLink (const AJAAncDataLink inLink) {mLink = inLink; return *this;}
354 
360  inline AJAAncDataLoc & SetDataStream (const AJAAncDataStream inStream) {mStream = inStream; return *this;}
361 
367  inline AJAAncDataLoc & SetDataChannel (const AJAAncDataChannel inChannel) {mChannel = inChannel; return *this;}
368 #if AJA_NTV2_SDK_VERSION_AT_LEAST(16,3)
369  inline AJAAncDataLoc & SetDataVideoStream (const AJAAncDataChannel inChannel) {return SetDataChannel(inChannel);}
370 #endif
371 
377  inline AJAAncDataLoc & SetDataSpace (const AJAAncDataSpace inSpace)
378  {
379  if (IS_VANC_AJAAncDataSpace(inSpace))
380  mHorizOffset = AJAAncDataHorizOffset_AnyVanc;
381  else if (IS_HANC_AJAAncDataSpace(inSpace))
382  mHorizOffset = AJAAncDataHorizOffset_AnyHanc;
383  return *this;
384  }
385 
392  inline AJAAncDataLoc & SetLineNumber (const uint16_t inLineNum) {mLineNum = inLineNum; return *this;}
393 
394 
407  inline AJAAncDataLoc & SetHorizontalOffset (uint16_t inHOffset)
408  { inHOffset &= 0x0FFF;
409  if (inHOffset == AJAAncDataHorizOffset_AnyVanc)
410  mHorizOffset = inHOffset; // Force [any] VANC
411  else if (inHOffset == AJAAncDataHorizOffset_AnyHanc)
412  mHorizOffset = inHOffset; // Force [any] HANC
413  else if (inHOffset == AJAAncDataHorizOffset_Anywhere)
414  mHorizOffset = inHOffset; // Anywhere (unknown DataSpace)
415  else
416  mHorizOffset = inHOffset; // Trust the caller; don't mess with existing DataSpace
417  return *this;
418  }
419 
430  inline uint64_t OrdinalValue (void) const
431  { // 64-bit unsigned compare: LLLLLLLLLLLLSSSHHHHHHHHHHHHCCCDDDDDDDKK
432  const uint64_t hOffset (mHorizOffset == AJAAncDataHorizOffset_AnyVanc || mHorizOffset == AJAAncDataHorizOffset_Anywhere ? 0 : mHorizOffset);
433  return ((uint64_t(mLineNum) << 27) // LLLLLLLLLLLL
434  | (uint64_t(GetDataSpace()) << 24) // SSS
435  | (hOffset << 12) // HHHHHHHHHHHH
436  | (uint64_t(mChannel) << 9) // CCC
437  | (uint64_t(mStream) << 2) // DDDDDDD
438  | uint64_t(mLink)); // KK
439  }
440 
441  private: // Made private in SDK 15.2
442  AJAAncDataLink mLink;
443  AJAAncDataStream mStream;
444  AJAAncDataChannel mChannel;
445  uint16_t mLineNum;
446  uint16_t mHorizOffset;
447 
448 } AJAAncDataLoc;
449 
452 
458 AJAExport std::string AJAAncDataLocToString (const AJAAncDataLoc & inValue, const bool inCompact = true);
459 
466 AJAExport std::ostream & operator << (std::ostream & inOutStream, const AJAAncDataLoc & inData);
467 
468 
469 
473 typedef enum
474 {
480 
481 #define IS_VALID_AJAAncDataCoding(_x_) ((_x_) >= AJAAncDataCoding_Digital && (_x_) < AJAAncDataCoding_Size)
482 
488 AJAExport const std::string & AJAAncDataCodingToString (const AJAAncDataCoding inValue, const bool inCompact = true);
489 
490 
491 
495 typedef enum
496 {
503 
505 
506 #define IS_VALID_AJAAncBufferFormat(_x_) ((_x_) >= AJAAncBufferFormat_Unknown && (_x_) < AJAAncBufferFormat_Size)
507 #define IS_KNOWN_AJAAncBufferFormat(_x_) ((_x_) > AJAAncBufferFormat_Unknown && (_x_) < AJAAncBufferFormat_Size)
508 
514 AJAExport const std::string & AJAAncBufferFormatToString (const AJAAncBufferFormat inValue, const bool inCompact = true);
515 
516 
551 {
552 public:
556 
558  AJAAncillaryData ();
559 
564  AJAAncillaryData (const AJAAncillaryData & inClone);
565 
570  AJAAncillaryData (const AJAAncillaryData * pInClone);
571 
572  virtual ~AJAAncillaryData ();
573  virtual void Clear (void);
574  virtual AJAAncillaryData * Clone (void) const;
575 
577 
581 
583  virtual inline uint8_t GetDID (void) const {return m_DID;}
584  virtual inline uint8_t GetSID (void) const {return m_SID;}
585  virtual inline uint32_t GetDC (void) const {return uint32_t(m_payload.size());}
586  virtual inline AJAAncDIDSIDPair GetDIDSIDPair (void) const {return AJAAncDIDSIDPair(GetDID(),GetSID());}
587  virtual inline AJAAncPktDIDSID GetDIDSID (void) const {return ToAJAAncPktDIDSID(GetDID(),GetSID());}
588  virtual inline size_t GetPayloadByteCount (void) const {return size_t(GetDC());}
589  virtual AJAAncDataType GetAncillaryDataType (void) const {return m_ancType;}
590  virtual inline uint32_t GetFrameID (void) const {return m_frameID;}
591 
592  virtual inline const AJAAncDataLoc & GetDataLocation (void) const {return m_location;}
593  virtual inline AJAAncDataLoc & GetDataLocation (void) {return m_location;}
594  virtual inline AJAAncDataCoding GetDataCoding (void) const {return m_coding;}
595  virtual inline AJAAncBufferFormat GetBufferFormat (void) const {return m_bufferFmt;}
596  virtual uint8_t GetChecksum (void) const {return m_checksum;}
597 
598  virtual inline AJAAncDataLink GetLocationVideoLink (void) const {return GetDataLocation().GetDataLink();}
599  virtual inline AJAAncDataStream GetLocationDataStream (void) const {return GetDataLocation().GetDataStream();}
600  virtual inline AJAAncDataChannel GetLocationDataChannel (void) const {return GetDataLocation().GetDataChannel();}
601  virtual inline AJAAncDataSpace GetLocationVideoSpace (void) const {return GetDataLocation().GetDataSpace();}
602  virtual inline uint16_t GetLocationLineNumber (void) const {return GetDataLocation().GetLineNumber();}
603  virtual inline uint16_t GetLocationHorizOffset (void) const {return GetDataLocation().GetHorizontalOffset();}
604  virtual uint16_t GetStreamInfo (void) const;
605  virtual inline const uint64_t & UserData (void) const {return m_userData;}
606 
610  virtual inline bool HasStreamInfo (void) const {return IS_VALID_AJAAncDataLink(GetLocationVideoLink()) && IS_VALID_AJAAncDataStream(GetLocationDataStream());}
611  virtual inline bool IsEmpty (void) const {return GetDC() == 0;}
612  virtual inline bool IsLumaChannel (void) const {return GetDataLocation().IsLumaChannel ();}
613  virtual inline bool IsChromaChannel (void) const {return GetDataLocation().IsChromaChannel ();}
614  virtual inline bool IsVanc (void) const {return GetDataLocation().IsVanc ();}
615  virtual inline bool IsHanc (void) const {return GetDataLocation().IsHanc ();}
616  virtual inline bool IsDigital (void) const {return GetDataCoding() == AJAAncDataCoding_Digital;}
617  virtual inline bool IsRaw (void) const {return GetDataCoding() == AJAAncDataCoding_Raw;}
618  virtual inline bool IsFBVANC (void) const {return GetBufferFormat() == AJAAncBufferFormat_FBVANC;}
619  virtual inline bool IsSDI (void) const {return GetBufferFormat() == AJAAncBufferFormat_SDI;}
620  virtual inline bool IsRTP (void) const {return GetBufferFormat() == AJAAncBufferFormat_RTP;}
621 
622 
629  virtual uint8_t Calculate8BitChecksum (void) const;
630 
636  virtual uint16_t Calculate9BitChecksum (void) const;
637 
643  virtual bool ChecksumOK (void) const {return m_checksum == Calculate8BitChecksum ();}
644 
645  virtual AJAAncillaryData & operator = (const AJAAncillaryData & inRHS);
646 
651  virtual bool operator == (const AJAAncillaryData & inRHS) const;
652 
657  virtual inline bool operator != (const AJAAncillaryData & inRHS) const {return !(*this == inRHS);}
658 
666  virtual AJAStatus Compare (const AJAAncillaryData & inRHS, const bool inIgnoreLocation = true, const bool inIgnoreChecksum = true) const;
668 
669 
673 
680  virtual AJAStatus SetDID (const uint8_t inDataID);
681 
687  virtual AJAStatus SetSID (const uint8_t inSID);
688 
694  virtual inline AJAStatus SetDIDSID (const AJAAncDIDSIDPair & inDIDSID) {SetDID(inDIDSID.first); return SetSID(inDIDSID.second);} // New in SDK 16.0
695 
705  virtual AJAStatus SetChecksum (const uint8_t inChecksum8, const bool inValidate = false);
706 
712  virtual AJAStatus SetDataLocation (const AJAAncDataLoc & inLoc);
713 
719  virtual AJAStatus SetLocationVideoLink (const AJAAncDataLink inLink);
720 
726  virtual AJAStatus SetLocationDataStream (const AJAAncDataStream inStream);
727 
733  virtual AJAStatus SetLocationDataChannel (const AJAAncDataChannel inChannel);
734 
740  virtual AJAStatus SetLocationLineNumber (const uint16_t inLineNum);
741 
747  virtual AJAStatus SetLocationHorizOffset (const uint16_t inOffset);
748 
754  virtual AJAStatus SetDataCoding (const AJAAncDataCoding inCodingType);
755 
761  virtual inline AJAAncillaryData & SetFrameID (const uint32_t inFrameID) {m_frameID = inFrameID; return *this;}
762 
768  virtual inline AJAAncillaryData & SetBufferFormat (const AJAAncBufferFormat inFmt) {m_bufferFmt = inFmt; return *this;}
769 
770  virtual inline uint64_t & UserData (void) {return m_userData;}
771 
773 
777 
783  virtual uint8_t GetPayloadByteAtIndex (const uint32_t inIndex0) const;
784 
788  virtual inline const uint8_t * GetPayloadData (void) const {return m_payload.empty() ? NULL : &(m_payload[0]);}
789 
796  virtual AJAStatus GetPayloadData (uint8_t * pBuffer, const uint32_t inByteCapacity) const;
797 
804  virtual AJAStatus GetPayloadData (UWordSequence & outUDWs, const bool inAddParity = true) const;
806 
807 
811 
818  virtual AJAStatus SetPayloadByteAtIndex (const uint8_t inDataByte, const uint32_t inIndex0);
819 
826  virtual AJAStatus SetPayloadData (const uint8_t * pInData, const uint32_t inByteCount);
827 
834  virtual AJAStatus AppendPayloadData (const uint8_t * pInBuffer, const uint32_t inByteCount);
835 
841  virtual AJAStatus AppendPayload (const AJAAncillaryData & inAncData);
842 
846  virtual inline NTV2_DEPRECATED_f(AJAStatus AppendPayload (const AJAAncillaryData * pInAncData)) {return pInAncData ? AppendPayload (*pInAncData) : AJA_STATUS_NULL;}
847 
856  virtual AJAStatus SetFromSMPTE334 (const uint16_t * pInData, const uint32_t inNumWords, const AJAAncDataLoc & inLocInfo);
857 
863  virtual AJAStatus ParsePayloadData (void);
864 
874  virtual inline bool GotValidReceiveData (void) const {return m_rcvDataValid;}
875 
881  virtual inline AJAStatus GeneratePayloadData (void) {return AJA_STATUS_SUCCESS;}
883 
884 
888 
898  virtual AJAStatus InitWithReceivedData ( const uint8_t * pInData,
899  const size_t inMaxBytes,
900  const AJAAncDataLoc & inLocationInfo,
901  uint32_t & outPacketByteCount);
908  virtual AJAStatus InitWithReceivedData ( const std::vector<uint8_t> & inData,
909  const AJAAncDataLoc & inLocationInfo);
910 
922  virtual AJAStatus InitWithReceivedData (const ULWordSequence & inData, uint16_t & inOutStartIndex, const bool inIgnoreChecksum = false);
924 
925 
929 
937  virtual AJAStatus GetRawPacketSize (uint32_t & outPacketSize) const;
938 
946  virtual AJAStatus GenerateTransmitData (uint8_t * pBuffer, const size_t inMaxBytes, uint32_t & outPacketSize);
947 
953  virtual AJAStatus GenerateTransmitData (UWordSequence & outData);
954 
961  virtual AJAStatus GenerateTransmitData (ULWordSequence & outData);
963 
964 
968 
976  virtual std::ostream & Print (std::ostream & inOutStream, const bool inDetailed = false) const;
977 
983  virtual std::ostream & DumpPayload (std::ostream & inOutStream) const;
984 
993  virtual std::string CompareWithInfo (const AJAAncillaryData & inRHS, const bool inIgnoreLocation = true, const bool inIgnoreChecksum = true) const;
994 
995  virtual std::string IDAsString (void) const;
996 
1001  virtual std::string AsString (const uint16_t inDumpMaxBytes = 0) const;
1002 
1009  static std::string DIDSIDToString (const uint8_t inDID, const uint8_t inSDID);
1011 
1016  static uint16_t AddEvenParity (const uint8_t inDataByte);
1017 
1018 
1020  typedef std::vector<U16Packet> U16Packets;
1021 
1039  static bool GetAncPacketsFromVANCLine (const UWordSequence & inYUV16Line,
1040  const AncChannelSearchSelect inChanSelect,
1041  U16Packets & outRawPackets,
1042  U16Packet & outWordOffsets);
1058  static bool Unpack8BitYCbCrToU16sVANCLine (const void * pInYUV8Line,
1059  U16Packet & outU16YUVLine,
1060  const uint32_t inNumPixels);
1061 
1062  static void GetInstanceCounts (uint32_t & outConstructed, uint32_t & outDestructed);
1063  static uint32_t GetNumActiveInstances (void);
1064  static uint32_t GetNumConstructed (void);
1065  static uint32_t GetNumDestructed (void);
1066  static void ResetInstanceCounts (void);
1067 
1068  protected:
1069  typedef std::vector<uint8_t> ByteVector;
1070  typedef ByteVector::size_type ByteVectorIndex;
1071  typedef ByteVector::const_iterator ByteVectorConstIter;
1072 
1073  void Init (void); // NOT virtual - called by constructors
1074 
1075  AJAStatus AllocDataMemory (const uint32_t inNumBytes);
1076  AJAStatus FreeDataMemory (void);
1077 
1078  static inline uint8_t GetGUMPHeaderByte1 (void) {return 0xFF;}
1079  virtual uint8_t GetGUMPHeaderByte2 (void) const;
1080  virtual inline uint8_t GetGUMPHeaderByte3 (void) const {return GetLocationLineNumber() & 0x7F;} // ls 7 bits [6:0] of line num
1081 
1082  // Instance Data
1083  protected:
1084  uint8_t m_DID;
1085  uint8_t m_SID;
1086  uint8_t m_checksum;
1093  uint32_t m_frameID;
1094  uint64_t m_userData;
1095 
1096 }; // AJAAncillaryData
1097 
1099 
1100 
1107 static inline std::ostream & operator << (std::ostream & inOutStream, const AJAAncillaryData & inAncData) {return inAncData.Print(inOutStream);}
1108 
1109 
1114 {
1115  public: // CLASS METHODS
1119 
1124  static bool BufferStartsWithRTPHeader (const NTV2Buffer & inBuffer);
1125 
1126  static inline size_t GetHeaderWordCount (void) {return 5;}
1127  static inline size_t GetHeaderByteCount (void) {return GetHeaderWordCount() * sizeof(uint32_t);}
1128 
1133  static const std::string & FieldSignalToString (const uint8_t inFBits);
1135 
1136 
1137  public: // INSTANCE METHODS
1139  virtual inline ~AJARTPAncPayloadHeader () {}
1140 
1144  virtual bool IsNULL (void) const;
1146  virtual bool IsValid (void) const;
1147  virtual inline bool IsEndOfFieldOrFrame (void) const {return mMarkerBit;}
1148  virtual inline uint8_t GetPayloadType (void) const {return mPayloadType;}
1149  virtual inline uint32_t GetSequenceNumber (void) const {return mSequenceNumber;}
1150  virtual inline uint32_t GetTimeStamp (void) const {return mTimeStamp;}
1151  virtual inline uint32_t GetSyncSourceID (void) const {return mSyncSourceID;}
1152  virtual inline uint16_t GetPayloadLength (void) const {return mPayloadLength;}
1153  virtual inline uint8_t GetAncPacketCount (void) const {return mAncCount;}
1154  virtual inline uint8_t GetFieldSignal (void) const {return mFieldSignal & 3;}
1155  virtual inline bool IsProgressive (void) const {return mFieldSignal == 0;}
1156  virtual inline bool NoFieldSpecified (void) const {return IsProgressive();}
1157  virtual inline bool IsField1 (void) const {return mFieldSignal == 2;}
1158  virtual inline bool IsField2 (void) const {return mFieldSignal == 3;}
1159  virtual inline bool IsValidFieldSignal (void) const {return mFieldSignal != 1;}
1160  virtual inline bool HasPaddingBytes (void) const {return mPBit;}
1161  virtual inline bool HasExtendedHeader (void) const {return mXBit;}
1162 
1167  virtual bool operator == (const AJARTPAncPayloadHeader & inRHS) const;
1168 
1173  virtual inline bool operator != (const AJARTPAncPayloadHeader & inRHS) const {return !(operator == (inRHS));}
1174 
1180  virtual std::ostream & Print (std::ostream & inOutStream) const;
1182 
1186 
1195  virtual bool WriteToULWordVector (ULWordSequence & outVector, const bool inReset = true) const;
1196 
1205  virtual bool WriteToBuffer (NTV2Buffer & outBuffer, const ULWord inU32Offset = 0) const;
1206 
1213  virtual bool ReadFromULWordVector (const ULWordSequence & inVector);
1214 
1221  virtual bool ReadFromBuffer (const NTV2Buffer & inBuffer);
1223 
1227 
1232  virtual inline AJARTPAncPayloadHeader & SetField1 (void) {return SetFieldSignal(2);}
1233 
1238  virtual inline AJARTPAncPayloadHeader & SetField2 (void) {return SetFieldSignal(3);}
1239 
1244  virtual inline AJARTPAncPayloadHeader & SetProgressive (void) {return SetFieldSignal(0);}
1245 
1251  virtual inline AJARTPAncPayloadHeader & SetPayloadType (const uint8_t inPayloadType) {mPayloadType = inPayloadType & 0x7F; return *this;}
1252 
1258  virtual inline AJARTPAncPayloadHeader & SetPayloadLength (const uint16_t inByteCount) {mPayloadLength = inByteCount; return *this;}
1259 
1265  virtual inline AJARTPAncPayloadHeader & SetAncPacketCount (const uint8_t inPktCount) {mAncCount = inPktCount; return *this;}
1266 
1272  virtual inline AJARTPAncPayloadHeader & SetTimeStamp (const uint32_t inTimeStamp) {mTimeStamp = inTimeStamp; return *this;}
1273 
1279  virtual inline AJARTPAncPayloadHeader & SetSyncSourceID (const uint32_t inSyncSrcID) {mSyncSourceID = inSyncSrcID; return *this;}
1280 
1286  virtual inline AJARTPAncPayloadHeader & SetSequenceNumber (const uint32_t inSeqNumber) {mSequenceNumber = inSeqNumber; return *this;}
1287 
1293  virtual inline AJARTPAncPayloadHeader & SetCCBits (const uint8_t inCCBits) {mCCBits = inCCBits & 0x0F; return *this;}
1294 
1300  virtual inline AJARTPAncPayloadHeader & SetEndOfFieldOrFrame (const bool inIsLast = true) {mMarkerBit = inIsLast; return *this;}
1302 
1303  protected:
1310  virtual bool SetFromPacketHeaderULWordAtIndex (const unsigned inIndex0, const uint32_t inULWord);
1311 
1317  virtual inline AJARTPAncPayloadHeader & SetFieldSignal (const uint8_t inFieldSignal) {mFieldSignal = (inFieldSignal & 0x03); return *this;}
1318 
1325  virtual bool GetPacketHeaderULWordForIndex (const unsigned inIndex0, uint32_t & outULWord) const;
1326 
1331  virtual inline uint32_t GetPacketHeaderULWordForIndex (const unsigned inIndex0) const {uint32_t result(0); GetPacketHeaderULWordForIndex(inIndex0, result); return result;}
1332 
1333  private: // INSTANCE DATA
1334  uint8_t mVBits;
1335  bool mPBit;
1336  bool mXBit;
1337  bool mMarkerBit;
1338  uint8_t mCCBits;
1339  uint8_t mPayloadType;
1340  uint32_t mSequenceNumber;
1341  uint32_t mTimeStamp;
1342  uint32_t mSyncSourceID;
1343  uint16_t mPayloadLength;
1344  uint8_t mAncCount;
1347  uint8_t mFieldSignal;
1348 }; // AJARTPAncPayloadHeader
1349 
1356 static inline std::ostream & operator << (std::ostream & inOutStrm, const AJARTPAncPayloadHeader & inObj) {return inObj.Print(inOutStrm);}
1357 
1358 
1363 {
1364  public: // INSTANCE METHODS
1370  explicit AJARTPAncPacketHeader (const AJAAncDataLoc & inLocation);
1371  virtual inline ~AJARTPAncPacketHeader () {}
1372 
1377  virtual uint32_t GetULWord (void) const;
1379  virtual inline bool IsCBitSet (void) const {return mCBit;}
1380  virtual inline bool IsSBitSet (void) const {return mSBit;}
1381  virtual inline uint16_t GetLineNumber (void) const {return mLineNum;}
1382  virtual inline uint16_t GetHorizOffset (void) const {return mHOffset;}
1383  virtual inline uint8_t GetStreamNumber (void) const {return mStreamNum;}
1384  virtual AJAAncDataLoc AsDataLocation(void) const;
1385 
1391  virtual std::ostream & Print (std::ostream & inOutStream) const;
1393 
1397 
1402  virtual inline AJARTPAncPacketHeader & SetCChannel (void) {mCBit = true; return *this;}
1403 
1408  virtual inline AJARTPAncPacketHeader & SetYChannel (void) {mCBit = false; return *this;}
1409 
1415  virtual inline AJARTPAncPacketHeader & SetLineNumber (const uint16_t inLineNum) {mLineNum = inLineNum & 0x7FF; return *this;}
1416 
1422  virtual inline AJARTPAncPacketHeader & SetHorizOffset (const uint16_t inHOffset) {mHOffset = inHOffset & 0x0FFF; return *this;}
1423 
1430  virtual inline AJARTPAncPacketHeader & SetStreamNumber (const uint8_t inStreamNum) {mStreamNum = inStreamNum & 0x07F; return *this;}
1431 
1438  virtual inline AJARTPAncPacketHeader & SetDataStreamFlag (const bool inFlag) {mSBit = inFlag; return *this;}
1439 
1445  virtual AJARTPAncPacketHeader & SetFrom (const AJAAncDataLoc & inLocation);
1446 
1452  virtual inline AJARTPAncPacketHeader & operator = (const AJAAncDataLoc & inRHS) {return SetFrom(inRHS);}
1454 
1458 
1464  virtual bool SetFromULWord (const uint32_t inULWord);
1465 
1473  virtual bool ReadFromULWordVector (const ULWordSequence & inVector, const unsigned inIndex0);
1474 
1482  virtual bool WriteToULWordVector (ULWordSequence & outVector, const bool inReset = true) const;
1484 
1485  private: // INSTANCE DATA
1486  bool mCBit;
1487  bool mSBit;
1488  uint16_t mLineNum;
1489  uint16_t mHOffset;
1490  uint8_t mStreamNum;
1491 }; // AJARTPAncPacketHeader
1492 
1499 static inline std::ostream & operator << (std::ostream & inOutStrm, const AJARTPAncPacketHeader & inObj) {return inObj.Print(inOutStrm);}
1500 
1501 
1502 #if !defined(NTV2_DEPRECATE_16_3)
1503  // The old, original long names...
1513 // typedef AJAAncillaryDataChannel AJAAncDataChannel;
1515 
1516  AJAExport inline const std::string & AJAAncillaryDataVideoStreamToString (const AJAAncillaryDataVideoStream inValue, const bool inCompact = true)
1517  {
1518  return AJAAncDataChannelToString(inValue,inCompact);
1519  }
1520 
1521  #define AJAAncillaryDataChannel_C AJAAncDataChannel_C
1522  #define AJAAncillaryDataChannel_Both AJAAncDataChannel_Both
1523  #define AJAAncillaryDataChannel_Y AJAAncDataChannel_Y
1524  #define AJAAncillaryDataChannel_Unknown AJAAncDataChannel_Unknown
1525  #define AJAAncillaryDataChannel_Size AJAAncDataChannel_Size
1526  #define IS_VALID_AJAAncillaryDataVideoStream(_x_) (IS_VALID_AJAAncDataChannel(_x_))
1527  #define AJAAncillaryDataVideoStream_C AJAAncillaryDataChannel_C
1528  #define AJAAncillaryDataVideoStream_Y AJAAncillaryDataChannel_Y
1529  #define AJAAncillaryDataVideoStream_Unknown AJAAncillaryDataChannel_Unknown
1530  #define AJAAncillaryDataVideoStream_Size AJAAncillaryDataChannel_Size
1531  #define IS_VALID_AJAAncillaryDataChannel IS_VALID_AJAAncDataChannel
1532  #define AJAAncillaryDataChannelToString AJAAncDataChannelToString
1533 
1534  #define AJAAncillaryDataSpace_VANC AJAAncDataSpace_VANC
1535  #define AJAAncillaryDataSpace_HANC AJAAncDataSpace_HANC
1536  #define AJAAncillaryDataSpace_Unknown AJAAncDataSpace_Unknown
1537  #define AJAAncillaryDataSpace_Size AJAAncDataSpace_Size
1538  #define IS_VALID_AJAAncillaryDataSpace IS_VALID_AJAAncDataSpace
1539  #define IS_HANC_AJAAncillaryDataSpace IS_HANC_AJAAncDataSpace
1540  #define IS_VANC_AJAAncillaryDataSpace IS_VANC_AJAAncDataSpace
1541  #define AJAAncillaryDataSpaceToString AJAAncDataSpaceToString
1542 
1543  #define AJAAncillaryDataStream_1 AJAAncDataStream_1
1544  #define AJAAncillaryDataStream_2 AJAAncDataStream_2
1545  #define AJAAncillaryDataStream_3 AJAAncDataStream_3
1546  #define AJAAncillaryDataStream_4 AJAAncDataStream_4
1547  #define AJAAncillaryDataStream_Unknown AJAAncDataStream_Unknown
1548  #define AJAAncillaryDataStream_Size AJAAncDataStream_Size
1549  #define IS_VALID_AJAAncillaryDataStream IS_VALID_AJAAncDataStream
1550  #define IS_LINKA_AJAAncillaryDataStream IS_LINKA_AJAAncDataStream
1551  #define IS_LINKB_AJAAncillaryDataStream IS_LINKB_AJAAncDataStream
1552  #define AJAAncillaryDataStreamToString AJAAncDataStreamToString
1553 
1554  #define AJAAncillaryDataLink_A AJAAncDataLink_A
1555  #define AJAAncillaryDataLink_B AJAAncDataLink_B
1556  #define AJAAncillaryDataLink_LeftEye AJAAncDataLink_LeftEye
1557  #define AJAAncillaryDataLink_RightEye AJAAncDataLink_RightEye
1558  #define AJAAncillaryDataLink_Unknown AJAAncDataLink_Unknown
1559  #define AJAAncillaryDataLink_Size AJAAncDataLink_Size
1560  #define IS_VALID_AJAAncillaryDataLink IS_VALID_AJAAncDataLink
1561  #define AJAAncillaryDataLinkToString AJAAncDataLinkToString
1562 
1563  #define AJAAncillaryDataType_Unknown AJAAncDataType_Unknown
1564  #define AJAAncillaryDataType_Smpte2016_3 AJAAncDataType_Smpte2016_3
1565  #define AJAAncillaryDataType_Timecode_ATC AJAAncDataType_Timecode_ATC
1566  #define AJAAncillaryDataType_Timecode_VITC AJAAncDataType_Timecode_VITC
1567  #define AJAAncillaryDataType_Cea708 AJAAncDataType_Cea708
1568  #define AJAAncillaryDataType_Cea608_Vanc AJAAncDataType_Cea608_Vanc
1569  #define AJAAncillaryDataType_Cea608_Line21 AJAAncDataType_Cea608_Line21
1570  #define AJAAncillaryDataType_Smpte352 AJAAncDataType_Smpte352
1571  #define AJAAncillaryDataType_Smpte2051 AJAAncDataType_Smpte2051
1572  #define AJAAncillaryDataType_FrameStatusInfo524D AJAAncDataType_FrameStatusInfo524D
1573  #define AJAAncillaryDataType_FrameStatusInfo5251 AJAAncDataType_FrameStatusInfo5251
1574  #define AJAAncillaryDataType_HDR_SDR AJAAncDataType_HDR_SDR
1575  #define AJAAncillaryDataType_HDR_HDR10 AJAAncDataType_HDR_HDR10
1576  #define AJAAncillaryDataType_HDR_HLG AJAAncDataType_HDR_HLG
1577  #define AJAAncillaryDataType_Size AJAAncDataType_Size
1578  #define IS_VALID_AJAAncillaryDataType IS_VALID_AJAAncDataType
1579  #define IS_KNOWN_AJAAncillaryDataType IS_KNOWN_AJAAncDataType
1580  #define AJAAncillaryDataTypeToString AJAAncDataTypeToString
1581  #define AJAAncillaryData_AnalogDID AJAAncData_AnalogDID
1582  #define AJAAncillaryData_AnalogSID AJAAncData_AnalogSID
1583 
1584  #define AJAAncillaryDataCoding_Digital AJAAncDataCoding_Digital
1585  #define AJAAncillaryDataCoding_Raw AJAAncDataCoding_Raw
1586  #define AJAAncillaryDataCoding_Analog AJAAncDataCoding_Raw
1587  #define AJAAncillaryDataCoding_Unknown AJAAncDataCoding_Unknown
1588  #define AJAAncillaryDataCoding_Size AJAAncDataCoding_Size
1589  #define IS_VALID_AJAAncillaryDataCoding(_x_) IS_VALID_AJAAncDataCoding(_x_)
1590  #define AJAAncillaryDataCodingToString AJAAncDataCodingToString
1591 
1592  #define AJAAncillaryBufferFormat_Unknown AJAAncBufferFormat_Unknown
1593  #define AJAAncillaryBufferFormat_FBVANC AJAAncBufferFormat_FBVANC
1594  #define AJAAncillaryBufferFormat_SDI AJAAncBufferFormat_SDI
1595  #define AJAAncillaryBufferFormat_RTP AJAAncBufferFormat_RTP
1596  #define AJAAncillaryBufferFormat_Invalid AJAAncBufferFormat_Invalid
1597  #define AJAAncillaryBufferFormat_Size AJAAncBufferFormat_Invalid
1598  #define IS_VALID_AJAAncillaryBufferFormat(_x_) IS_VALID_AJAAncBufferFormat(_x_)
1599  #define IS_KNOWN_AJAAncillaryBufferFormat(_x_) IS_KNOWN_AJAAncBufferFormat(_x_)
1600  #define AJAAncillaryBufferFormatToString AJAAncBufferFormatToString
1601 #endif // !defined(NTV2_DEPRECATE_16_3)
1602 
1603 #endif // AJA_ANCILLARYDATA_H
AJAAncDataLoc::OrdinalValue
uint64_t OrdinalValue(void) const
Definition: ancillarydata.h:430
AJAAncillaryData::GetGUMPHeaderByte1
static uint8_t GetGUMPHeaderByte1(void)
Definition: ancillarydata.h:1078
AJAAncillaryData::m_frameID
uint32_t m_frameID
ID of my originating frame, if known.
Definition: ancillarydata.h:1093
AJAAncDataStream_Size
@ AJAAncDataStream_Size
Definition: ancillarydata.h:109
AJAAncBufferFormat_FBVANC
@ AJAAncBufferFormat_FBVANC
Frame buffer VANC line.
Definition: ancillarydata.h:498
AJAAncDataStream_3
@ AJAAncDataStream_3
The ancillary data is associated with DS3 of the video stream (Link B).
Definition: ancillarydata.h:106
AJAAncillaryDataSpace
AJAAncDataSpace AJAAncillaryDataSpace
Definition: ancillarydata.h:1504
AJAAncDataLinkToString
const std::string & AJAAncDataLinkToString(const AJAAncDataLink inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1132
AJAAncillaryDataVideoStreamToString
const std::string & AJAAncillaryDataVideoStreamToString(const AJAAncillaryDataVideoStream inValue, const bool inCompact=true)
Definition: ancillarydata.h:1516
AJAAncDataLoc
Defines where the ancillary data can be found within a video stream.
Definition: ancillarydata.h:224
AJAAncDataLoc::IsDataLinkB
bool IsDataLinkB(void) const
Definition: ancillarydata.h:301
AJAAncDataChannel_Unknown
@ AJAAncDataChannel_Unknown
It is not known which channel of the video stream the ancillary data is associated with.
Definition: ancillarydata.h:133
AJAAncillaryData::m_userData
uint64_t m_userData
User data (for client use)
Definition: ancillarydata.h:1094
AJAAncillaryData::HasStreamInfo
virtual bool HasStreamInfo(void) const
Definition: ancillarydata.h:610
AJARTPAncPayloadHeader::SetAncPacketCount
virtual AJARTPAncPayloadHeader & SetAncPacketCount(const uint8_t inPktCount)
Sets my RTP Anc Packet Count value.
Definition: ancillarydata.h:1265
AJAAncDataLineNumber_Unknown
#define AJAAncDataLineNumber_Unknown
Packet line number is unknown.
Definition: ancillarydata.h:195
AJAAncDataType_Cea608_Vanc
@ AJAAncDataType_Cea608_Vanc
CEA608 SD Closed Captioning (SMPTE 334 VANC packet)
Definition: ancillarydata.h:51
AJAAncillaryData::ByteVector
std::vector< uint8_t > ByteVector
Definition: ancillarydata.h:1069
AJAAncillaryData::m_DID
uint8_t m_DID
Official SMPTE ancillary packet ID (w/o parity)
Definition: ancillarydata.h:1084
AJAAncillaryDataLink
AJAAncDataLink AJAAncillaryDataLink
Definition: ancillarydata.h:1506
AJAAncDataLoc::IsChromaChannel
bool IsChromaChannel(void) const
Definition: ancillarydata.h:307
AJARTPAncPacketHeader::SetYChannel
virtual AJARTPAncPacketHeader & SetYChannel(void)
Sets my "C" channel bit setting to 'false'.
Definition: ancillarydata.h:1408
AJAAncillaryData::ChecksumOK
virtual bool ChecksumOK(void) const
Compares the received 8-bit checksum with a newly calculated 8-bit checksum. Returns 'true' if they m...
Definition: ancillarydata.h:643
IS_VALID_AJAAncDataSpace
#define IS_VALID_AJAAncDataSpace(_x_)
Definition: ancillarydata.h:182
AJAAncDataType_Unknown
@ AJAAncDataType_Unknown
Includes data that is valid, but we don't recognize.
Definition: ancillarydata.h:46
AJAAncillaryDataType
AJAAncDataType AJAAncillaryDataType
Definition: ancillarydata.h:1507
AJARTPAncPacketHeader::SetCChannel
virtual AJARTPAncPacketHeader & SetCChannel(void)
Sets my "C" channel bit setting to 'true'.
Definition: ancillarydata.h:1402
types.h
Declares common types used in the ajabase library.
NULL
#define NULL
Definition: ntv2caption608types.h:19
IS_VALID_AJAAncDataLink
#define IS_VALID_AJAAncDataLink(_x_)
Definition: ancillarydata.h:88
NTV2Buffer
A generic user-space buffer object that has an address and a length. Used most often to share an arbi...
Definition: ntv2publicinterface.h:5967
AJAAncDataSpaceToString
const std::string & AJAAncDataSpaceToString(const AJAAncDataSpace inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1160
AJAAncDataLocToString
std::string AJAAncDataLocToString(const AJAAncDataLoc &inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1257
AJARTPAncPayloadHeader::GetPacketHeaderULWordForIndex
virtual uint32_t GetPacketHeaderULWordForIndex(const unsigned inIndex0) const
Definition: ancillarydata.h:1331
AJA_STATUS_SUCCESS
@ AJA_STATUS_SUCCESS
Definition: types.h:368
ToAJAAncPktDIDSID
#define ToAJAAncPktDIDSID(_d_, _s_)
Definition: ancillarydata.h:29
AJAAncData
AJAAncillaryData AJAAncData
Definition: ancillarydata.h:1098
AJAAncillaryData::ByteVectorIndex
ByteVector::size_type ByteVectorIndex
Definition: ancillarydata.h:1070
AJAAncDataChannel
AJAAncDataChannel
Identifies which component of a video stream in which the ancillary data is placed or found.
Definition: ancillarydata.h:128
AJAAncDataCoding_Unknown
@ AJAAncDataCoding_Unknown
It is not known which coding type the ancillary data is using.
Definition: ancillarydata.h:477
AJAAncDataLoc::IsValid
bool IsValid(void) const
Definition: ancillarydata.h:261
AJAAncillaryData::m_location
AJAAncDataLoc m_location
Location of the ancillary data in the video stream (Y or C, HANC or VANC, etc.)
Definition: ancillarydata.h:1087
AJAAncDataLoc::SetLineNumber
AJAAncDataLoc & SetLineNumber(const uint16_t inLineNum)
Sets my anc data line number value.
Definition: ancillarydata.h:392
AJAAncillaryDataVideoStream
AJAAncillaryDataChannel AJAAncillaryDataVideoStream
Definition: ancillarydata.h:1514
AncChannelSearch_C
@ AncChannelSearch_C
Only look in chroma samples.
Definition: ancillarydata.h:154
AJAAncDataSpace
AJAAncDataSpace
Identified the raster section of a video stream that contains the ancillary data. Deprecated in favor...
Definition: ancillarydata.h:174
AJAAncBufferFormat_Size
@ AJAAncBufferFormat_Size
Definition: ancillarydata.h:502
AJARTPAncPayloadHeader::SetPayloadType
virtual AJARTPAncPayloadHeader & SetPayloadType(const uint8_t inPayloadType)
Sets my Payload Type value.
Definition: ancillarydata.h:1251
AJAAncDataLink_B
@ AJAAncDataLink_B
The ancillary data is associated with Link B of the video stream.
Definition: ancillarydata.h:81
AJAAncillaryData::ByteVectorConstIter
ByteVector::const_iterator ByteVectorConstIter
Definition: ancillarydata.h:1071
AJAAncDataType_Smpte352
@ AJAAncDataType_Smpte352
SMPTE 352 "Payload ID".
Definition: ancillarydata.h:53
AJAAncDataType
AJAAncDataType
Identifies the ancillary data types that are known to this module.
Definition: ancillarydata.h:44
AJAAncillaryData::GeneratePayloadData
virtual AJAStatus GeneratePayloadData(void)
Generates the payload data from the "local" ancillary data.
Definition: ancillarydata.h:881
AJAAncDataType_Timecode_VITC
@ AJAAncDataType_Timecode_VITC
SMPTE 12-M Vertical Interval Timecode (aka "VITC")
Definition: ancillarydata.h:49
AJARTPAncPacketHeader
I represent the 4-byte header of an anc packet that's inside an RTP packet.
Definition: ancillarydata.h:1362
AJAAncDataTypeToString
const std::string & AJAAncDataTypeToString(const AJAAncDataType inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1289
AJARTPAncPayloadHeader::SetSyncSourceID
virtual AJARTPAncPayloadHeader & SetSyncSourceID(const uint32_t inSyncSrcID)
Sets my RTP Packet Sync Source ID value.
Definition: ancillarydata.h:1279
AJAAncillaryData::m_bufferFmt
AJAAncBufferFormat m_bufferFmt
My originating buffer format, if known.
Definition: ancillarydata.h:1092
AJAAncPacket
AJAAncillaryData AJAAncPacket
Definition: ancillarydata.h:1098
AJAAncDataLink_Unknown
@ AJAAncDataLink_Unknown
It is not known which link of the video stream the ancillary data is associated with.
Definition: ancillarydata.h:84
AJAAncDataLoc::Reset
AJAAncDataLoc & Reset(void)
Resets all of my location elements to an unknown, invalid state.
Definition: ancillarydata.h:289
AJAAncBufferFormat_Invalid
@ AJAAncBufferFormat_Invalid
Invalid.
Definition: ancillarydata.h:501
AJA_UNUSED
#define AJA_UNUSED(_x_)
Definition: types.h:411
AJAAncDataLoc::SetDataStream
AJAAncDataLoc & SetDataStream(const AJAAncDataStream inStream)
Sets my data link value to the given value (if valid).
Definition: ancillarydata.h:360
AJAAncDataLink_LeftEye
@ AJAAncDataLink_LeftEye
The ancillary data is associated with the Left Eye stereoscopic video stream.
Definition: ancillarydata.h:82
ajatypes.h
Declares the most fundamental data types used by NTV2. Since Windows NT was the first principal devel...
AJAAncDataCoding_Raw
@ AJAAncDataCoding_Raw
The ancillary data is in the form of a digitized waveform (e.g. CEA-608 captions, VITC,...
Definition: ancillarydata.h:476
AJARTPAncPayloadHeader::SetEndOfFieldOrFrame
virtual AJARTPAncPayloadHeader & SetEndOfFieldOrFrame(const bool inIsLast=true)
Sets my RTP Packet End-Of-Field or End-Of-Frame (Marker Bit) value.
Definition: ancillarydata.h:1300
AJARTPAncPacketHeader::SetDataStreamFlag
virtual AJARTPAncPacketHeader & SetDataStreamFlag(const bool inFlag)
Sets my data stream flag.
Definition: ancillarydata.h:1438
AJAAncDataHorizOffset_Anywhere
#define AJAAncDataHorizOffset_Anywhere
Unspecified – Packet placed/found in any legal area of raster line.
Definition: ancillarydata.h:209
AncChannelSearchSelectToString
std::string AncChannelSearchSelectToString(const AncChannelSearchSelect inSelect, const bool inCompact=true)
Definition: ancillarydata.cpp:1533
AJAAncDataLoc::IsDataLinkA
bool IsDataLinkA(void) const
Definition: ancillarydata.h:300
AJAAncDataLoc::IsLumaChannel
bool IsLumaChannel(void) const
Definition: ancillarydata.h:306
AJAAncDataType_Size
@ AJAAncDataType_Size
Definition: ancillarydata.h:60
AJAAncDataLoc::GetHorizontalOffset
uint16_t GetHorizontalOffset(void) const
Definition: ancillarydata.h:338
AJAStatus
AJAStatus
Definition: types.h:365
AJARTPAncPayloadHeader::SetTimeStamp
virtual AJARTPAncPayloadHeader & SetTimeStamp(const uint32_t inTimeStamp)
Sets my RTP Packet Time Stamp value.
Definition: ancillarydata.h:1272
AJAAncDataLoc::IsVanc
bool IsVanc(void) const
Definition: ancillarydata.h:323
AJAAncillaryData::SetDIDSID
virtual AJAStatus SetDIDSID(const AJAAncDIDSIDPair &inDIDSID)
Sets both my Data ID (DID) and Secondary Data ID (SID).
Definition: ancillarydata.h:694
AJARTPAncPacketHeader::SetLineNumber
virtual AJARTPAncPacketHeader & SetLineNumber(const uint16_t inLineNum)
Sets my line number value to least-significant 11 bits of the given value.
Definition: ancillarydata.h:1415
AJAAncillaryData::Print
virtual std::ostream & Print(std::ostream &inOutStream, const bool inDetailed=false) const
Streams a human-readable representation of me to the given output stream.
Definition: ancillarydata.cpp:1306
AJARTPAncPayloadHeader
I represent the header of a SMPTE 2110 compliant RTP Anc network packet.
Definition: ancillarydata.h:1113
AJAAncBufferFormatToString
const std::string & AJAAncBufferFormatToString(const AJAAncBufferFormat inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1279
AJARTPAncPayloadHeader::SetCCBits
virtual AJARTPAncPayloadHeader & SetCCBits(const uint8_t inCCBits)
Sets my RTP Packet CC Bits value.
Definition: ancillarydata.h:1293
ULWord
uint32_t ULWord
Definition: ajatypes.h:246
AJAAncDataHorizOffset_AnyVanc
#define AJAAncDataHorizOffset_AnyVanc
VANC – Packet placed/found in any legal area of raster line after SAV, but before EAV.
Definition: ancillarydata.h:211
AJAAncDataSpace_HANC
@ AJAAncDataSpace_HANC
Ancillary data found between EAV and SAV (.
Definition: ancillarydata.h:177
AJAAncillaryData
I am the principal class that stores a single SMPTE-291 SDI ancillary data packet OR the digitized co...
Definition: ancillarydata.h:550
AJAAncDataChannel_Y
@ AJAAncDataChannel_Y
The ancillary data is associated with the luminance (Y) channel of the video stream.
Definition: ancillarydata.h:132
AJARTPAncPayloadHeader::SetPayloadLength
virtual AJARTPAncPayloadHeader & SetPayloadLength(const uint16_t inByteCount)
Sets my RTP Packet Length value.
Definition: ancillarydata.h:1258
AJAAncillaryData::GotValidReceiveData
virtual bool GotValidReceiveData(void) const
Definition: ancillarydata.h:874
AJAAncillaryData::GetPayloadData
virtual const uint8_t * GetPayloadData(void) const
Definition: ancillarydata.h:788
UWordSequence
std::vector< uint16_t > UWordSequence
An ordered sequence of UWord (uint16_t) values.
Definition: ntv2publicinterface.h:41
AJARTPAncPayloadHeader::SetField2
virtual AJARTPAncPayloadHeader & SetField2(void)
Sets my Field Signal value to "Field 2".
Definition: ancillarydata.h:1238
AJAAncDataLoc::SetDataSpace
AJAAncDataLoc & SetDataSpace(const AJAAncDataSpace inSpace)
Sets my data space value to the given value (if valid).
Definition: ancillarydata.h:377
AJAAncHorizOffsetToString
std::string AJAAncHorizOffsetToString(const uint16_t inValue)
Definition: ancillarydata.cpp:1186
AJAAncDIDSIDPair
std::pair< uint8_t, uint8_t > AJAAncDIDSIDPair
Definition: ancillarydata.h:27
AJAAncillaryData::m_coding
AJAAncDataCoding m_coding
Analog or digital data.
Definition: ancillarydata.h:1088
AJAAncDataStream
AJAAncDataStream
Identifies which data stream the ancillary data is associated with.
Definition: ancillarydata.h:102
AJAAncDataLocPtr
AJAAncDataLoc * AJAAncDataLocPtr
Definition: ancillarydata.h:451
AJAAncDataType_Smpte2016_3
@ AJAAncDataType_Smpte2016_3
SMPTE 2016-3 VANC Aspect Format Description (AFD) metadata.
Definition: ancillarydata.h:47
AJAAncillaryData::SetBufferFormat
virtual AJAAncillaryData & SetBufferFormat(const AJAAncBufferFormat inFmt)
Sets my originating buffer format.
Definition: ancillarydata.h:768
AJAAncBufferFormat_SDI
@ AJAAncBufferFormat_SDI
SDI ("GUMP").
Definition: ancillarydata.h:499
AJAAncDataLoc
struct AJAAncDataLoc AJAAncDataLoc
Defines where the ancillary data can be found within a video stream.
ntv2version.h
Defines for the NTV2 SDK version number, used by ajantv2/includes/ntv2enums.h. See the ajantv2/includ...
AJAAncillaryDataChannel
AJAAncDataChannel AJAAncillaryDataChannel
Definition: ancillarydata.h:1512
AJARTPAncPayloadHeader::SetSequenceNumber
virtual AJARTPAncPayloadHeader & SetSequenceNumber(const uint32_t inSeqNumber)
Sets my RTP Packet Sequence Number value.
Definition: ancillarydata.h:1286
AJAAncDataCoding_Size
@ AJAAncDataCoding_Size
Definition: ancillarydata.h:478
IS_VALID_AJAAncDataChannel
#define IS_VALID_AJAAncDataChannel(_x_)
Definition: ancillarydata.h:137
AJAAncDataChannel_Size
@ AJAAncDataChannel_Size
Definition: ancillarydata.h:134
AJARTPAncPayloadHeader::SetProgressive
virtual AJARTPAncPayloadHeader & SetProgressive(void)
Sets my Field Signal value to "Progressive".
Definition: ancillarydata.h:1244
AJAAncillaryData::m_rcvDataValid
bool m_rcvDataValid
This is set true (or not) by ParsePayloadData()
Definition: ancillarydata.h:1090
IS_VALID_AJAAncDataStream
#define IS_VALID_AJAAncDataStream(_x_)
Definition: ancillarydata.h:112
AJAAncDataLoc::SetHorizontalOffset
AJAAncDataLoc & SetHorizontalOffset(uint16_t inHOffset)
Specifies the horizontal packet position in the raster.
Definition: ancillarydata.h:407
AJAAncDataHorizOffset_AnyHanc
#define AJAAncDataHorizOffset_AnyHanc
HANC – Packet placed/found in any legal area of raster line after EAV.
Definition: ancillarydata.h:210
AJAAncDataLink
AJAAncDataLink
Identifies which link of a video stream the ancillary data is associated with.
Definition: ancillarydata.h:78
AJAAncDataType_HDR_SDR
@ AJAAncDataType_HDR_SDR
Definition: ancillarydata.h:57
AJAAncDataSpace_Size
@ AJAAncDataSpace_Size
Definition: ancillarydata.h:179
AJAAncillaryData::AppendPayload
virtual AJAStatus AppendPayload(const AJAAncillaryData *pInAncData)
Definition: ancillarydata.h:846
AJAAncillaryData::m_SID
uint8_t m_SID
Official SMPTE secondary ID (or DBN - w/o parity)
Definition: ancillarydata.h:1085
AJAAncillaryData::SetFrameID
virtual AJAAncillaryData & SetFrameID(const uint32_t inFrameID)
Sets my originating frame identifier.
Definition: ancillarydata.h:761
AJAAncPktDIDSID
uint16_t AJAAncPktDIDSID
Packet DID/SID pair: DID (MS 8 bits) and SID (LS 8 bits)
Definition: ancillarydata.h:28
AJAAncillaryDataCoding
AJAAncDataCoding AJAAncillaryDataCoding
Definition: ancillarydata.h:1510
AJAAncDataType_FrameStatusInfo5251
@ AJAAncDataType_FrameStatusInfo5251
Frame Status Information, such as Active Frame flag.
Definition: ancillarydata.h:56
AJAAncDataStreamToString
const std::string & AJAAncDataStreamToString(const AJAAncDataStream inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1141
AJAAncDataType_Smpte2051
@ AJAAncDataType_Smpte2051
SMPTE 2051 "Two Frame Marker".
Definition: ancillarydata.h:54
AJA_STATUS_NULL
@ AJA_STATUS_NULL
Definition: types.h:374
NTV2_DEPRECATED_f
#define NTV2_DEPRECATED_f(__f__)
Definition: ajatypes.h:646
AJAAncDataStream_1
@ AJAAncDataStream_1
The ancillary data is associated with DS1 of the video stream (Link A).
Definition: ancillarydata.h:104
AJAAncillaryData::m_payload
ByteVector m_payload
My payload data (DC = size)
Definition: ancillarydata.h:1089
AJAAncDataChannel_C
@ AJAAncDataChannel_C
The ancillary data is associated with the chrominance (C) channel of the video stream.
Definition: ancillarydata.h:130
AJAAncillaryBufferFormat
AJAAncBufferFormat AJAAncillaryBufferFormat
Definition: ancillarydata.h:1511
IS_HANC_AJAAncDataSpace
#define IS_HANC_AJAAncDataSpace(_x_)
Definition: ancillarydata.h:183
AJARTPAncPayloadHeader::SetFieldSignal
virtual AJARTPAncPayloadHeader & SetFieldSignal(const uint8_t inFieldSignal)
Sets my Field Signal value from the given 8-bit value.
Definition: ancillarydata.h:1317
IS_VANC_AJAAncDataSpace
#define IS_VANC_AJAAncDataSpace(_x_)
Definition: ancillarydata.h:184
ULWordSequence
std::vector< uint32_t > ULWordSequence
An ordered sequence of ULWord (uint32_t) values.
Definition: ntv2publicinterface.h:45
AJAAncDataType_Cea708
@ AJAAncDataType_Cea708
CEA708 (SMPTE 334) HD Closed Captioning.
Definition: ancillarydata.h:50
AJAExport
#define AJAExport
Definition: export.h:33
AJAAncDataCodingToString
const std::string & AJAAncDataCodingToString(const AJAAncDataCoding inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1270
AncChannelSearchSelect
AncChannelSearchSelect
Specifies which channel of a video stream in which to look for Anc data.
Definition: ancillarydata.h:151
AJAAncDataStream_4
@ AJAAncDataStream_4
The ancillary data is associated with DS4 of the video stream (Link B).
Definition: ancillarydata.h:107
AJAAncDataLoc::SetDataLink
AJAAncDataLoc & SetDataLink(const AJAAncDataLink inLink)
Sets my data link value to the given value (if valid).
Definition: ancillarydata.h:353
AJAAncData_AnalogSID
const uint8_t AJAAncData_AnalogSID
Definition: ancillarydata.h:25
AJAAncDataChannelToString
const std::string & AJAAncDataChannelToString(const AJAAncDataChannel inValue, const bool inCompact=true)
Definition: ancillarydata.cpp:1151
AncChannelSearch_Invalid
@ AncChannelSearch_Invalid
Invalid.
Definition: ancillarydata.h:156
AJAAncDataStream_2
@ AJAAncDataStream_2
The ancillary data is associated with DS2 of the video stream (Link A).
Definition: ancillarydata.h:105
AJAAncDataLink_RightEye
@ AJAAncDataLink_RightEye
The ancillary data is associated with the Right Eye stereoscopic video stream.
Definition: ancillarydata.h:83
AJAAncDataType_FrameStatusInfo524D
@ AJAAncDataType_FrameStatusInfo524D
Frame Status Information, such as Active Frame flag.
Definition: ancillarydata.h:55
AJAAncDataCoding_Digital
@ AJAAncDataCoding_Digital
The ancillary data is in the form of a SMPTE-291 Ancillary Packet.
Definition: ancillarydata.h:475
AJARTPAncPayloadHeader::SetField1
virtual AJARTPAncPayloadHeader & SetField1(void)
Sets my Field Signal value to "Field 1".
Definition: ancillarydata.h:1232
AJAAncDataType_HDR_HLG
@ AJAAncDataType_HDR_HLG
Definition: ancillarydata.h:59
AJAAncDataCoding
AJAAncDataCoding
Identifies the ancillary data coding type: digital or non-digital (analog/raw).
Definition: ancillarydata.h:473
AJAAncBufferFormat
AJAAncBufferFormat
Identifies the type of anc buffer the packet originated from: GUMP, RTP, VANC, or unknown.
Definition: ancillarydata.h:495
AJAAncDataHorizOffset_Unknown
#define AJAAncDataHorizOffset_Unknown
Unknown.
Definition: ancillarydata.h:208
AJAAncBufferFormat_RTP
@ AJAAncBufferFormat_RTP
RTP/IP.
Definition: ancillarydata.h:500
IsRaw
bool IsRaw(const NTV2FrameBufferFormat format)
Definition: ntv2utils.cpp:5478
AJAAncDataLoc::AJAAncDataLoc
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)
Definition: ancillarydata.h:228
AJAAncDataLoc::SetDataVideoStream
AJAAncDataLoc & SetDataVideoStream(const AJAAncDataChannel inChannel)
Definition: ancillarydata.h:369
ntv2publicinterface.h
Declares enums and structs used by all platform drivers and the SDK.
AJAAncDataLoc::SetDataChannel
AJAAncDataLoc & SetDataChannel(const AJAAncDataChannel inChannel)
Sets my data video stream value to the given value (if valid).
Definition: ancillarydata.h:367
AJAAncData_AnalogDID
const uint8_t AJAAncData_AnalogDID
Definition: ancillarydata.h:24
AJAAncDataSpace_VANC
@ AJAAncDataSpace_VANC
Ancillary data found between SAV and EAV (.
Definition: ancillarydata.h:176
AJAAncDataStream_Unknown
@ AJAAncDataStream_Unknown
It is not known which data stream the ancillary data is associated with.
Definition: ancillarydata.h:108
AJAAncillaryData::m_ancType
AJAAncDataType m_ancType
One of a known set of ancillary data types (or "Custom" if not identified)
Definition: ancillarydata.h:1091
AJARTPAncPacketHeader::Print
virtual std::ostream & Print(std::ostream &inOutStream) const
Streams a human-readable represetation of my current state to the given output stream.
Definition: ancillarydata.cpp:2244
AJAAncDataLink_Size
@ AJAAncDataLink_Size
Definition: ancillarydata.h:85
AJAAncBufferFormat_Unknown
@ AJAAncBufferFormat_Unknown
Unknown or "don't care".
Definition: ancillarydata.h:497
operator<<
std::ostream & operator<<(std::ostream &inOutStream, const AJAAncDIDSIDPair &inData)
Writes a human-readable rendition of the given AJAAncDIDSIDPair into the given output stream.
AJAAncillaryDataLocationPtr
AJAAncillaryDataLocation * AJAAncillaryDataLocationPtr
Definition: ancillarydata.h:1509
AJAAncDataSpace_Unknown
@ AJAAncDataSpace_Unknown
It's unknown which raster section contains the ancillary data (.
Definition: ancillarydata.h:178
AJAAncDataType_Cea608_Line21
@ AJAAncDataType_Cea608_Line21
CEA608 SD Closed Captioning ("Line 21" waveform)
Definition: ancillarydata.h:52
AJAAncillaryDIDSIDPair
std::pair< uint8_t, uint8_t > AJAAncillaryDIDSIDPair
A DID/SID pair, typically used as an indexing key.
Definition: ancillarydata.h:27
AJARTPAncPacketHeader::SetHorizOffset
virtual AJARTPAncPacketHeader & SetHorizOffset(const uint16_t inHOffset)
Sets my horizontal offset value to least-significant 12 bits of the given value.
Definition: ancillarydata.h:1422
AJAAncillaryData::GetGUMPHeaderByte3
virtual uint8_t GetGUMPHeaderByte3(void) const
Definition: ancillarydata.h:1080
AJAAncDataLoc::IsHanc
bool IsHanc(void) const
Definition: ancillarydata.h:324
AJAAncillaryDataStream
enum AJAAncDataStream AJAAncillaryDataStream
Definition: ancillarydata.h:1505
AJAAncDataLink_A
@ AJAAncDataLink_A
The ancillary data is associated with Link A of the video stream.
Definition: ancillarydata.h:80
AJAAncDataChannel_Both
@ AJAAncDataChannel_Both
SD ONLY – The ancillary data is associated with both the chroma and luma channels.
Definition: ancillarydata.h:131
AJARTPAncPacketHeader::SetStreamNumber
virtual AJARTPAncPacketHeader & SetStreamNumber(const uint8_t inStreamNum)
Sets my stream number value to least-significant 7 bits of the given value.
Definition: ancillarydata.h:1430
AJAAncillaryData::U16Packets
std::vector< U16Packet > U16Packets
An ordered sequence of zero or more U16Packet values.
Definition: ancillarydata.h:1020
AJAAncDataType_Timecode_ATC
@ AJAAncDataType_Timecode_ATC
SMPTE 12-M Ancillary Timecode (formerly known as "RP-188")
Definition: ancillarydata.h:48
AJAAncillaryData::U16Packet
UWordSequence U16Packet
An ordered sequence of 10-bit packet words stored in uint16_t values.
Definition: ancillarydata.h:1019
AJARTPAncPayloadHeader::Print
virtual std::ostream & Print(std::ostream &inOutStream) const
Writes a human-readable dump of my current state into a given output stream.
Definition: ancillarydata.cpp:2094
AJAAncillaryData::m_checksum
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...
Definition: ancillarydata.h:1086
AncChannelSearch_Both
@ AncChannelSearch_Both
Look both luma and chroma samples (SD only)
Definition: ancillarydata.h:155
AJAAncDataType_HDR_HDR10
@ AJAAncDataType_HDR_HDR10
Definition: ancillarydata.h:58
AJAAncLineNumberToString
std::string AJAAncLineNumberToString(const uint16_t inValue)
Definition: ancillarydata.cpp:1169
AJAAncillaryDataLocation
AJAAncDataLoc AJAAncillaryDataLocation
Definition: ancillarydata.h:450
AJAAncDataLoc::GetDataSpace
AJAAncDataSpace GetDataSpace(void) const
Definition: ancillarydata.h:315
AncChannelSearch_Y
@ AncChannelSearch_Y
Only look in luma samples.
Definition: ancillarydata.h:153