AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
AJAAncillaryData_Timecode Class Reference

This is the base class for the AJAAncillaryData_Timecode_ATC and AJAAncillaryData_Timecode_VITC classes, because they share the same "payload" data (i.e. timecode) and only differ in the transport (ancillary packets vs. "analog" coding). More...

#include <ancillarydata_timecode.h>

Inheritance diagram for AJAAncillaryData_Timecode:
[legend]
Collaboration diagram for AJAAncillaryData_Timecode:
[legend]

Public Member Functions

 AJAAncillaryData_Timecode ()
 
 AJAAncillaryData_Timecode (const AJAAncillaryData_Timecode &inClone)
 
 AJAAncillaryData_Timecode (const AJAAncillaryData_Timecode *pClone)
 
 AJAAncillaryData_Timecode (const AJAAncillaryData *pData)
 
virtual ~AJAAncillaryData_Timecode ()
 
virtual void Clear (void)
 Frees my allocated memory, if any, and resets my members to their default values. More...
 
virtual AJAAncillaryData_Timecodeoperator= (const AJAAncillaryData_Timecode &inRHS)
 Assignment operator – replaces my contents with the right-hand-side value. More...
 
virtual AJAStatus ParsePayloadData (void)
 Parses out (interprets) the "local" ancillary data from my payload data. More...
 
virtual AJAStatus GeneratePayloadData (void)
 Generate the payload data from the "local" ancillary data. More...
 
virtual AJAStatus SetTimeHexValue (const uint8_t inDigitNum, const uint8_t inHexValue, const uint8_t inMask=0x0f)
 Sets my raw "time" hex values. More...
 
virtual AJAStatus GetTimeHexValue (uint8_t inDigitNum, uint8_t &outHexValue, uint8_t inMask=0x0f) const
 Answers with my current raw "time" hex values. More...
 
virtual AJAStatus SetTimeDigits (const uint8_t inHourTens, const uint8_t inHourOnes, const uint8_t inMinTens, const uint8_t inMinOnes, const uint8_t inSecsTens, const uint8_t inSecsOnes, const uint8_t inFrameTens, const uint8_t inFrameOnes)
 Sets my timecode "time" using discrete BCD digits. More...
 
virtual AJAStatus GetTimeDigits (uint8_t &outHourTens, uint8_t &outHourOnes, uint8_t &outMinTens, uint8_t &outMinOnes, uint8_t &outSecsTens, uint8_t &outSecsOnes, uint8_t &outFrameTens, uint8_t &outFrameOnes) const
 Answers with my current timecode "time" as discrete BCD digits. More...
 
virtual AJAStatus SetTime (const AJAAncillaryData_Timecode_Format inFormat, const uint32_t inHours, const uint32_t inMinutes, const uint32_t inSeconds, const uint32_t inFrames)
 Sets my timecode "time" with hours, minutes, seconds, frames (in decimal, not BCD digits). More...
 
virtual AJAStatus GetTime (const AJAAncillaryData_Timecode_Format inFormat, uint32_t &outHours, uint32_t &outMinutes, uint32_t &outSeconds, uint32_t &outFrames) const
 Answers with my current timecode "time" as individual hour, minute, second, and frame components (in decimal, not BCD digits). More...
 
virtual AJAStatus SetTimecode (const AJATimeCode &inTimecode, const AJATimeBase &inTimeBase, const bool inIsDropFrame)
 Sets my timecode "time" from an AJATimeCode. More...
 
virtual AJAStatus GetTimecode (AJATimeCode &outTimecode, AJATimeBase &outTimeBase) const
 Answers with my timecode "time" as an AJATimeCode. More...
 
virtual AJAStatus SetBinaryGroupHexValue (uint8_t digitNum, uint8_t hexValue, uint8_t mask=0x0f)
 Sets my raw "Binary Group" hex values. More...
 
virtual AJAStatus GetBinaryGroupHexValue (uint8_t digitNum, uint8_t &hexValue, uint8_t mask=0x0f) const
 
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)
 Sets my binary group values. More...
 
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
 
virtual AJAStatus SetFieldIdFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt=AJAAncillaryData_Timecode_Format_Unknown)
 Sets my FieldID flag. More...
 
virtual AJAStatus GetFieldIdFlag (bool &bFlag, AJAAncillaryData_Timecode_Format tcFmt=AJAAncillaryData_Timecode_Format_Unknown) const
 
virtual AJAStatus SetDropFrameFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt=AJAAncillaryData_Timecode_Format_Unknown)
 Sets my drop frame flag. More...
 
