AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
ancillarydata_timecode.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_ANCILLARYDATA_TIMECODE_H
9 #define AJA_ANCILLARYDATA_TIMECODE_H
10 
13 #include "ancillarydatafactory.h"
14 #include "ancillarydata.h"
15 
16 
18 {
19  AJAAncillaryData_Timecode_Format_Unknown, // not set (usually defaults to 30 fps)
20 
21  AJAAncillaryData_Timecode_Format_60fps, // 60/59.94 fps format ("NTSC")
22  AJAAncillaryData_Timecode_Format_50fps, // 50 fps format ("PAL")
24  AJAAncillaryData_Timecode_Format_30fps, // 30/29.97 fps format ("NTSC")
25  AJAAncillaryData_Timecode_Format_25fps, // 25 fps format ("PAL")
27 };
28 
29 
37 {
38 public:
43 
44  virtual inline ~AJAAncillaryData_Timecode () {}
45 
46  virtual void Clear (void);
47 
54 
55  virtual inline AJAAncillaryData_Timecode * Clone (void) const {return new AJAAncillaryData_Timecode (this);}
56 
61  virtual AJAStatus ParsePayloadData (void);
62 
63 
70 
71 
81  virtual AJAStatus SetTimeHexValue (const uint8_t inDigitNum, const uint8_t inHexValue, const uint8_t inMask = 0x0f);
82 
92  virtual AJAStatus GetTimeHexValue (uint8_t inDigitNum, uint8_t & outHexValue, uint8_t inMask = 0x0f) const;
93 
107  virtual AJAStatus SetTimeDigits ( const uint8_t inHourTens, const uint8_t inHourOnes,
108  const uint8_t inMinTens, const uint8_t inMinOnes,
109  const uint8_t inSecsTens, const uint8_t inSecsOnes,
110  const uint8_t inFrameTens, const uint8_t inFrameOnes);
111 
125  virtual AJAStatus GetTimeDigits ( uint8_t & outHourTens, uint8_t & outHourOnes,
126  uint8_t & outMinTens, uint8_t & outMinOnes,
127  uint8_t & outSecsTens, uint8_t & outSecsOnes,
128  uint8_t & outFrameTens, uint8_t & outFrameOnes) const;
129 
140  virtual AJAStatus SetTime (const AJAAncillaryData_Timecode_Format inFormat, const uint32_t inHours,
141  const uint32_t inMinutes, const uint32_t inSeconds, const uint32_t inFrames);
142 
153  virtual AJAStatus GetTime (const AJAAncillaryData_Timecode_Format inFormat, uint32_t & outHours,
154  uint32_t & outMinutes, uint32_t & outSeconds, uint32_t & outFrames) const;
155 
163  virtual AJAStatus SetTimecode (const AJATimeCode & inTimecode, const AJATimeBase & inTimeBase, const bool inIsDropFrame);
164 
171  virtual AJAStatus GetTimecode (AJATimeCode & outTimecode, const AJATimeBase & inTimeBase) const;
172 
173 
180  virtual AJAStatus SetBinaryGroupHexValue (uint8_t digitNum, uint8_t hexValue, uint8_t mask = 0x0f);
181  virtual AJAStatus GetBinaryGroupHexValue (uint8_t digitNum, uint8_t& hexValue, uint8_t mask = 0x0f) const;
182 
188  virtual AJAStatus SetBinaryGroups (uint8_t bg8, uint8_t bg7, uint8_t bg6, uint8_t bg5, uint8_t bg4, uint8_t bg3, uint8_t bg2, uint8_t bg1);
189  virtual AJAStatus GetBinaryGroups (uint8_t& bg8, uint8_t& bg7, uint8_t& bg6, uint8_t& bg5, uint8_t& bg4, uint8_t& bg3, uint8_t& bg2, uint8_t& bg1) const;
190 
191 
198  virtual AJAStatus SetFieldIdFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown);
199  virtual AJAStatus GetFieldIdFlag (bool& bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown) const;
200 
201 
208  virtual AJAStatus SetDropFrameFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown);
209  virtual AJAStatus GetDropFrameFlag (bool& bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown) const;
210 
211 
218  virtual AJAStatus SetColorFrameFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown);
219  virtual AJAStatus GetColorFrameFlag (bool& bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown) const;
220 
221 
228  virtual AJAStatus SetBinaryGroupFlag (const uint8_t inBGFlag, const AJAAncillaryData_Timecode_Format inFormat = AJAAncillaryData_Timecode_Format_Unknown);
229 
236  virtual AJAStatus GetBinaryGroupFlag (uint8_t & outBGFlag, const AJAAncillaryData_Timecode_Format inFormat = AJAAncillaryData_Timecode_Format_Unknown) const;
237 
242  static AJAAncDataType RecognizeThisAncillaryData (const AJAAncillaryData * pInAncData);
243 
250  virtual std::ostream & Print (std::ostream & inOutStream, const bool inDetailed = false) const;
251 
255  virtual std::string TimecodeString (void) const;
256 
262  static AJAAncillaryData_Timecode_Format GetTimecodeFormatFromTimeBase (const AJATimeBase & inTimeBase);
263 
264 protected:
265  void Init (void); // NOT virtual - called by constructors
266 
267  // Which timecode digits go in which elements of timeDigits[]
268  // Note that this is the same order as received/transmitted, i.e. ls digits FIRST!
269  enum
270  {
271  kTcFrameUnits = 0,
272  kTcFrameTens = 1,
273  kTcSecondUnits = 2,
274  kTcSecondTens = 3,
275  kTcMinuteUnits = 4,
276  kTcMinuteTens = 5,
277  kTcHourUnits = 6,
278  kTcHourTens = 7,
279  kNumTimeDigits = 8
280  };
281 
282  // Which binary groups go in which elements of binaryGroup[]?
283  // Note that this is the same order as received/transmitted, i.e. ls digits FIRST!
284  enum
285  {
286  kBg1 = 0,
287  kBg2 = 1,
288  kBg3 = 2,
289  kBg4 = 3,
290  kBg5 = 4,
291  kBg6 = 5,
292  kBg7 = 6,
293  kBg8 = 7,
294  kNumBinaryGroups = 8
295  };
296 
297  // Note: if you make a change to the local member data, be sure to ALSO make the appropriate
298  // changes in the Init() and operator= methods!
299 
300  // The timecode data is stored as "raw" hex nibbles of data, split up between "time" values and "binary group" values.
301  // This means that sundry "flags" which take advantage of unused time bits (e.g. bits 2 and 3 of the hour tens digit)
302  // are kept with the hex digit data, and only parsed in or out by the appropriate Set()/Get() methods.
303  uint8_t m_timeDigits[kNumTimeDigits]; // the 8 hex values of the time data, in order of received/transmitted (i.e. ls digits first)
304  uint8_t m_binaryGroup[kNumBinaryGroups]; // the 8 hex values of the "Binary Groups", in order from BG1 - BG8
305 
306 }; // AJAAncillaryData_Timecode
307 
308 
315 inline std::ostream & operator << (std::ostream & inOutStream, const AJAAncillaryData_Timecode & inAncData) {return inAncData.Print (inOutStream);}
316 
317 #endif // AJA_ANCILLARYDATA_TIMECODE_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_Format_30fps
@ AJAAncillaryData_Timecode_Format_30fps
Definition: ancillarydata_timecode.h:24
ancillarydata.h
Declares the AJAAncillaryData class.
operator<<
std::ostream & operator<<(std::ostream &inOutStream, const AJAAncillaryData_Timecode &inAncData)
Writes a human-readable rendition of the given AJAAncillaryData_Timecode into the given output stream...
Definition: ancillarydata_timecode.h:315
AJA_STATUS_SUCCESS
@ AJA_STATUS_SUCCESS
Definition: types.h:381
AJAAncDataType
AJAAncDataType
Identifies the ancillary data types that are known to this module.
Definition: ancillarydata.h:44
ancillarydatafactory.h
Declaration of the AJAAncillaryDataFactory class.
timecode.h
Declares the AJATimeCode class.
AJAStatus
AJAStatus
Definition: types.h:378
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:1409
AJATimeBase
Definition: timebase.h:18
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_Format_48fps
@ AJAAncillaryData_Timecode_Format_48fps
Definition: ancillarydata_timecode.h:23
AJAAncillaryData_Timecode::GeneratePayloadData
virtual AJAStatus GeneratePayloadData(void)
Generate the payload data from the "local" ancillary data.
Definition: ancillarydata_timecode.h:69
AJAAncillaryData_Timecode_Format_Unknown
@ AJAAncillaryData_Timecode_Format_Unknown
Definition: ancillarydata_timecode.h:19
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
AJAAncillaryData::Clear
virtual void Clear(void)
Frees my allocated memory, if any, and resets my members to their default values.
Definition: ancillarydata.cpp:159
AJAAncillaryData::operator=
AJAAncillaryData & operator=(const AJAAncillaryData &inRHS)
Definition: ancillarydata.cpp:1576
AJAAncillaryData::ParsePayloadData
virtual AJAStatus ParsePayloadData(void)
Parses (interprets) the "local" ancillary data from my payload data.
Definition: ancillarydata.cpp:501
AJAAncillaryData_Timecode_Format
AJAAncillaryData_Timecode_Format
Definition: ancillarydata_timecode.h:17
AJAExport
#define AJAExport
Definition: export.h:33
AJAAncillaryData::Clone
virtual AJAAncillaryData * Clone(void) const
Definition: ancillarydata.cpp:165
AJAAncillaryData_Timecode_Format_50fps
@ AJAAncillaryData_Timecode_Format_50fps
Definition: ancillarydata_timecode.h:22
AJAAncillaryData_Timecode_Format_24fps
@ AJAAncillaryData_Timecode_Format_24fps
Definition: ancillarydata_timecode.h:26
AJAAncillaryData_Timecode::~AJAAncillaryData_Timecode
virtual ~AJAAncillaryData_Timecode()
Definition: ancillarydata_timecode.h:44
AJAAncillaryData_Timecode_Format_25fps
@ AJAAncillaryData_Timecode_Format_25fps
Definition: ancillarydata_timecode.h:25
AJAAncillaryData_Timecode_Format_60fps
@ AJAAncillaryData_Timecode_Format_60fps
Definition: ancillarydata_timecode.h:21
AJATimeCode
Utility class for timecodes.
Definition: timecode.h:17
AJAAncillaryData::Init
void Init(void)
Definition: ancillarydata.cpp:131
timebase.h
Declares the AJATimeBase class.