AJA NTV2 SDK  18.1.0.2439
NTV2 SDK 18.1.0.2439
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 
187  virtual AJAStatus SetRP188Words (const uint32_t inLoWord, const uint32_t inHiWord, const AJATimeBase & inTimeBase);
188 
204  virtual AJAStatus GetRP188Words (uint32_t & outLoWord, uint32_t & outHiWord, const AJATimeBase & inTimeBase) const;
205 
206 
213  virtual AJAStatus SetBinaryGroupHexValue (uint8_t digitNum, uint8_t hexValue, uint8_t mask = 0x0f);
214  virtual AJAStatus GetBinaryGroupHexValue (uint8_t digitNum, uint8_t& hexValue, uint8_t mask = 0x0f) const;
215 
221  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);
222  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;
223 
224 
231  virtual AJAStatus SetFieldIdFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown);
232  virtual AJAStatus GetFieldIdFlag (bool& bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown) const;
233 
234 
241  virtual AJAStatus SetDropFrameFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown);
242  virtual AJAStatus GetDropFrameFlag (bool& bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown) const;
243 
244 
251  virtual AJAStatus SetColorFrameFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown);
252  virtual AJAStatus GetColorFrameFlag (bool& bFlag, AJAAncillaryData_Timecode_Format tcFmt = AJAAncillaryData_Timecode_Format_Unknown) const;
253 
254 
261  virtual AJAStatus SetBinaryGroupFlag (const uint8_t inBGFlag, const AJAAncillaryData_Timecode_Format inFormat = AJAAncillaryData_Timecode_Format_Unknown);
262 
269  virtual AJAStatus GetBinaryGroupFlag (uint8_t & outBGFlag, const AJAAncillaryData_Timecode_Format inFormat = AJAAncillaryData_Timecode_Format_Unknown) const;
270 
275  static AJAAncDataType RecognizeThisAncillaryData (const AJAAncillaryData * pInAncData);
276 
283  virtual std::ostream & Print (std::ostream & inOutStream, const bool inDetailed = false) const;
284 
288  virtual std::string TimecodeString (void) const;
289 
295  static AJAAncillaryData_Timecode_Format GetTimecodeFormatFromTimeBase (const AJATimeBase & inTimeBase);
296 
297 protected:
298  void Init (void); // NOT virtual - called by constructors
299 
300  // Which timecode digits go in which elements of timeDigits[]
301  // Note that this is the same order as received/transmitted, i.e. ls digits FIRST!
302  enum
303  {
304  kTcFrameUnits = 0,
305  kTcFrameTens = 1,
306  kTcSecondUnits = 2,
307  kTcSecondTens = 3,
308  kTcMinuteUnits = 4,
309  kTcMinuteTens = 5,
310  kTcHourUnits = 6,
311  kTcHourTens = 7,
312  kNumTimeDigits = 8
313  };
314 
315  // Which binary groups go in which elements of binaryGroup[]?
316  // Note that this is the same order as received/transmitted, i.e. ls digits FIRST!
317  enum
318  {
319  kBg1 = 0,
320  kBg2 = 1,
321  kBg3 = 2,
322  kBg4 = 3,
323  kBg5 = 4,
324  kBg6 = 5,
325  kBg7 = 6,
326  kBg8 = 7,
327  kNumBinaryGroups = 8
328  };
329 
330  // Note: if you make a change to the local member data, be sure to ALSO make the appropriate
331  // changes in the Init() and operator= methods!
332 
333  // The timecode data is stored as "raw" hex nibbles of data, split up between "time" values and "binary group" values.
334  // This means that sundry "flags" which take advantage of unused time bits (e.g. bits 2 and 3 of the hour tens digit)
335  // are kept with the hex digit data, and only parsed in or out by the appropriate Set()/Get() methods.
336  uint8_t m_timeDigits[kNumTimeDigits]; // the 8 hex values of the time data, in order of received/transmitted (i.e. ls digits first)
337  uint8_t m_binaryGroup[kNumBinaryGroups]; // the 8 hex values of the "Binary Groups", in order from BG1 - BG8
338 
339 }; // AJAAncillaryData_Timecode
340 
341 
348 inline std::ostream & operator << (std::ostream & inOutStream, const AJAAncillaryData_Timecode & inAncData) {return inAncData.Print (inOutStream);}
349 
350 #endif // AJA_ANCILLARYDATA_TIMECODE_H
virtual AJAAncillaryData_Timecode * Clone(void) const
AJAAncillaryData & operator=(const AJAAncillaryData &inRHS)
AJAStatus
Definition: types.h:380
AJAAncDataType
Identifies the ancillary data types that are known to this module.
Definition: ancillarydata.h:44
virtual AJAStatus GeneratePayloadData(void)
Generate the payload data from the "local" ancillary data.
virtual void Clear(void)
Frees my allocated memory, if any, and resets my members to their default values. ...
Declares the AJATimeBase class.
virtual std::ostream & Print(std::ostream &inOutStream, const bool inDetailed=false) const
Streams a human-readable representation of me to the given output stream.
Utility class for timecodes.
Definition: timecode.h:28
virtual AJAStatus ParsePayloadData(void)
Parses (interprets) the "local" ancillary data from my payload data.
This is the base class for the AJAAncillaryData_Timecode_ATC and AJAAncillaryData_Timecode_VITC class...
Declares the AJATimeCode class.
Declaration of the AJAAncillaryDataFactory class.
#define AJAExport
Definition: export.h:33
Declares the AJAAncillaryData class.
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...
I am the principal class that stores a single SMPTE-291 SDI ancillary data packet OR the digitized co...
AJAAncillaryData_Timecode_Format
virtual std::ostream & Print(std::ostream &inOutStream, const bool inDetailed=false) const
Streams a human-readable representation of me to the given output stream.