virtual AJAStatus GetDropFrameFlag (bool &bFlag, AJAAncillaryData_Timecode_Format tcFmt=AJAAncillaryData_Timecode_Format_Unknown) const
 
virtual AJAStatus SetColorFrameFlag (bool bFlag, AJAAncillaryData_Timecode_Format tcFmt=AJAAncillaryData_Timecode_Format_Unknown)
 Sets my color frame flag. More...
 
virtual AJAStatus GetColorFrameFlag (bool &bFlag, AJAAncillaryData_Timecode_Format tcFmt=AJAAncillaryData_Timecode_Format_Unknown) const
 
virtual AJAStatus SetBinaryGroupFlag (const uint8_t inBGFlag, const AJAAncillaryData_Timecode_Format inFormat=AJAAncillaryData_Timecode_Format_Unknown)
 Sets my binary group flag (3 bits). More...
 
virtual AJAStatus GetBinaryGroupFlag (uint8_t &outBGFlag, const AJAAncillaryData_Timecode_Format inFormat=AJAAncillaryData_Timecode_Format_Unknown) const
 Answers with my current binary group flag (3 bits). More...
 
virtual std::ostream & Print (std::ostream &inOutStream, const bool inDetailed=false) const
 Streams a human-readable representation of me to the given output stream. More...
 
virtual std::string TimecodeString (void) const
 
- Public Member Functions inherited from AJAAncillaryData
 AJAAncillaryData ()
 My default constructor. More...
 
 AJAAncillaryData (const AJAAncillaryData &inClone)
 My copy constructor (from reference). More...
 
 AJAAncillaryData (const AJAAncillaryData *pInClone)
 My copy constructor (from pointer). More...
 
virtual ~AJAAncillaryData ()
 My destructor. More...
 
virtual AJAAncillaryDataClone (void) const
 
virtual uint16_t GetStreamInfo (void) const
 
virtual bool HasStreamInfo (void) const
 
virtual uint8_t Calculate8BitChecksum (void) const
 Generates an 8-bit checksum from the DID + SID + DC + payload data. More...
 
virtual uint16_t Calculate9BitChecksum (void) const
 Generates the official SMPTE 291 9-bit checksum from the DID + SID + DC + payload data. More...
 
virtual bool ChecksumOK (void) const
 Compares the received 8-bit checksum with a newly calculated 8-bit checksum. Returns 'true' if they match. More...
 
virtual AJAAncillaryDataoperator= (const AJAAncillaryData &inRHS)
 
virtual bool operator== (const AJAAncillaryData &inRHS) const
 
virtual bool operator!= (const AJAAncillaryData &inRHS) const
 
virtual AJAStatus Compare (const AJAAncillaryData &inRHS, const bool inIgnoreLocation=true, const bool inIgnoreChecksum=true) const
 Compares me with another packet. More...
 
virtual AJAStatus SetDID (const uint8_t inDataID)
 Sets my Data ID (DID). More...
 
virtual AJAStatus SetSID (const uint8_t inSID)
 Sets my Secondary Data ID (SID) - (aka the Data Block Number (DBN) for "Type 1" SMPTE-291 packets). More...
 
virtual AJAStatus SetDIDSID (const AJAAncDIDSIDPair &inDIDSID)
 Sets both my Data ID (DID) and Secondary Data ID (SID). More...
 
virtual AJAStatus SetChecksum (const uint8_t inChecksum8, const bool inValidate=false)
 Sets my 8-bit checksum. Note that it is not usually necessary to generate an 8-bit checksum, since the ANC Insertion hardware ignores this field and (for SMPTE-291 Anc packets) generates and inserts its own "proper" 9-bit SMPTE-291 checksum. More...
 
virtual AJAStatus SetDataLocation (const AJAAncDataLoc &inLoc)
 Sets my ancillary data "location" within the video stream. More...
 
virtual AJAStatus SetLocationVideoLink (const AJAAncDataLink inLink)
 Sets my ancillary data "location" within the video stream. More...
 
virtual AJAStatus SetLocationDataStream (const AJAAncDataStream inStream)
 Sets my ancillary data "location" data stream value (DS1,DS2...). More...
 
virtual AJAStatus SetLocationDataChannel (const AJAAncDataChannel inChannel)
 Sets my ancillary data "location" data channel value (Y or C). More...
 
virtual AJAStatus SetLocationLineNumber (const uint16_t inLineNum)
 Sets my ancillary data "location" frame line number. More...
 
virtual AJAStatus SetLocationHorizOffset (const uint16_t inOffset)
 Sets my ancillary data "location" horizontal offset. More...
 
