AJA NTV2 SDK  17.1.3.1410
NTV2 SDK 17.1.3.1410
Bug List
Member AJAAncillaryList::GetHDMITransmitData (NTV2Buffer &F1Buffer, NTV2Buffer &F2Buffer, const bool inIsProgressive=true, const uint32_t inF2StartLine=0)
TBD – not currently implemented.
Member AJAAncillaryList::GetVANCTransmitData (NTV2Buffer &inFrameBuffer, const NTV2FormatDescriptor &inFormatDesc)
Currently ignores each packet's horizontal offset (assumes AJAAncDataHorizOffset_Anywhere).
Member AJAAncillaryList::SetFromVANCData (const NTV2Buffer &inFrameBuffer, const NTV2FormatDescriptor &inFormatDesc, AJAAncillaryList &outPackets, const uint32_t inFrameNum=0)
The AJAAncDataLink in the AJAAncillaryDataLocation in each of the returned packets is currently AJAAncDataLink_A, which will be incorrect if, for example, the FrameStore that delivered the inFrameBuffer was sourced from the "B" link of a Dual-Link SDI source.
Class AJAPnp
This class has no Linux implementation.
Member AJAPnp::Install (AJAPnpCallback callback, void *refCon=NULL, uint32_t devices=0)
The current Windows implementation doesn't automatically invoke the callback for each attached device. As a workaround, the caller must explicitly enumerate the devices immediately before or after calling this function.
Member AJASystemInfo::ToString (const AJALabelValuePairs &inLabelValuePairs, const size_t inValueWrapLen=0, const size_t inGutterWidth=3)
Multi-byte UTF8 characters need to be counted as one character.
Member AJATimeCode::QueryRP188 (uint32_t &outDBB, uint32_t &outLo, uint32_t &outHi, const AJATimeBase &timeBase, const bool bDrop)
Unimplemented.
Member AJATimeCode::QueryRP188 (uint32_t *pDbb, uint32_t *pLow, uint32_t *pHigh, const AJATimeBase &timeBase, bool bDrop)
Unimplemented.
Member CNTV2Card::AutoCirculateTransfer (const NTV2Channel inChannel, AUTOCIRCULATE_TRANSFER &transferInfo)
For IP devices running S2110 firmware, this method performs many heap allocations in order to transparently support normal (VPID and RP188) and custom ancillary data. This feature should be re-implemented to use separate, per-channel, private, pre-allocated heaps for the STL objects and other buffers it uses.
Member CNTV2Card::GetConnectedInput (const NTV2OutputCrosspointID inOutputXpt, NTV2InputCrosspointID &outInputXpt)
If the output is connected to more than one widget input, this function only returns the first one found.
Member CNTV2Card::WaitForInputFieldID (const NTV2FieldID inFieldID, const NTV2Channel inChannel=NTV2_CHANNEL1)
On the Windows platform, the SDK uses an event to wait on, which only gets cleared by a previous call to Wait. Unfortunately, this is historically different from Linux and MacOS, where the event is always cleared before the Wait. Each method has advantages and disadvantages. To work around this:
  • Call GetInputVerticalInterruptCount before and after calling this function to verify that an interrupt really occurred;
  • Call CNTV2WinDriverInterface::GetInterruptEvent to get the event handle, and manually clear the event before calling this function.
Member CNTV2Card::WaitForInputVerticalInterrupt (const NTV2Channel inChannel=NTV2_CHANNEL1, UWord inRepeatCount=1)
On the Windows platform, the SDK uses an event to wait on, which only gets cleared by a previous call to Wait. Unfortunately, this is historically different from Linux and MacOS, where the event is always cleared before the Wait. Each method has advantages and disadvantages. To work around this:
  • Call GetInputVerticalInterruptCount before and after calling this function to verify that an interrupt really occurred;
  • Call CNTV2WinDriverInterface::GetInterruptEvent to get the event handle, and manually clear the event before calling this function.
