AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
ntv2smpteancdata.h
Go to the documentation of this file.
1 
7 #ifndef __NTV2_SMPTEANCDATA_
8 #define __NTV2_SMPTEANCDATA_
9 
10 #include "ntv2utils.h"
11 #include "ntv2formatdescriptor.h"
12 #include <vector>
13 #include <iostream>
14 #ifdef MSWindows
15  #include "windows.h"
16 #endif
17 
18 
19 // Some popular ancillary packet DID/SDID's (sans parity)
20 const UByte NTV2_SMPTEAncRP334DID = 0x61; // SMPTE 334 (Closed Captioning)
22 const UWord NTV2_WildCardDID = 0x2FF; // Wild Card - Match any Data ID
23 const UWord NTV2_WildCardSDID = 0x2FF; // Wild Card - Match any Secondary Data ID
24 
25 
26 // SMPTE 291 Ancillary Packet data structures
27 typedef struct NTV2_SMPTEAncHeader
28 {
29  UWord ancDataFlag0; // 0x000
30  UWord ancDataFlag1; // 0x3FF
31  UWord ancDataFlag2; // 0x3FF
32  UWord ancDataID; // DID
33  UWord ancSecDID; // SDID (or Data Block Number)
35 
42  inline NTV2_SMPTEAncHeader (const UWord inDID = 0, const UWord inSDID = 0, const UWord inDataCount = 0)
43  : ancDataFlag0 (0x000),
44  ancDataFlag1 (0x3FF),
45  ancDataFlag2 (0x3FF),
46  ancDataID (inDID),
47  ancSecDID (inSDID),
48  ancDataCount (inDataCount)
49  {
50  }
51 
53 
54 
55 const UWord kAncHeaderSize = sizeof (NTV2_SMPTEAncHeader) / sizeof (UWord);
56 
57 
58 typedef struct NTV2_SMPTEAncFooter
59 {
60  UWord ancChecksum; // anc packet checksum
61 
63 
64 
65 const UWord kAncFooterSize = sizeof (NTV2_SMPTEAncFooter) / sizeof (UWord);
66 const ULWord kMaxAncPacketSize = kAncHeaderSize + 255 + kAncFooterSize; // max TOTAL anc packet size (header + payload + footer)
67 
68 
69 // Use this enum to specify which channel (luma or chroma) to look for ANC in...
71 {
75 
77 
78 
79 std::string NTV2SMPTEAncChannelSelectToString (const NTV2_SMPTEAncChannelSelect inChanSelect, const bool inCompactForm = true);
80 
81 
82 typedef const UByte * UByteConstPtr;
83 
88 
92 typedef std::vector <UWordVANCPacket> UWordVANCPacketList;
93 typedef UWordVANCPacketList::const_iterator UWordVANCPacketListConstIter;
94 typedef UWordVANCPacketList::iterator UWordVANCPacketListIter;
95 
96 AJAExport std::ostream & operator << (std::ostream & inOutStream, const UWordVANCPacketList & inData);
97 
98 
100 {
101  // Class Methods
102  public:
103  static UWord AddEvenParity (UByte dataByte);
104 
117  static bool UnpackLine_8BitYUVtoUWordSequence (const void * pInYUV8Line, UWordSequence & out16BitYUVLine, const ULWord inNumPixels);
118 
142  static bool FindAnc (const UWord inAncDID,
143  const UWord inAncSDID,
144  const NTV2Buffer & inFrameBuffer,
145  const NTV2FormatDescriptor & inFormatDesc,
146  const NTV2_SMPTEAncChannelSelect inAncChannel,
147  UWordSequence & outWords,
148  bool & outHasParityErrors,
149  const UWord inLineIncrement,
150  UWord & inOutLineStart,
151  UWord & inOutPixelStart);
152 
181  static bool FindAnc (const UWord inAncDID,
182  const UWord inAncSDID,
183  const ULWord * pInFrameBuffer,
184  const NTV2_SMPTEAncChannelSelect inAncChannel,
185  const NTV2VideoFormat inVideoFormat,
186  const NTV2FrameBufferFormat inFBFormat,
187  UWord * pOutBuff,
188  ULWord & outWordCount,
189  const ULWord inWordCountMax,
190  bool & outHasParityErrors,
191  const UWord inLineIncrement,
192  UWord & inOutLineStart,
193  UWord & inOutPixelStart);
194 
213  static bool FindAnc (const UWord inAncDID,
214  const UWord inAncSDID,
215  const ULWord * pInFrameBuffer,
216  const NTV2_SMPTEAncChannelSelect inAncChannel,
217  const NTV2VideoFormat inVideoFormat,
218  const NTV2FrameBufferFormat inFBFormat,
219  UWord * pOutBuff,
220  ULWord & outWordCount,
221  const ULWord inWordCountMax,
222  bool & outHasParityErrors);
223 
239  static bool FindAnc (const UWord inAncDID,
240  const UWord inAncSDID,
241  const ULWord * pInFrameBuffer,
242  const NTV2_SMPTEAncChannelSelect inAncChannel,
243  const NTV2VideoFormat inVideoFormat,
244  const NTV2FrameBufferFormat inFBFormat,
245  UWord * pOutBuff,
246  ULWord & outWordCount,
247  const ULWord inWordCountMax);
248 
249  static bool MakeAncHeader (NTV2_SMPTEAncHeaderPtr pHdr, UByte ancDID, UByte ancSDID, UByte ancDC);
250  static bool SetAncHeaderDataCount (NTV2_SMPTEAncHeaderPtr pHdr, UByte ancDC);
251 
252  static bool SetAncFooterChecksum (NTV2_SMPTEAncFooterPtr pFtr, UWord checksum);
253  static bool CalculateAncChecksum (NTV2_SMPTEAncHeaderPtr pHdr, UByte dataCount = 0);
254 
255  static bool ExtractCompressedAnc (const void * pFrameBuffer,
256  void * pAncBuff,
257  ULWord ancBufMax,
258  ULWord & inOutFoundSize,
259  NTV2VideoFormat videoFormat,
260  NTV2FrameBufferFormat fbFormat);
261 
262  static bool EmbedCompressedAnc (const void * pAncBuff,
263  void * pFrameBuffer,
264  const ULWord ancBufSize,
265  const NTV2VideoFormat videoFormat,
266  const NTV2FrameBufferFormat fbFormat);
267 
286  static bool InsertAnc (const UWord * pInAncBuff,
287  const size_t inAncWordCount,
288  const ULWord inLineOffset,
289  const ULWord inWordOffset,
290  ULWord * pFrameBuffer,
291  const NTV2VideoFormat inVideoFormat,
292  const NTV2FrameBufferFormat inFBFormat);
293 
312  static bool InsertAncAtSmpteLine (const UWord * pInAncBuff,
313  const ULWord inAncWordCount,
314  const ULWord inSMPTELineNum,
315  const ULWord inWordOffset,
316  ULWord * pFrameBuffer,
317  const NTV2VideoFormat inVideoFormat,
318  const NTV2FrameBufferFormat inFBFormat);
319 
320  static bool FirstVancLineAndChannel (const NTV2FormatDescriptor & inFD,
321  const NTV2SmpteLineNumber & inLN,
322  NTV2_SMPTEAncChannelSelect & inOutChannel,
323  ULWord & inOutSMPTELine,
324  ULWord & outLineOffset);
325 
326  static bool NextVancLineAndChannel (const NTV2FormatDescriptor & inFD,
327  const NTV2SmpteLineNumber & inLN,
328  NTV2_SMPTEAncChannelSelect & inOutChannel,
329  ULWord & inOutSMPTELine,
330  ULWord & outLineOffset);
331 
332  static ULWord GetVancLineOffset (const NTV2FormatDescriptor & inFormatDesc,
333  const NTV2SmpteLineNumber & inSmpteLineNumbers,
334  const ULWord inSmpteLine);
335 
336  static bool CompressAncPacket (const UWord * packetBuffer,
337  UByte * targetBuffer,
338  ULWord maxTargetSize,
339  ULWord & outCompPacketSize,
341  UWord smpteLine);
342 
343  static void DecompressAncPacket (const UByte * pInCompBuffer,
344  UWord * pOutUnpackedBuffer,
345  ULWord & outCompPacketSize,
346  bool & outIsValidLoc,
347  NTV2_SMPTEAncChannelSelect & outChan,
348  ULWord & outSmpteLine);
349 
350  static bool FindCompressedAnc (UByte ancDID,
351  UByte ancSDID,
352  const UByte * pSrcAncBuf,
353  const ULWord srcAncSize,
354  UByteConstPtr & outBuffPtr,
355  ULWord & outBufSize);
356 
374  static bool GetAncPacketsFromVANCLine (const UWordSequence & inYUV16Line,
375  const NTV2_SMPTEAncChannelSelect inChanSelect,
376  UWordVANCPacketList & outRawPackets,
377  UWordSequence & outWordOffsets);
384  static ULWord GetCaptionAncLineNumber (const NTV2VideoFormat inVideoFormat, const bool inIsField1 = true);
385 }; // CNTV2SMPTEAncData
386 
387 #endif // __NTV2_SMPTEANCDATA_
NTV2SMPTEAncChannelSelectToString
std::string NTV2SMPTEAncChannelSelectToString(const NTV2_SMPTEAncChannelSelect inChanSelect, const bool inCompactForm=true)
NTV2_SMPTEAncHeader
Definition: ntv2smpteancdata.h:27
UByteConstPtr
const typedef UByte * UByteConstPtr
Definition: ntv2smpteancdata.h:82
NTV2_SMPTEAncChannelSelect
NTV2_SMPTEAncChannelSelect
Definition: ntv2smpteancdata.h:70
CNTV2SMPTEAncData
Definition: ntv2smpteancdata.h:99
kNTV2SMPTEAncChannel_Y
@ kNTV2SMPTEAncChannel_Y
Definition: ntv2smpteancdata.h:72
NTV2FormatDescriptor
Describes a video frame for a given video standard or format and pixel format, including the total nu...
Definition: ntv2formatdescriptor.h:41
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
NTV2_SMPTEAncHeader::ancDataID
UWord ancDataID
Definition: ntv2smpteancdata.h:32
NTV2_SMPTEAncFooter
struct NTV2_SMPTEAncFooter NTV2_SMPTEAncFooter
NTV2_SMPTEAncHeader::ancDataFlag2
UWord ancDataFlag2
Definition: ntv2smpteancdata.h:31
NTV2FrameBufferFormat
NTV2FrameBufferFormat
Identifies a particular video frame buffer format. See Device Frame Buffer Formats for details.
Definition: ntv2enums.h:207
kNTV2SMPTEAncChannel_Both
@ kNTV2SMPTEAncChannel_Both
Only look in chroma samples.
Definition: ntv2smpteancdata.h:74
NTV2_WildCardDID
const UWord NTV2_WildCardDID
Definition: ntv2smpteancdata.h:22
ULWord
uint32_t ULWord
Definition: ajatypes.h:246
UWordSequence
std::vector< uint16_t > UWordSequence
An ordered sequence of UWord (uint16_t) values.
Definition: ntv2publicinterface.h:41
UWordVANCPacketList
std::vector< UWordVANCPacket > UWordVANCPacketList
An ordered sequence of zero or more UWordVANCPacket elements.
Definition: ntv2smpteancdata.h:92
NTV2_SMPTEAncHeader::ancDataFlag0
UWord ancDataFlag0
Definition: ntv2smpteancdata.h:29
UWord
uint16_t UWord
Definition: ajatypes.h:244
ntv2utils.h
Declares numerous NTV2 utility functions.
UWordVANCPacketListConstIter
UWordVANCPacketList::const_iterator UWordVANCPacketListConstIter
Definition: ntv2smpteancdata.h:93
UWordVANCPacketListIter
UWordVANCPacketList::iterator UWordVANCPacketListIter
Definition: ntv2smpteancdata.h:94
ntv2formatdescriptor.h
Declares the NTV2FormatDescriptor class.
UWordVANCPacket
UWordSequence UWordVANCPacket
A UWordVANCPacket is identical to a UWordSequence.
Definition: ntv2smpteancdata.h:87
NTV2_SMPTEAncHeader::NTV2_SMPTEAncHeader
NTV2_SMPTEAncHeader(const UWord inDID=0, const UWord inSDID=0, const UWord inDataCount=0)
Constructs me from the given DID, SDID and DC values.
Definition: ntv2smpteancdata.h:42
NTV2SmpteLineNumber
Used to describe Start of Active Video (SAV) location and field dominance for a given NTV2Standard....
Definition: ntv2utils.h:869
UByte
uint8_t UByte
Definition: ajatypes.h:241
NTV2_SMPTEAncRP334DID
const UByte NTV2_SMPTEAncRP334DID
Definition: ntv2smpteancdata.h:20
AJAExport
#define AJAExport
Definition: export.h:33
NTV2VideoFormat
enum _NTV2VideoFormat NTV2VideoFormat
Identifies a particular video format.
kNTV2SMPTEAncChannel_C
@ kNTV2SMPTEAncChannel_C
Only look in luma samples.
Definition: ntv2smpteancdata.h:73
NTV2_SMPTEAncRP334SDID
const UByte NTV2_SMPTEAncRP334SDID
Definition: ntv2smpteancdata.h:21
NTV2_SMPTEAncFooterPtr
struct NTV2_SMPTEAncFooter * NTV2_SMPTEAncFooterPtr
NTV2_SMPTEAncHeader::ancSecDID
UWord ancSecDID
Definition: ntv2smpteancdata.h:33
NTV2_SMPTEAncHeader::ancDataFlag1
UWord ancDataFlag1
Definition: ntv2smpteancdata.h:30
kAncFooterSize
const UWord kAncFooterSize
Definition: ntv2smpteancdata.h:65
kMaxAncPacketSize
const ULWord kMaxAncPacketSize
Definition: ntv2smpteancdata.h:66
NTV2_SMPTEAncHeaderPtr
struct NTV2_SMPTEAncHeader * NTV2_SMPTEAncHeaderPtr
operator<<
std::ostream & operator<<(std::ostream &inOutStream, const UWordVANCPacketList &inData)
NTV2_WildCardSDID
const UWord NTV2_WildCardSDID
Definition: ntv2smpteancdata.h:23
kAncHeaderSize
const UWord kAncHeaderSize
Definition: ntv2smpteancdata.h:55
NTV2_SMPTEAncHeader
struct NTV2_SMPTEAncHeader NTV2_SMPTEAncHeader
NTV2_SMPTEAncHeader::ancDataCount
UWord ancDataCount
Definition: ntv2smpteancdata.h:34