virtual AJAStatus SetDataCoding (const AJAAncDataCoding inCodingType)
 Sets my ancillary data coding type (e.g. digital or analog/raw waveform). More...
 
virtual AJAAncillaryDataSetFrameID (const uint32_t inFrameID)
 Sets my originating frame identifier. More...
 
virtual AJAAncillaryDataSetBufferFormat (const AJAAncBufferFormat inFmt)
 Sets my originating buffer format. More...
 
virtual uint8_t GetPayloadByteAtIndex (const uint32_t inIndex0) const
 
virtual const uint8_t * GetPayloadData (void) const
 
virtual AJAStatus GetPayloadData (uint8_t *pBuffer, const uint32_t inByteCapacity) const
 Copies my payload data into an external buffer. More...
 
virtual AJAStatus GetPayloadData (UWordSequence &outUDWs, const bool inAddParity=true) const
 Appends my payload data onto the given UDW vector as 10-bit User Data Words (UDWs), adding parity as needed. More...
 
virtual AJAStatus SetPayloadByteAtIndex (const uint8_t inDataByte, const uint32_t inIndex0)
 
virtual AJAStatus SetPayloadData (const uint8_t *pInData, const uint32_t inByteCount)
 Copy data from external memory into my local payload memory. More...
 
virtual AJAStatus AppendPayloadData (const uint8_t *pInBuffer, const uint32_t inByteCount)
 Appends data from an external buffer onto the end of my existing payload. More...
 
virtual AJAStatus AppendPayload (const AJAAncillaryData &inAncData)
 Appends payload data from another AJAAncillaryData object to my existing payload. More...
 
virtual AJAStatus AppendPayload (const AJAAncillaryData *pInAncData)
 
virtual AJAStatus SetFromSMPTE334 (const uint16_t *pInData, const uint32_t inNumWords, const AJAAncDataLoc &inLocInfo)
 Copies payload data from an external 16-bit source into local payload memory. More...
 
virtual bool GotValidReceiveData (void) const
 
virtual AJAStatus InitWithReceivedData (const uint8_t *pInData, const size_t inMaxBytes, const AJAAncDataLoc &inLocationInfo, uint32_t &outPacketByteCount)
 Initializes me from "raw" ancillary data received from hardware (ingest) – see SDI Anc Buffer Data Format. More...
 
virtual AJAStatus InitWithReceivedData (const std::vector< uint8_t > &inData, const AJAAncDataLoc &inLocationInfo)
 Initializes me from "raw" ancillary data received from hardware (ingest) – see SDI Anc Buffer Data Format. More...
 
virtual AJAStatus InitWithReceivedData (const ULWordSequence &inData, uint16_t &inOutStartIndex, const bool inIgnoreChecksum=false)
 Initializes me from the given 32-bit IP packet words received from hardware (ingest). More...
 
virtual AJAStatus GetRawPacketSize (uint32_t &outPacketSize) const
 Returns the number of "raw" ancillary data bytes that will be generated by AJAAncillaryData::GenerateTransmitData (for playback mode). More...
 
virtual AJAStatus GenerateTransmitData (uint8_t *pBuffer, const size_t inMaxBytes, uint32_t &outPacketSize)
 Generates "raw" ancillary data from my internal ancillary data (playback) – see SDI Anc Buffer Data Format. More...
 
virtual AJAStatus GenerateTransmitData (UWordSequence &outData)
 Generates "raw" 10-bit ancillary packet component data from my internal ancillary data (playback). More...
 
virtual AJAStatus GenerateTransmitData (ULWordSequence &outData)
 Generates the 32-bit IP packet words necessary for constructing an outgoing IP/RTP stream. More...
 
virtual std::ostream & DumpPayload (std::ostream &inOutStream) const
 Dumps a human-readable representation of my payload bytes into the given output stream. More...
 
virtual std::string CompareWithInfo (const AJAAncillaryData &inRHS, const bool inIgnoreLocation=true, const bool inIgnoreChecksum=true) const
 Compares me with another packet and returns a string that describes what's different. More...
 
virtual std::string IDAsString (void) const
 
virtual std::string AsString (const uint16_t inDumpMaxBytes=0) const
 

Static Public Member Functions

static AJAAncDataType RecognizeThisAncillaryData (const AJAAncillaryData *pInAncData)
 
static AJAAncillaryData_Timecode_Format GetTimecodeFormatFromTimeBase (const AJATimeBase &inTimeBase)
 Get the timecode format that matches the input timebase. More...
 
