AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
ancillarydata_timecode_vitc.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_ANCILLARYDATA_TIMECODE_VITC_H
9 #define AJA_ANCILLARYDATA_TIMECODE_VITC_H
10 
11 #include "ancillarydatafactory.h"
12 #include "ancillarydata.h"
13 #include "ancillarydata_timecode.h"
14 
15 
16 // comment this out to use older "NTV2" VITC Encode algorithm
17 // leave defined to use "D-VITC" parameters as defined in SMPTE-266M
18 #define USE_SMPTE_266M
19 
20 
21 // VITC ("Analog") Packet IDs
24 
25 const uint32_t AJAAncillaryData_VITC_PayloadSize = 720; // note: assumes we're only using this for SD (720 pixels/line)
26 
27 
29 {
32  AJAAncillaryData_Timecode_VITC_Type_FilmData = 2, // RP-201 Film Data (CRC == 0xFF)
33  AJAAncillaryData_Timecode_VITC_Type_ProdData = 3 // RP-201 Production Data (CRC == 0x0F)
34 };
35 
36 
37 
42 {
43 public:
48 
50 
51  virtual void Clear (void);
52 
59 
60  virtual inline AJAAncillaryData_Timecode_VITC * Clone (void) const {return new AJAAncillaryData_Timecode_VITC (this);}
61 
66  virtual AJAStatus ParsePayloadData (void);
67 
73  virtual AJAStatus GeneratePayloadData (void);
74 
75  virtual inline AJAAncillaryData_Timecode_VITC_Type GetVITCDataType (void) const {return m_vitcType;}
76 
82  virtual AJAStatus SetVITCDataType (const AJAAncillaryData_Timecode_VITC_Type inType);
83 
90  virtual std::ostream & Print (std::ostream & inOutStream, const bool inDetailed = false) const;
91 
92 
98 
103  static std::string VITCTypeToString (const AJAAncillaryData_Timecode_VITC_Type inType);
104 
105 
106 protected:
107  void Init (void); // NOT virtual - called by constructors
108 
109  // Encode methods ported/stolen from ntv2vitc.cpp
110  bool DecodeLine (const uint8_t * pInLine);
111  AJAStatus EncodeLine (uint8_t * pOutLine) const;
112 
113 #ifdef USE_SMPTE_266M
114 #else
115  void DoVITCBitPair(uint8_t *pLine, uint32_t& pixelIndex, bool bPrevBit, bool bBit0, bool bBit1, bool bDropBit);
116 #endif
117 
118  // Note: if you make a change to the local member data, be sure to ALSO make the appropriate
119  // changes in the Init() and operator= methods!
121 
122 }; // AJAAncillaryData_Timecode_VITC
123 
124 #endif // AJA_ANCILLARYDATA_TIMECODE_VITC_H
AJAAncillaryData_Timecode
This is the base class for the AJAAncillaryData_Timecode_ATC and AJAAncillaryData_Timecode_VITC class...
Definition: ancillarydata_timecode.h:36
AJAAncillaryData_Timecode_VITC_Type_Unknown
@ AJAAncillaryData_Timecode_VITC_Type_Unknown
Definition: ancillarydata_timecode_vitc.h:30
ancillarydata.h
Declares the AJAAncillaryData class.
AJAAncillaryData_Timecode_VITC_Type_ProdData
@ AJAAncillaryData_Timecode_VITC_Type_ProdData
Definition: ancillarydata_timecode_vitc.h:33
AJAAncillaryData_Timecode_VITC::~AJAAncillaryData_Timecode_VITC
virtual ~AJAAncillaryData_Timecode_VITC()
Definition: ancillarydata_timecode_vitc.h:49
AJAAncDataType
AJAAncDataType
Identifies the ancillary data types that are known to this module.
Definition: ancillarydata.h:44
AJAAncillaryData_Timecode_VITC::m_vitcType
AJAAncillaryData_Timecode_VITC_Type m_vitcType
The "type" of VITC received or to be transmitted.
Definition: ancillarydata_timecode_vitc.h:120
ancillarydatafactory.h
Declaration of the AJAAncillaryDataFactory class.
AJAAncillaryData_VITC_SID
const uint8_t AJAAncillaryData_VITC_SID
Definition: ancillarydata_timecode_vitc.h:23
AJAAncillaryData_Timecode_VITC_Type
AJAAncillaryData_Timecode_VITC_Type
Definition: ancillarydata_timecode_vitc.h:28
AJAAncillaryData_Timecode_VITC_Type_Timecode
@ AJAAncillaryData_Timecode_VITC_Type_Timecode
Definition: ancillarydata_timecode_vitc.h:31
AJAStatus
AJAStatus
Definition: types.h:378
AJAAncillaryData_Timecode::Clear
virtual void Clear(void)
Frees my allocated memory, if any, and resets my members to their default values.
Definition: ancillarydata_timecode.cpp:76
AJAAncillaryData
I am the principal class that stores a single SMPTE-291 SDI ancillary data packet OR the digitized co...
Definition: ancillarydata.h:552
AJAAncillaryData_Timecode_VITC
This is the VITC-specific subclass of the AJAAncillaryData_Timecode class.
Definition: ancillarydata_timecode_vitc.h:41
DoVITCBitPair
static void DoVITCBitPair(uint8_t *pLine, uint32_t &pixelIndex, bool bPrevBit, bool bBit0, bool bBit1)
Definition: ancillarydata_timecode_vitc.cpp:438
AJAAncillaryData_Timecode::Init
void Init(void)
Definition: ancillarydata_timecode.cpp:46
AJAAncillaryData_Timecode::GeneratePayloadData
virtual AJAStatus GeneratePayloadData(void)
Generate the payload data from the "local" ancillary data.
Definition: ancillarydata_timecode.h:69
AJAAncillaryData_Timecode::operator=
AJAAncillaryData_Timecode & operator=(const AJAAncillaryData_Timecode &inRHS)
Assignment operator – replaces my contents with the right-hand-side value.
Definition: ancillarydata_timecode.cpp:58
AJAAncillaryData_Timecode::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_timecode.cpp:646
ancillarydata_timecode.h
Declares the AJAAncillaryData_Timecode class.
AJAAncillaryData_Timecode::RecognizeThisAncillaryData
static AJAAncDataType RecognizeThisAncillaryData(const AJAAncillaryData *pInAncData)
Definition: ancillarydata_timecode.cpp:91
AJAExport
#define AJAExport
Definition: export.h:33
AJAAncData_AnalogSID
const uint8_t AJAAncData_AnalogSID
Definition: ancillarydata.h:25
AJAAncillaryData_VITC_PayloadSize
const uint32_t AJAAncillaryData_VITC_PayloadSize
Definition: ancillarydata_timecode_vitc.h:25
AJAAncillaryData_Timecode_VITC_Type_FilmData
@ AJAAncillaryData_Timecode_VITC_Type_FilmData
Definition: ancillarydata_timecode_vitc.h:32
AJAAncillaryData::Clone
virtual AJAAncillaryData * Clone(void) const
Definition: ancillarydata.cpp:165
AJAAncillaryData_Timecode::ParsePayloadData
virtual AJAStatus ParsePayloadData(void)
Parses out (interprets) the "local" ancillary data from my payload data.
Definition: ancillarydata_timecode.cpp:83
AJAAncillaryData_VITC_DID
const uint8_t AJAAncillaryData_VITC_DID
Definition: ancillarydata_timecode_vitc.h:22
AJAAncData_AnalogDID
const uint8_t AJAAncData_AnalogDID
Definition: ancillarydata.h:24