Member CNTV2Card::WaitForOutputFieldID (const NTV2FieldID inFieldID, const NTV2Channel inChannel=NTV2_CHANNEL1)
On the Windows platform, the SDK uses an event to wait on, which only gets cleared by a prior call to CNTV2Card::WaitForOutputFieldID. This is historically different from Linux and MacOS, where the event is always cleared before the Wait. Each method has advantages and disadvantages. To work around this:
Member CNTV2Card::WaitForOutputVerticalInterrupt (const NTV2Channel inChannel=NTV2_CHANNEL1, UWord inRepeatCount=1)
On the Windows platform, the SDK uses an event to wait on, which only gets cleared by a prior call to WaitForOutputVerticalInterrupt. This is historically different from Linux and MacOS, where the event is always cleared before the Wait. Each method has advantages and disadvantages. To work around this:
Member CNTV2DriverInterface::WriteRegister (const ULWord inRegNum, const ULWord inValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
On MacOS, "holes" in the mask (i.e., one or more runs of 0-bits lying between more-significant and less-significant 1-bits) were not handled correctly.
Class CNTV2RegisterExpert
This class currently excludes bank-selected registers, so support logs for KONA IP and Io IP will be incomplete. This will be addressed in a future SDK.
Member CNTV2SMPTEAncData::InsertAnc (const UWord *pInAncBuff, const size_t inAncWordCount, const ULWord inLineOffset, const ULWord inWordOffset, ULWord *pFrameBuffer, const NTV2VideoFormat inVideoFormat, const NTV2FrameBufferFormat inFBFormat)
This function doesn't work for SD video formats, since SD packets use both luma and chroma channels.
Member CNTV2SMPTEAncData::InsertAncAtSmpteLine (const UWord *pInAncBuff, const ULWord inAncWordCount, const ULWord inSMPTELineNum, const ULWord inWordOffset, ULWord *pFrameBuffer, const NTV2VideoFormat inVideoFormat, const NTV2FrameBufferFormat inFBFormat)
This function doesn't work for SD video formats, since SD packets use both luma and chroma channels.
Member CopyRaster (const NTV2PixelFormat inPixelFormat, UByte *pDstBuffer, const ULWord inDstBytesPerLine, const UWord inDstTotalLines, const UWord inDstVertLineOffset, const UWord inDstHorzPixelOffset, const UByte *pSrcBuffer, const ULWord inSrcBytesPerLine, const UWord inSrcTotalLines, const UWord inSrcVertLineOffset, const UWord inSrcVertLinesToCopy, const UWord inSrcHorzPixelOffset, const UWord inSrcHorzPixelsToCopy)

This function doesn't work with planar formats.

Needs implementations for NTV2_FBF_10BIT_YCBCRA, NTV2_FBF_10BIT_RGB_PACKED, NTV2_FBF_10BIT_ARGB, NTV2_FBF_16BIT_ARGB.

Page NTV2 Device Hardware Operation
At this time, there is no API to support multi-link audio for low-latency (non-AutoCirculate) applications.
Class NTV2TestPatternGen
NTV2TestPatternGen doesn't work for planar formats.
Member NTV2TestPatternGen::DrawTestPattern (const std::string &inTPName, const NTV2FormatDescriptor &inFormatDesc, NTV2Buffer &inBuffer)
Needs planar pixel format implementations.
Member NTV2TestPatternGen::DrawTestPattern (const NTV2TestPatternSelect inPattern, const NTV2FormatDescriptor &inFormatDesc, NTV2Buffer &inBuffer)
Needs planar pixel format implementations.
Member NTV2TestPatternGen::findRGBColorByName (const std::string &inName)
As currently implemented and documented, this function only returns 8-bit deep color values.
Member poptConfigFileToString (FILE *fp, char **argstrp, int flags)

NULL is returned if file line is too long.

Silently ignores invalid lines.

Member SetRasterLinesBlack (const NTV2PixelFormat inPixelFormat, UByte *pDstBuffer, const ULWord inDstBytesPerLine, const UWord inDstTotalLines)
Need implementations for numerous pixel formats.
Member SetRasterLinesWhite (const NTV2PixelFormat inPixelFormat, UByte *pDstBuffer, const ULWord inDstBytesPerLine, const UWord inDstTotalLines)
Need implementations for numerous pixel formats.
Page Tools and Utilities

On Windows, prior to SDK 16.2, elevated user privileges were required for the first process to create the AJADebug facility’s global shared memory region. Before any kind of logging could be done, the first AJADebug client (a process that calls AJADebug::Open) must be “Run as Administrator”. Once this was done, all subsequent processes calling AJADebug::Open could read or write log messages.

NTV2Watcher keeps some persistent settings data in a local config file. If this file gets corrupted, it can cause NTV2Watcher to hang or crash upon startup. To work around this issue:

  • Linux — Delete the ‘NTV2Watcher.conf’ file from your local app data folder ‘~/.config/aja’.
  • Mac OS — Delete the ‘NTV2Watcher’ folder from your local app data (in ‘/Users/username/Library/Application Support/AJA’).
  • Windows — Delete the ‘NTV2Watcher’ folder from your local app data (in ‘/Users/username/AppData/Local/aja’).