- Static Public Member Functions inherited from AJAAncillaryData
static uint16_t AddEvenParity (const uint8_t inDataByte)
 
static bool GetAncPacketsFromVANCLine (const UWordSequence &inYUV16Line, const AncChannelSearchSelect inChanSelect, U16Packets &outRawPackets, U16Packet &outWordOffsets)
 Extracts whatever VANC packets are found inside the given 16-bit YUV line buffer. More...
 
static bool Unpack8BitYCbCrToU16sVANCLine (const void *pInYUV8Line, U16Packet &outU16YUVLine, const uint32_t inNumPixels)
 Converts a single line of NTV2_FBF_8BIT_YCBCR data from the given source buffer into an ordered sequence of uint16_t values that contain the resulting 10-bit even-parity data. More...
 
static void GetInstanceCounts (uint32_t &outConstructed, uint32_t &outDestructed)
 
static uint32_t GetNumActiveInstances (void)
 
static uint32_t GetNumConstructed (void)
 
static uint32_t GetNumDestructed (void)
 
static void ResetInstanceCounts (void)
 
static std::string DIDSIDToString (const uint8_t inDID, const uint8_t inSDID)
 

Protected Types

enum  {
  kTcFrameUnits = 0, kTcFrameTens = 1, kTcSecondUnits = 2, kTcSecondTens = 3,
  kTcMinuteUnits = 4, kTcMinuteTens = 5, kTcHourUnits = 6, kTcHourTens = 7,
  kNumTimeDigits = 8
}
 
enum  {
  kBg1 = 0, kBg2 = 1, kBg3 = 2, kBg4 = 3,
  kBg5 = 4, kBg6 = 5, kBg7 = 6, kBg8 = 7,
  kNumBinaryGroups = 8
}
 
- Protected Types inherited from AJAAncillaryData
typedef std::vector< uint8_t > ByteVector
 
typedef ByteVector::size_type ByteVectorIndex
 
typedef ByteVector::const_iterator ByteVectorConstIter
 

Protected Member Functions

void Init (void)
 
- Protected Member Functions inherited from AJAAncillaryData
void Init (void)
 
AJAStatus AllocDataMemory (const uint32_t inNumBytes)
 
AJAStatus FreeDataMemory (void)
 
virtual uint8_t GetGUMPHeaderByte2 (void) const
 
virtual uint8_t GetGUMPHeaderByte3 (void) const
 

Protected Attributes

uint8_t m_timeDigits [kNumTimeDigits]
 
uint8_t m_binaryGroup [kNumBinaryGroups]
 
- Protected Attributes inherited from AJAAncillaryData
uint8_t m_DID
 Official SMPTE ancillary packet ID (w/o parity) More...
 
uint8_t m_SID
 Official SMPTE secondary ID (or DBN - w/o parity) More...
 
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 a SMPTE-291 packet!]. More...
 
AJAAncDataLoc m_location
 Location of the ancillary data in the video stream (Y or C, HANC or VANC, etc.) More...
 
AJAAncDataCoding m_coding
 Analog or digital data. More...
 
ByteVector m_payload
 My payload data (DC = size) More...
 
bool m_rcvDataValid
 This is set true (or not) by ParsePayloadData() More...
 
AJAAncDataType m_ancType
 One of a known set of ancillary data types (or "Custom" if not identified) More...
 
AJAAncBufferFormat m_bufferFmt
 My originating buffer format, if known. More...
 
uint32_t m_frameID
 ID of my originating frame, if known. More...
 
uint64_t m_userData
 User data (for client use) More...
 

Additional Inherited Members

- Public Types inherited from AJAAncillaryData
typedef UWordSequence U16Packet
 An ordered sequence of 10-bit packet words stored in uint16_t values. More...
 
typedef std::vector< U16PacketU16Packets
 An ordered sequence of zero or more U16Packet values. More...
 
- Static Protected Member Functions inherited from AJAAncillaryData
static uint8_t GetGUMPHeaderByte1 (void)
 

Detailed Description

This is the base class for the AJAAncillaryData_Timecode_ATC and AJAAncillaryData_Timecode_VITC classes, because they share the same "payload" data (i.e. timecode) and only differ in the transport (ancillary packets vs. "analog" coding).

Note
Do not instantiate a "pure" AJAAncillaryData_Timecode object. Always use the subclasses.

Definition at line 36 of file ancillarydata_timecode.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
protected
Enumerator
kTcFrameUnits 
kTcFrameTens 
kTcSecondUnits 
kTcSecondTens 
kTcMinuteUnits 
kTcMinuteTens 
kTcHourUnits 
kTcHourTens 
kNumTimeDigits 

Definition at line 269 of file ancillarydata_timecode.h.

◆ anonymous enum

anonymous enum
protected
Enumerator
kBg1 
kBg2 
kBg3 
kBg4 
kBg5 
kBg6 
kBg7 
kBg8 
kNumBinaryGroups 

Definition at line 284 of file ancillarydata_timecode.h.

Constructor & Destructor Documentation

◆ AJAAncillaryData_Timecode() [1/4]

AJAAncillaryData_Timecode::AJAAncillaryData_Timecode ( )

Definition at line 15 of file ancillarydata_timecode.cpp.

◆ AJAAncillaryData_Timecode() [2/4]

AJAAncillaryData_Timecode::AJAAncillaryData_Timecode ( const AJAAncillaryData_Timecode inClone)

Definition at line 22 of file ancillarydata_timecode.cpp.

◆ AJAAncillaryData_Timecode() [3/4]

AJAAncillaryData_Timecode::AJAAncillaryData_Timecode ( const AJAAncillaryData_Timecode pClone)

Definition at line 30 of file ancillarydata_timecode.cpp.

◆ AJAAncillaryData_Timecode() [4/4]

AJAAncillaryData_Timecode::AJAAncillaryData_Timecode ( const AJAAncillaryData pData)

Definition at line 39 of file ancillarydata_timecode.cpp.

◆ ~AJAAncillaryData_Timecode()

virtual AJAAncillaryData_Timecode::~AJAAncillaryData_Timecode ( )
inlinevirtual

Definition at line 44 of file ancillarydata_timecode.h.

Member Function Documentation

◆ Clear()

void AJAAncillaryData_Timecode::Clear ( void  )
virtual

Frees my allocated memory, if any, and resets my members to their default values.

Reimplemented from AJAAncillaryData.

Reimplemented in AJAAncillaryData_Timecode_ATC, and AJAAncillaryData_Timecode_VITC.

Definition at line 76 of file ancillarydata_timecode.cpp.

◆ GeneratePayloadData()

virtual AJAStatus AJAAncillaryData_Timecode::GeneratePayloadData ( void  )
inlinevirtual

Generate the payload data from the "local" ancillary data.

Note
This method is overridden for the specific Anc data type.
Returns
AJA_STATUS_SUCCESS if successful.

Reimplemented from AJAAncillaryData.

Reimplemented in AJAAncillaryData_Timecode_ATC, and AJAAncillaryData_Timecode_VITC.

Definition at line 69 of file ancillarydata_timecode.h.

◆ GetBinaryGroupFlag()

AJAStatus AJAAncillaryData_Timecode::GetBinaryGroupFlag ( uint8_t &  outBGFlag,
const AJAAncillaryData_Timecode_Format  inFormat = AJAAncillaryData_Timecode_Format_Unknown 
) const
virtual

Answers with my current binary group flag (3 bits).

Parameters
[out]outBGFlagSpecifies the BG Flag value (only the least significant 3 bits are retained).
[in]inFormatSpecifies the timecode format associated with timecode (default is handled as 30-frame timecode).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 583 of file ancillarydata_timecode.cpp.

◆ GetBinaryGroupHexValue()

AJAStatus AJAAncillaryData_Timecode::GetBinaryGroupHexValue ( uint8_t  digitNum,
uint8_t &  hexValue,
uint8_t  mask = 0x0f 
) const
virtual

Definition at line 267 of file ancillarydata_timecode.cpp.

◆ GetBinaryGroups()

AJAStatus AJAAncillaryData_Timecode::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
virtual

Definition at line 291 of file ancillarydata_timecode.cpp.

◆ GetColorFrameFlag()

AJAStatus AJAAncillaryData_Timecode::GetColorFrameFlag ( bool &  bFlag,
AJAAncillaryData_Timecode_Format  tcFmt = AJAAncillaryData_Timecode_Format_Unknown 
) const
virtual

Definition at line 480 of file ancillarydata_timecode.cpp.

◆ GetDropFrameFlag()

AJAStatus AJAAncillaryData_Timecode::GetDropFrameFlag ( bool &  bFlag,
AJAAncillaryData_Timecode_Format  tcFmt = AJAAncillaryData_Timecode_Format_Unknown 
) const
virtual

Definition at line 413 of file ancillarydata_timecode.cpp.

◆ GetFieldIdFlag()

AJAStatus AJAAncillaryData_Timecode::GetFieldIdFlag ( bool &  bFlag,
AJAAncillaryData_Timecode_Format  tcFmt = AJAAncillaryData_Timecode_Format_Unknown 
) const
virtual

Definition at line 343 of file ancillarydata_timecode.cpp.

◆ GetTime()

AJAStatus AJAAncillaryData_Timecode::GetTime ( const AJAAncillaryData_Timecode_Format  inFormat,
uint32_t &  outHours,
uint32_t &  outMinutes,
uint32_t &  outSeconds,
uint32_t &  outFrames 
) const
virtual

Answers with my current timecode "time" as individual hour, minute, second, and frame components (in decimal, not BCD digits).

Parameters
[in]inFormatSpecifies a valid AJAAncillaryData_Timecode_Format.
[out]outHoursReceives the hours value.
[out]outMinutesReceives the minutes value.
[out]outSecondsReceives the seconds value.
[out]outFramesReceives the frame value.
Note
This method takes into account the "FieldID" bit for HFR timecode formats (e.g. p50, p59.94, p60, etc.).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 201 of file ancillarydata_timecode.cpp.

◆ GetTimecode()

AJAStatus AJAAncillaryData_Timecode::GetTimecode ( AJATimeCode outTimecode,
AJATimeBase outTimeBase 
) const
virtual

Answers with my timecode "time" as an AJATimeCode.

Parameters
[out]outTimecodeReceives the timecode.
[out]outTimeBaseReceives the time base (frame rate).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 235 of file ancillarydata_timecode.cpp.

◆ GetTimecodeFormatFromTimeBase()

AJAAncillaryData_Timecode_Format AJAAncillaryData_Timecode::GetTimecodeFormatFromTimeBase ( const AJATimeBase inTimeBase)
static

Get the timecode format that matches the input timebase.

Parameters
[in]inTimeBaseSpecifies the time base (frame rate) associated with the specified timecode.
Returns
The AJAAncillaryData_Timecode_Format that corresponds to the input timebase, returns AJAAncillaryData_Timecode_Format_Unknown when no match found.

Definition at line 621 of file ancillarydata_timecode.cpp.

◆ GetTimeDigits()

AJAStatus AJAAncillaryData_Timecode::GetTimeDigits ( uint8_t &  outHourTens,
uint8_t &  outHourOnes,
uint8_t &  outMinTens,
uint8_t &  outMinOnes,
uint8_t &  outSecsTens,
uint8_t &  outSecsOnes,
uint8_t &  outFrameTens,
uint8_t &  outFrameOnes 
) const
virtual

Answers with my current timecode "time" as discrete BCD digits.

Parameters
[out]outHourTensSpecifies the hours "tens" digit value.
[out]outHourOnesSpecifies the hours "ones" digit value.
[out]outMinTensSpecifies the minutes "tens" digit value.
[out]outMinOnesSpecifies the minutes "ones" digit value.
[out]outSecsTensSpecifies the seconds "tens" digit value.
[out]outSecsOnesSpecifies the seconds "ones" digit value.
[out]outFrameTensSpecifies the frame "tens" digit value.
[out]outFrameOnesSpecifies the frame "ones" digit value.
Note
Each digit is masked to the number of bits allotted in the payload. Note that the digit order is reversed!
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 148 of file ancillarydata_timecode.cpp.

◆ GetTimeHexValue()

AJAStatus AJAAncillaryData_Timecode::GetTimeHexValue ( uint8_t  inDigitNum,
uint8_t &  outHexValue,
uint8_t  inMask = 0x0f 
) const
virtual

Answers with my current raw "time" hex values.

Parameters
[in]inDigitNumSpecifies the index (0-7) of the time digit of interest, in "transmission" order: 0 = 1st (frame units) digit, 1 = 2nd digit, ... 7 = last (hour tens) digit.
[out]outHexValueReceives the hex value (least significant 4 bits) to be set.
[in]inMaskOptionally specifies which bits to receive: (1 = set bit to new value, 0 = retain current bit value). Defaults to 0x0F.
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 115 of file ancillarydata_timecode.cpp.

◆ Init()

void AJAAncillaryData_Timecode::Init ( void  )
protected

Definition at line 46 of file ancillarydata_timecode.cpp.

◆ operator=()

AJAAncillaryData_Timecode & AJAAncillaryData_Timecode::operator= ( const AJAAncillaryData_Timecode inRHS)
virtual

Assignment operator – replaces my contents with the right-hand-side value.

Parameters
[in]inRHSThe value to be assigned to me.
Returns
A reference to myself.

Definition at line 58 of file ancillarydata_timecode.cpp.

◆ ParsePayloadData()

AJAStatus AJAAncillaryData_Timecode::ParsePayloadData ( void  )
virtual

Parses out (interprets) the "local" ancillary data from my payload data.

Returns
AJA_STATUS_SUCCESS if successful.

Reimplemented from AJAAncillaryData.

Reimplemented in AJAAncillaryData_Timecode_ATC, and AJAAncillaryData_Timecode_VITC.

Definition at line 83 of file ancillarydata_timecode.cpp.

◆ Print()

ostream & AJAAncillaryData_Timecode::Print ( std::ostream &  inOutStream,
const bool  inDetailed = false 
) const
virtual

Streams a human-readable representation of me to the given output stream.

Parameters
inOutStreamSpecifies the output stream.
[in]inDetailedSpecify 'true' for a detailed representation; otherwise use 'false' for a brief one.
Returns
The given output stream.

Reimplemented from AJAAncillaryData.

Reimplemented in AJAAncillaryData_Timecode_ATC, and AJAAncillaryData_Timecode_VITC.

Definition at line 646 of file ancillarydata_timecode.cpp.

◆ RecognizeThisAncillaryData()

AJAAncDataType AJAAncillaryData_Timecode::RecognizeThisAncillaryData ( const AJAAncillaryData pInAncData)
static
Parameters
[in]pInAncDataA valid pointer to an AJAAncillaryData instance.
Returns
The AJAAncDataType if I recognize this ancillary data (or unknown if unrecognized).

Definition at line 91 of file ancillarydata_timecode.cpp.

◆ SetBinaryGroupFlag()

AJAStatus AJAAncillaryData_Timecode::SetBinaryGroupFlag ( const uint8_t  inBGFlag,
const AJAAncillaryData_Timecode_Format  inFormat = AJAAncillaryData_Timecode_Format_Unknown 
)
virtual

Sets my binary group flag (3 bits).

Parameters
[in]inBGFlagSpecifies the BG Flag value (only the least significant 3 bits are retained).
[in]inFormatSpecifies the timecode format associated with timecode (default is handled as 30-frame timecode).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 508 of file ancillarydata_timecode.cpp.

◆ SetBinaryGroupHexValue()

AJAStatus AJAAncillaryData_Timecode::SetBinaryGroupHexValue ( uint8_t  digitNum,
uint8_t  hexValue,
uint8_t  mask = 0x0f 
)
virtual

Sets my raw "Binary Group" hex values.

Parameters
[in]digitNumthe index (0 - 7) of the Binary Group value in "transmission" order, i.e. 0 = 1st (BG1) digit, 1 = 2nd digit, ..., 7 = last (BG7) digit
[in]hexValuethe hex value (ls 4 bits) to be set/get
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 255 of file ancillarydata_timecode.cpp.

◆ SetBinaryGroups()

AJAStatus AJAAncillaryData_Timecode::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 
)
virtual

Sets my binary group values.

Parameters
[in]bg8binary group values (only the ls 4 bits of each value are retained) - note that the BG order is reversed!)
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 277 of file ancillarydata_timecode.cpp.

◆ SetColorFrameFlag()

AJAStatus AJAAncillaryData_Timecode::SetColorFrameFlag ( bool  bFlag,
AJAAncillaryData_Timecode_Format  tcFmt = AJAAncillaryData_Timecode_Format_Unknown 
)
virtual

Sets my color frame flag.

Parameters
[in]bFlagfalse = no relation between color frames and timecode values, true = timecode values are aligned with color frames (see SMPTE-12M).
[in]tcFmtAJAAncillaryData_Timecode_Format associated with timecode (default is handled as 30-frame timecode).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 441 of file ancillarydata_timecode.cpp.

◆ SetDropFrameFlag()

AJAStatus AJAAncillaryData_Timecode::SetDropFrameFlag ( bool  bFlag,
AJAAncillaryData_Timecode_Format  tcFmt = AJAAncillaryData_Timecode_Format_Unknown 
)
virtual

Sets my drop frame flag.

Parameters
[in]bFlagfalse = non-dropframe format, true = drop frame
[in]tcFmtAJAAncillaryData_Timecode_Format associated with timecode (default is handled as 30-frame timecode).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 372 of file ancillarydata_timecode.cpp.

◆ SetFieldIdFlag()

AJAStatus AJAAncillaryData_Timecode::SetFieldIdFlag ( bool  bFlag,
AJAAncillaryData_Timecode_Format  tcFmt = AJAAncillaryData_Timecode_Format_Unknown 
)
virtual

Sets my FieldID flag.

Parameters
[in]bFlagfalse = field 1 (0), true = field 2 (1)
[in]tcFmtAJAAncillaryData_Timecode_Format associated with timecode (default is handled as 30-frame timecode).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 305 of file ancillarydata_timecode.cpp.

◆ SetTime()

AJAStatus AJAAncillaryData_Timecode::SetTime ( const AJAAncillaryData_Timecode_Format  inFormat,
const uint32_t  inHours,
const uint32_t  inMinutes,
const uint32_t  inSeconds,
const uint32_t  inFrames 
)
virtual

Sets my timecode "time" with hours, minutes, seconds, frames (in decimal, not BCD digits).

Parameters
[in]inFormatSpecifies a valid AJAAncillaryData_Timecode_Format.
[in]inHoursSpecifies the hours value, which must be less than 24.
[in]inMinutesSpecifies the minutes value, which must be less than 60.
[in]inSecondsSpecifies the seconds value, which must be less than 60.
[in]inFramesSpecifies the frame value, which must be less than the frame rate.
Note
This method takes into account the "FieldID" bit for HFR timecode formats (e.g. p50, p59.94, p60, etc.).
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 162 of file ancillarydata_timecode.cpp.

◆ SetTimecode()

AJAStatus AJAAncillaryData_Timecode::SetTimecode ( const AJATimeCode inTimecode,
const AJATimeBase inTimeBase,
const bool  inIsDropFrame 
)
virtual

Sets my timecode "time" from an AJATimeCode.

Parameters
[in]inTimecodeSpecifies the timecode.
[in]inTimeBaseSpecifies the time base (frame rate) associated with the specified timecode.
[in]inIsDropFrameSpecify 'true' for dropframe; otherwise false.
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 224 of file ancillarydata_timecode.cpp.

◆ SetTimeDigits()

AJAStatus AJAAncillaryData_Timecode::SetTimeDigits ( const uint8_t  inHourTens,
const uint8_t  inHourOnes,
const uint8_t  inMinTens,
const uint8_t  inMinOnes,
const uint8_t  inSecsTens,
const uint8_t  inSecsOnes,
const uint8_t  inFrameTens,
const uint8_t  inFrameOnes 
)
virtual

Sets my timecode "time" using discrete BCD digits.

Parameters
[in]inHourTensSpecifies the hours "tens" digit value.
[in]inHourOnesSpecifies the hours "ones" digit value.
[in]inMinTensSpecifies the minutes "tens" digit value.
[in]inMinOnesSpecifies the minutes "ones" digit value.
[in]inSecsTensSpecifies the seconds "tens" digit value.
[in]inSecsOnesSpecifies the seconds "ones" digit value.
[in]inFrameTensSpecifies the frame "tens" digit value.
[in]inFrameOnesSpecifies the frame "ones" digit value.
Note
Each digit is masked to the number of bits allotted in the payload. Note that the digit order is reversed!
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 127 of file ancillarydata_timecode.cpp.

◆ SetTimeHexValue()

AJAStatus AJAAncillaryData_Timecode::SetTimeHexValue ( const uint8_t  inDigitNum,
const uint8_t  inHexValue,
const uint8_t  inMask = 0x0f 
)
virtual

Sets my raw "time" hex values.

Parameters
[in]inDigitNumSpecifies the index (0-7) of time digits in "transmission" order: 0 = 1st (frame units) digit, 1 = 2nd digit, ... 7 = last (hour tens) digit.
[in]inHexValueSpecifies the hex value (least significant 4 bits) to be set.
[in]inMaskOptionally specifies which bits to set: (1 = set bit to new value, 0 = retain current bit value). Defaults to 0x0F.
Returns
AJA_STATUS_SUCCESS if successful.

Definition at line 103 of file ancillarydata_timecode.cpp.

◆ TimecodeString()

string AJAAncillaryData_Timecode::TimecodeString ( void  ) const
virtual
Returns
A string containing my human-readable timecode.

Definition at line 680 of file ancillarydata_timecode.cpp.

Member Data Documentation

◆ m_binaryGroup

uint8_t AJAAncillaryData_Timecode::m_binaryGroup[kNumBinaryGroups]
protected

Definition at line 304 of file ancillarydata_timecode.h.

◆ m_timeDigits

uint8_t AJAAncillaryData_Timecode::m_timeDigits[kNumTimeDigits]
protected

Definition at line 303 of file ancillarydata_timecode.h.


The documentation for this class was generated from the following files: