obs-studio/build_dependencies/aja/include/ajalibraries/ajantv2/includes/ntv2utils.h
Ward Nakchbandi b48576284b first commit
2023-03-04 20:33:16 +03:00

1138 lines
70 KiB
C++

/* SPDX-License-Identifier: MIT */
/**
@file ntv2utils.h
@brief Declares numerous NTV2 utility functions.
@copyright (C) 2004-2021 AJA Video Systems, Inc.
**/
#ifndef NTV2UTILS_H
#define NTV2UTILS_H
#include "ajaexport.h"
#include "ajatypes.h"
#include "ntv2enums.h"
#include "ntv2videodefines.h"
#include "ntv2publicinterface.h"
#include "ntv2formatdescriptor.h"
#include "ntv2m31publicinterface.h"
#include "ntv2signalrouter.h"
#include <string>
#include <iostream>
#include <vector>
#if defined (AJALinux)
#include <stdint.h>
#endif
#define Enum2Str(e) {e, #e},
//////////////////////////////////////////////////////
// BEGIN SECTION MOVED FROM 'videoutilities.h'
//////////////////////////////////////////////////////
#define DEFAULT_PATT_GAIN 0.9 // some patterns pay attention to this...
#define HD_NUMCOMPONENTPIXELS_2K 2048
#define HD_NUMCOMPONENTPIXELS_1080_2K 2048
#define HD_NUMCOMPONENTPIXELS_1080 1920
#define CCIR601_10BIT_BLACK 64
#define CCIR601_10BIT_WHITE 940
#define CCIR601_10BIT_CHROMAOFFSET 512
#define CCIR601_8BIT_BLACK 16
#define CCIR601_8BIT_WHITE 235
#define CCIR601_8BIT_CHROMAOFFSET 128
// line pitch is in bytes.
#define FRAME_0_BASE (0x0)
#define FRAME_1080_10BIT_LINEPITCH (1280*4)
#define FRAME_1080_8BIT_LINEPITCH (1920*2)
#define FRAME_QUADHD_10BIT_SIZE (FRAME_1080_10BIT_LINEPITCH*2160)
#define FRAME_QUADHD_8BIT_SIZE (FRAME_1080_8BIT_LINEPITCH*2160)
#define FRAME_BASE(__frameNum__,__frameSize__) ((__frameNum__)*(__frameSize__))
AJAExport NTV2_SHOULD_BE_DEPRECATED(uint32_t CalcRowBytesForFormat (const NTV2FrameBufferFormat inPF, const uint32_t pixWidth)); ///< @deprecated This function doesn't support planar pixel formats. Use ::NTV2FormatDescriptor instead.
AJAExport void UnPack10BitYCbCrBuffer (uint32_t* packedBuffer, uint16_t* ycbcrBuffer, uint32_t numPixels);
AJAExport void PackTo10BitYCbCrBuffer (const uint16_t *ycbcrBuffer, uint32_t *packedBuffer, const uint32_t numPixels);
AJAExport void MakeUnPacked10BitYCbCrBuffer (uint16_t* buffer, uint16_t Y , uint16_t Cb , uint16_t Cr,uint32_t numPixels);
AJAExport void ConvertLineTo8BitYCbCr (const uint16_t * ycbcr10BitBuffer, uint8_t * ycbcr8BitBuffer, const uint32_t numPixels);
AJAExport void ConvertUnpacked10BitYCbCrToPixelFormat (uint16_t *unPackedBuffer, uint32_t *packedBuffer, uint32_t numPixels, NTV2FrameBufferFormat pixelFormat,
bool bUseSmpteRange=false, bool bAlphaFromLuma=false);
AJAExport void MaskUnPacked10BitYCbCrBuffer (uint16_t* ycbcrUnPackedBuffer, uint16_t signalMask , uint32_t numPixels);
AJAExport void StackQuadrants (uint8_t* pSrc, uint32_t srcWidth, uint32_t srcHeight, uint32_t srcRowBytes, uint8_t* pDst);
AJAExport void CopyFromQuadrant (uint8_t* srcBuffer, uint32_t srcHeight, uint32_t srcRowBytes, uint32_t srcQuadrant, uint8_t* dstBuffer, uint32_t quad13Offset=0);
AJAExport void CopyToQuadrant (uint8_t* srcBuffer, uint32_t srcHeight, uint32_t srcRowBytes, uint32_t dstQuadrant, uint8_t* dstBuffer, uint32_t quad13Offset=0);
//////////////////////////////////////////////////////
// END SECTION MOVED FROM 'videoutilities.h'
//////////////////////////////////////////////////////
/**
@brief Unpacks a line of NTV2_FBF_10BIT_YCBCR video into 16-bit-per-component YUV data.
@param[in] pIn10BitYUVLine A valid, non-NULL pointer to the start of the line that contains the NTV2_FBF_10BIT_YCBCR data
to be converted.
@param[out] out16BitYUVLine Receives the unpacked 16-bit-per-component YUV data. The sequence is cleared before filling.
The UWord sequence will be Cb0, Y0, Cr0, Y1, Cb1, Y2, Cr1, Y3, Cb2, Y4, Cr2, Y5, . . .
@param[in] inNumPixels Specifies the width of the line to be converted, in pixels.
@return True if successful; otherwise false.
**/
AJAExport bool UnpackLine_10BitYUVtoUWordSequence (const void * pIn10BitYUVLine, UWordSequence & out16BitYUVLine, ULWord inNumPixels);
/**
@brief Packs a line of 16-bit-per-component YCbCr (NTV2_FBF_10BIT_YCBCR) video into 10-bit-per-component YCbCr data.
@param[in] in16BitYUVLine The UWordSequence that contains the 16-bit-per-component YUV data to be converted into
10-bit-per-component YUV.
@param[out] pOut10BitYUVLine A valid, non-NULL pointer to the output buffer to receive the packed 10-bit-per-component YUV data.
@param[in] inNumPixels Specifies the width of the line to be converted, in pixels.
@return True if successful; otherwise false.
**/
AJAExport bool PackLine_UWordSequenceTo10BitYUV (const UWordSequence & in16BitYUVLine, ULWord * pOut10BitYUVLine, const ULWord inNumPixels);
/**
@brief Packs up to one raster line of uint16_t YUV components into an NTV2_FBF_10BIT_YCBCR frame buffer.
@param[in] inYCbCrLine The YUV components to be packed into the frame buffer. This must contain at least 12 values.
@param inFrameBuffer The frame buffer in host memory that is to be modified.
@param[in] inDescriptor The NTV2FormatDescriptor that describes the frame buffer.
@param[in] inLineOffset The zero-based line offset into the frame buffer where the packed components will be written.
@return True if successful; otherwise false.
@note Neighboring components in the packed output will be corrupted if input component values exceed 0x3FF.
@note This is a safer version of the ::PackLine_UWordSequenceTo10BitYUV function.
**/
AJAExport bool YUVComponentsTo10BitYUVPackedBuffer (const std::vector<uint16_t> & inYCbCrLine, NTV2_POINTER & inFrameBuffer,
const NTV2FormatDescriptor & inDescriptor, const UWord inLineOffset);
/**
@brief Unpacks up to one raster line of an NTV2_FBF_10BIT_YCBCR frame buffer into an array of uint16_t values
containing the 10-bit YUV data.
@param[out] outYCbCrLine The YUV components unpacked from the frame buffer. This will be cleared upon entry, and
if successful, will contain at least 12 values upon exit.
@param inFrameBuffer The frame buffer in host memory that is to be read.
@param[in] inDescriptor The NTV2FormatDescriptor that describes the frame buffer.
@param[in] inLineOffset The zero-based line offset into the frame buffer.
@return True if successful; otherwise false.
@note This is a safer version of the ::UnpackLine_10BitYUVtoUWordSequence function.
**/
AJAExport bool UnpackLine_10BitYUVtoU16s (std::vector<uint16_t> & outYCbCrLine, const NTV2_POINTER & inFrameBuffer,
const NTV2FormatDescriptor & inDescriptor, const UWord inLineOffset);
#if !defined (NTV2_DEPRECATE)
AJAExport NTV2_DEPRECATED_f(void UnPackLineData (const ULWord * pIn10BitYUVLine, UWord * pOut16BitYUVLine, const ULWord inNumPixels)); ///< @deprecated Replaced by UnpackLine_10BitYUVto16BitYUV.
AJAExport NTV2_DEPRECATED_f(void PackLineData (const UWord * pIn16BitYUVLine, ULWord * pOut10BitYUVLine, const ULWord inNumPixels)); ///< @deprecated Replaced by PackLine_16BitYUVto10BitYUV.
#endif // NTV2_DEPRECATE
/**
@brief Unpacks a line of 10-bit-per-component YCbCr video into 16-bit-per-component YCbCr (NTV2_FBF_10BIT_YCBCR) data.
@param[in] pIn10BitYUVLine A valid, non-NULL pointer to the input buffer that contains the packed 10-bit-per-component YUV data
to be converted into 16-bit-per-component YUV.
@param[out] pOut16BitYUVLine A valid, non-NULL pointer to the output buffer to receive the unpacked 16-bit-per-component YUV data.
@param[in] inNumPixels Specifies the width of the line to be converted, in pixels.
**/
AJAExport void UnpackLine_10BitYUVto16BitYUV (const ULWord * pIn10BitYUVLine, UWord * pOut16BitYUVLine, const ULWord inNumPixels);
/**
@brief Packs a line of 16-bit-per-component YCbCr (NTV2_FBF_10BIT_YCBCR) video into 10-bit-per-component YCbCr data.
@param[in] pIn16BitYUVLine A valid, non-NULL pointer to the input buffer that contains the 16-bit-per-component YUV data to be
converted into 10-bit-per-component YUV.
@param[out] pOut10BitYUVLine A valid, non-NULL pointer to the output buffer to receive the packed 10-bit-per-component YUV data.
@param[in] inNumPixels Specifies the width of the line to be converted, in pixels.
**/
AJAExport void PackLine_16BitYUVto10BitYUV (const UWord * pIn16BitYUVLine, ULWord * pOut10BitYUVLine, const ULWord inNumPixels);
AJAExport void RePackLineDataForYCbCrDPX (ULWord *packedycbcrLine, ULWord numULWords);
AJAExport void UnPack10BitDPXtoRGBAlpha10BitPixel (RGBAlpha10BitPixel* rgba10BitBuffer, const ULWord * DPXLinebuffer, ULWord numPixels, bool bigEndian);
AJAExport void UnPack10BitDPXtoForRP215withEndianSwap(UWord* rawrp215Buffer,ULWord* DPXLinebuffer ,ULWord numPixels);
AJAExport void UnPack10BitDPXtoForRP215(UWord* rawrp215Buffer,ULWord* DPXLinebuffer ,ULWord numPixels);
AJAExport void MaskYCbCrLine(UWord* ycbcrLine, UWord signalMask , ULWord numPixels);
/**
@brief Writes a line of unpacked 10-bit Y/C legal SMPTE black values into the given UWord buffer.
@param[in] pOutLineData A valid, non-NULL pointer to the destination UWord buffer.
@param[in] inNumPixels Specifies the width of the line, in pixels. Defaults to 1920.
@warning This function performs no error checking. Memory corruption will occur if the destination buffer
is smaller than 4 x inNumPixels bytes (i.e. smaller than 2 x inNumPixels UWords).
**/
AJAExport void Make10BitBlackLine (UWord * pOutLineData, const ULWord inNumPixels = 1920);
AJAExport void Make10BitWhiteLine(UWord* pOutLineData, const ULWord numPixels=1920);
#if !defined(NTV2_DEPRECATE_13_0)
AJAExport NTV2_DEPRECATED_f(void Fill10BitYCbCrVideoFrame (PULWord _baseVideoAddress,
const NTV2Standard inStandard,
const NTV2FrameBufferFormat inPixelFormat,
const YCbCr10BitPixel inPixelColor,
const bool inVancEnabled = false,
const bool in2Kx1080 = false,
const bool inWideVANC = false)); ///< @deprecated Use the identical function that accepts an ::NTV2VANCMode parameter instead of two booleans.
#endif // !defined(NTV2_DEPRECATE_13_0)
/**
@return True if successful; otherwise false.
**/
AJAExport bool Fill10BitYCbCrVideoFrame (void * pBaseVideoAddress,
const NTV2Standard inStandard,
const NTV2FrameBufferFormat inPixelFormat,
const YCbCr10BitPixel inPixelColor,
const NTV2VANCMode inVancMode = NTV2_VANCMODE_OFF);
AJAExport void Make8BitBlackLine(UByte* lineData,ULWord numPixels=1920,NTV2FrameBufferFormat=NTV2_FBF_8BIT_YCBCR);
AJAExport void Make8BitWhiteLine(UByte* lineData,ULWord numPixels=1920,NTV2FrameBufferFormat=NTV2_FBF_8BIT_YCBCR);
AJAExport void Make10BitLine(UWord* lineData, const UWord Y, const UWord Cb, const UWord Cr, const ULWord numPixels = 1920);
AJAExport void Make8BitLine(UByte* lineData, UByte Y , UByte Cb , UByte Cr,ULWord numPixels=1920,NTV2FrameBufferFormat=NTV2_FBF_8BIT_YCBCR);
#if !defined(NTV2_DEPRECATE_13_0)
AJAExport NTV2_DEPRECATED_f(void Fill8BitYCbCrVideoFrame (PULWord _baseVideoAddress,
const NTV2Standard inStandard,
const NTV2FrameBufferFormat inFBF,
const YCbCrPixel inPixelColor,
const bool inVancEnabled = false,
const bool in2Kx1080 = false,
const bool inWideVanc = false)); ///< @deprecated Use the identical function that accepts an ::NTV2VANCMode parameter instead of two booleans.
#endif // !defined(NTV2_DEPRECATE_13_0)
AJAExport bool Fill8BitYCbCrVideoFrame (void * pBaseVideoAddress, const NTV2Standard inStandard, const NTV2FrameBufferFormat inFBF,
const YCbCrPixel inPixelColor, const NTV2VANCMode inVancMode = NTV2_VANCMODE_OFF);
AJAExport void Fill4k8BitYCbCrVideoFrame(PULWord _baseVideoAddress,
NTV2FrameBufferFormat frameBufferFormat,
YCbCrPixel color,
bool vancEnabled=false,
bool b4k=false,
bool wideVANC=false);
AJAExport void CopyRGBAImageToFrame(ULWord* pSrcBuffer, ULWord srcHeight, ULWord srcWidth,
ULWord* pDstBuffer, ULWord dstHeight, ULWord dstWidth);
/**
@brief Sets all or part of a destination raster image to legal black.
@param[in] inPixelFormat Specifies the NTV2FrameBufferFormat of the destination buffer.
(Note that many pixel formats are not currently supported.)
@param pDstBuffer Specifies the address of the destination buffer to be modified. Must be non-NULL.
@param[in] inDstBytesPerLine The number of bytes per raster line of the destination buffer. Note that this value
is used to compute the maximum pixel width of the destination raster. Also note that
some pixel formats set constraints on this value (e.g., NTV2_FBF_10BIT_YCBCR requires
this be a multiple of 16, while NTV2_FBF_8BIT_YCBCR requires an even number).
Must exceed zero.
@param[in] inDstTotalLines The total number of raster lines to set to legal black. Must exceed zero.
@bug Need implementations for NTV2_FBF_8BIT_YCBCR_YUY2, NTV2_FBF_10BIT_DPX, NTV2_FBF_10BIT_YCBCR_DPX, NTV2_FBF_24BIT_RGB,
NTV2_FBF_24BIT_BGR, NTV2_FBF_10BIT_YCBCRA, NTV2_FBF_10BIT_DPX_LE, NTV2_FBF_48BIT_RGB, NTV2_FBF_10BIT_RGB_PACKED,
NTV2_FBF_10BIT_ARGB, NTV2_FBF_16BIT_ARGB, the 3-plane planar formats NTV2_FBF_8BIT_YCBCR_420PL3,
NTV2_FBF_8BIT_YCBCR_422PL3, NTV2_FBF_10BIT_YCBCR_420PL3_LE, and NTV2_FBF_10BIT_YCBCR_422PL3_LE, plus the 2-plane
planar formats NTV2_FBF_10BIT_YCBCR_420PL2, NTV2_FBF_10BIT_YCBCR_422PL2, NTV2_FBF_8BIT_YCBCR_420PL2, and
NTV2_FBF_8BIT_YCBCR_422PL2.
@return True if successful; otherwise false.
**/
AJAExport bool SetRasterLinesBlack (const NTV2FrameBufferFormat inPixelFormat,
UByte * pDstBuffer,
const ULWord inDstBytesPerLine,
const UWord inDstTotalLines);
/**
@brief Copies all or part of a source raster image into another raster at a given position.
@param[in] inPixelFormat Specifies the NTV2FrameBufferFormat of both the destination and source buffers.
(Note that many pixel formats are not currently supported.)
@param pDstBuffer Specifies the starting address of the destination buffer to be modified. Must be non-NULL.
@param[in] inDstBytesPerLine The number of bytes per raster line of the destination buffer. Note that this value
is used to compute the maximum pixel width of the destination raster. Also note that
some pixel formats set constraints on this value (e.g., NTV2_FBF_10BIT_YCBCR requires
this be a multiple of 16, while NTV2_FBF_8BIT_YCBCR requires an even number).
Must exceed zero.
@param[in] inDstTotalLines The maximum height of the destination buffer, in raster lines. Must exceed zero.
@param[in] inDstVertLineOffset Specifies the vertical line offset into the destination raster where the top edge
of the source image will appear. This value must be less than the inDstTotalLines
value (i.e., at least one line of the source must appear in the destination).
@param[in] inDstHorzPixelOffset Specifies the horizontal pixel offset into the destination raster where the left
edge of the source image will appear. This value must be less than the maximum
width of the destination raster (as stipulated by the inDstBytesPerLine parameter).
Thus, at least one pixel of the source (the leftmost edge) must appear in the destination
(at the right edge). Note that some pixel formats set constraints on this value (e.g.,
NTV2_FBF_10BIT_YCBCR requires this be a multiple of 6, while NTV2_FBF_8BIT_YCBCR requires
this to be even).
@param[in] pSrcBuffer Specifies the starting address of the source buffer to be copied from. Must be non-NULL.
@param[in] inSrcBytesPerLine The number of bytes per raster line of the source buffer. Note that this value is used
to compute the maximum pixel width of the source raster. Also note that some pixel formats
set constraints on this value (e.g., NTV2_FBF_10BIT_YCBCR requires this be a multiple
of 16, while NTV2_FBF_8BIT_YCBCR requires this to be even). Must exceed zero.
@param[in] inSrcTotalLines The maximum height of the source buffer, in raster lines. Must exceed zero.
@param[in] inSrcVertLineOffset Specifies the top edge of the source image to copy. This value must be less than
the inSrcTotalLines value.
@param[in] inSrcVertLinesToCopy Specifies the height of the source image to copy, in lines. This value can be larger
than what's possible. The function guarantees that lines past the bottom edge of the
source raster will not be accessed. It is not an error to specify zero, although
nothing will be copied.
@param[in] inSrcHorzPixelOffset Specifies the left edge of the source image to copy. This value must be less than the
maximum width of the source raster (as stipulated by the inSrcBytesPerLine parameter).
Note that some pixel formats set constraints on this value (e.g., NTV2_FBF_10BIT_YCBCR
requires this be a multiple of 6, while NTV2_FBF_8BIT_YCBCR requires this to be even).
@param[in] inSrcHorzPixelsToCopy Specifies the width of the source image to copy, in pixels. This value can be larger
than what's possible. This function will ensure that pixels past the right edge of the
source raster will not be accessed. It is not an error to specify zero, although nothing
will be copied. Note that some pixel formats set constraints on this value(e.g.,
NTV2_FBF_10BIT_YCBCR requires this be a multiple of 6, while NTV2_FBF_8BIT_YCBCR requires
this to be even).
@return True if successful; otherwise false.
@note The source and destination buffers MUST have the same pixel format.
@note The source and destination buffers must NOT point to the same buffer.
@note The use of unsigned values precludes positioning the source raster above the top line of the destination raster,
or to the left of the destination raster's left edge. This function will, however, clip the source raster if it
overhangs the bottom and/or right edge of the destination raster.
@note This function probably can't be made to work with planar formats.
@bug Needs implementations for NTV2_FBF_10BIT_YCBCRA, NTV2_FBF_10BIT_RGB_PACKED, NTV2_FBF_10BIT_ARGB,
NTV2_FBF_16BIT_ARGB.
**/
AJAExport bool CopyRaster (const NTV2FrameBufferFormat 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);
AJAExport NTV2Standard GetNTV2StandardFromScanGeometry (const UByte inScanGeometry, const bool inIsProgressiveTransport);
/**
@return The ::NTV2VideoFormat that is supported by the device (in frame buffer).
@param[in] inVideoFormat Specifies the input ::NTV2VideoFormat of interest.
**/
AJAExport NTV2VideoFormat GetSupportedNTV2VideoFormatFromInputVideoFormat (const NTV2VideoFormat inVideoFormat);
/**
@return The ::NTV2Standard that corresponds to the given ::NTV2VideoFormat.
@param[in] inVideoFormat Specifies the ::NTV2VideoFormat of interest.
@see ::GetNTV2FrameGeometryFromVideoFormat, ::GetGeometryFromStandard
**/
AJAExport NTV2Standard GetNTV2StandardFromVideoFormat (const NTV2VideoFormat inVideoFormat);
/**
@return The ::NTV2FrameGeometry that corresponds to the given ::NTV2VideoFormat.
@param[in] inVideoFormat Specifies the ::NTV2VideoFormat of interest.
@see ::GetNTV2StandardFromScanGeometry
**/
AJAExport NTV2FrameGeometry GetNTV2FrameGeometryFromVideoFormat (const NTV2VideoFormat inVideoFormat);
#if defined (NTV2_DEPRECATE)
#define GetHdmiV2StandardFromVideoFormat(__vf__) ::GetNTV2StandardFromVideoFormat (__vf__)
#else
AJAExport NTV2V2Standard GetHdmiV2StandardFromVideoFormat (NTV2VideoFormat videoFormat);
#endif
#if !defined(NTV2_DEPRECATE_13_0)
AJAExport NTV2_DEPRECATED_f(ULWord GetVideoActiveSize (const NTV2VideoFormat inVideoFormat,
const NTV2FrameBufferFormat inFBFormat,
const bool inVANCenabled,
const bool inWideVANC = false)); ///< @deprecated Use the same function that accepts an ::NTV2VANCMode instead of two booleans.
AJAExport NTV2_DEPRECATED_f(ULWord GetVideoWriteSize (const NTV2VideoFormat inVideoFormat,
const NTV2FrameBufferFormat inFBFormat,
const bool inVANCenabled,
const bool inWideVANC)); ///< @deprecated Use the same function that accepts an ::NTV2VANCMode instead of two booleans.
#endif // !defined(NTV2_DEPRECATE_13_0)
/**
@return The minimum number of bytes required to store a single frame of video in the given frame buffer format
having the given video format, including VANC lines, if any.
@param[in] inVideoFormat Specifies the video format.
@param[in] inFBFormat Specifies the frame buffer format.
@param[in] inVancMode Optionally specifies the VANC mode. Defaults to OFF (no VANC lines).
**/
AJAExport ULWord GetVideoActiveSize (const NTV2VideoFormat inVideoFormat,
const NTV2FrameBufferFormat inFBFormat,
const NTV2VANCMode inVancMode = NTV2_VANCMODE_OFF);
/**
@brief Identical to the ::GetVideoActiveSize function, except rounds the result up to the nearest 4K page
size multiple.
@return The number of bytes required to store a single frame of video in the given frame buffer format
having the given video format, including VANC lines, if any, rounded up to the nearest 4096-byte multiple.
@param[in] inVideoFormat Specifies the video format.
@param[in] inFBFormat Specifies the frame buffer format.
@param[in] inVancMode Optionally specifies the VANC mode. Defaults to OFF (no VANC lines).
@details Historically, this "nearest 4K page size" was necessary to get high-speed I/O bursting to work
between the AJA device and the Windows disk system. The file needed to be opened with FILE_FLAG_NO_BUFFERING
to bypass the file system cache.
**/
AJAExport ULWord GetVideoWriteSize (const NTV2VideoFormat inVideoFormat,
const NTV2FrameBufferFormat inFBFormat,
const NTV2VANCMode inVancMode = NTV2_VANCMODE_OFF);
AJAExport NTV2VideoFormat GetQuarterSizedVideoFormat (const NTV2VideoFormat inVideoFormat);
AJAExport NTV2VideoFormat GetQuadSizedVideoFormat (const NTV2VideoFormat inVideoFormat, const bool isSquareDivision = true);
AJAExport NTV2FrameGeometry GetQuarterSizedGeometry (const NTV2FrameGeometry inGeometry);
AJAExport NTV2FrameGeometry Get4xSizedGeometry (const NTV2FrameGeometry inGeometry);
AJAExport NTV2Standard GetQuarterSizedStandard (const NTV2Standard inGeometry);
AJAExport NTV2Standard Get4xSizedStandard (const NTV2Standard inGeometry, const bool bIs4k = false);
AJAExport double GetFramesPerSecond (const NTV2FrameRate inFrameRate);
inline double GetFrameTime (const NTV2FrameRate inFrameRate) {return double(1.0) / GetFramesPerSecond(inFrameRate);}
/**
@return The first NTV2VideoFormat that matches the given frame rate and raster dimensions (and whether it's interlaced or not).
@param[in] inFrameRate Specifies the frame rate of interest.
@param[in] inHeightLines Specifies the raster height, in lines of visible video.
@param[in] inWidthPixels Specifies the raster width, in pixels.
@param[in] inIsInterlaced Specify true for interlaced/psf video, or false for progressive.
@param[in] inIsLevelB Specify true for level B, or false for everything else.
@param[in] inIsPSF Specify true for segmented format false for everything else.
**/
AJAExport NTV2VideoFormat GetFirstMatchingVideoFormat (const NTV2FrameRate inFrameRate,
const UWord inHeightLines,
const UWord inWidthPixels,
const bool inIsInterlaced,
const bool inIsLevelB,
const bool inIsPSF);
/**
@brief Answers with the given frame rate, in frames per second, as two components:
the numerator and denominator of the fractional rate.
@param[in] inFrameRate Specifies the frame rate of interest.
@param[out] outFractionNumerator Receives the numerator of the fractional frame rate.
This will be zero if the function returns false.
@param[out] outFractionDenominator Receives the denominator of the fractional frame rate.
If the function is successful, this will be either 1000 or 1001.
This will be zero if the function returns false.
@return True if successful; otherwise false.
**/
AJAExport bool GetFramesPerSecond (const NTV2FrameRate inFrameRate, ULWord & outFractionNumerator, ULWord & outFractionDenominator);
/**
@param[in] inDevID Specifies the ::NTV2DeviceID of the device of interest.
@param[in] inFR Specifies the ::NTV2FrameRate of interest.
@param[in] inFG Specifies the ::NTV2FrameGeometry of interest.
@param[in] inStd Specifies the ::NTV2Standard of interest.
@deprecated This function is deprecated.
@note The implementation of this function is very inefficient. Do not call it every frame.
@return True if the device having the given NTV2DeviceID supports the given frame rate, geometry and standard.
**/
AJAExport NTV2_SHOULD_BE_DEPRECATED(bool NTV2DeviceCanDoFormat (const NTV2DeviceID inDevID, const NTV2FrameRate inFR, const NTV2FrameGeometry inFG, const NTV2Standard inStd));
/**
@brief Returns the number of audio samples for a given video frame rate, audio sample rate, and frame number.
This is useful since AJA devices use fixed audio sample rates (typically 48KHz), and some video frame
rates will necessarily result in some frames having more audio samples than others.
@param[in] inFrameRate Specifies the video frame rate.
@param[in] inAudioRate Specifies the audio sample rate. Must be one of NTV2_AUDIO_48K or NTV2_AUDIO_96K.
@param[in] inCadenceFrame Optionally specifies a frame number for maintaining proper cadence in a frame sequence,
for those video frame rates that don't accommodate an even number of audio samples.
Defaults to zero.
@param[in] inIsSMPTE372Enabled Specifies that 1080p60, 1080p5994 or 1080p50 is being used. In this mode, the device's
framerate might be NTV2_FRAMERATE_3000, but since 2 links are coming out, the video rate
is effectively NTV2_FRAMERATE_6000. Defaults to false.
@return The number of audio samples.
@see See \ref audiosamplecount
**/
AJAExport ULWord GetAudioSamplesPerFrame (const NTV2FrameRate inFrameRate, const NTV2AudioRate inAudioRate, ULWord inCadenceFrame = 0, bool inIsSMPTE372Enabled = false);
AJAExport LWord64 GetTotalAudioSamplesFromFrameNbrZeroUpToFrameNbr (NTV2FrameRate frameRate, NTV2AudioRate audioRate, ULWord frameNbrNonInclusive);
/**
@brief Returns the audio sample rate as a number of audio samples per second.
@param[in] inAudioRate Specifies the audio sample rate.
@return The number of audio samples per second, or zero upon failure.
@see See \ref audiosamplecount
**/
AJAExport double GetAudioSamplesPerSecond (const NTV2AudioRate inAudioRate); // New in SDK 16.2
AJAExport NTV2_SHOULD_BE_DEPRECATED(ULWord GetVaricamRepeatCount (const NTV2FrameRate inSequenceRate, const NTV2FrameRate inPlayRate, const ULWord inCadenceFrame = 0));
AJAExport ULWord GetScaleFromFrameRate (const NTV2FrameRate inFrameRate);
AJAExport NTV2FrameRate GetFrameRateFromScale (long scale, long duration, NTV2FrameRate playFrameRate);
AJAExport NTV2FrameRate GetNTV2FrameRateFromNumeratorDenominator (const ULWord inNumerator, const ULWord inDenominator); // New in SDK 16.0
/**
@return The NTV2FrameRate of the given NTV2VideoFormat.
@param[in] inVideoFormat Specifies the NTV2VideoFormat of interest.
@note This function is physical-transport-centric, so "B" formats will answer with the frame rate
of a single link. For example, ::NTV2_FORMAT_1080p_6000_B will result in ::NTV2_FRAMERATE_3000.
See \ref duallinkoverview for more information.
**/
AJAExport NTV2FrameRate GetNTV2FrameRateFromVideoFormat (const NTV2VideoFormat inVideoFormat);
/**
@return The equivalent non-VANC ::NTV2FrameGeometry value for a given ::NTV2FrameGeometry.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry to be normalized into its non-VANC equivalent.
@see ::GetVANCFrameGeometry
**/
AJAExport NTV2FrameGeometry GetNormalizedFrameGeometry (const NTV2FrameGeometry inFrameGeometry);
/**
@return The equivalent VANC ::NTV2FrameGeometry value for a given ::NTV2VANCMode.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry to be converted into its VANC equivalent.
@param[in] inVancMode Specifies the desired ::NTV2VANCMode.
@see ::GetNormalizedFrameGeometry
**/
AJAExport NTV2FrameGeometry GetVANCFrameGeometry (const NTV2FrameGeometry inFrameGeometry, const NTV2VANCMode inVancMode);
/**
@return The first matching ::NTV2FrameGeometry that matches the given ::NTV2FrameDimensions,
or ::NTV2_FG_INVALID if none match.
@param[in] inFD Specifies the ::NTV2FrameDimensions of interest.
**/
AJAExport NTV2FrameGeometry GetGeometryFromFrameDimensions (const NTV2FrameDimensions & inFD); // New in SDK 16.0
/**
@return True if the given ::NTV2FrameGeometry has tall or taller geometries associated with it;
otherwise false.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry.
@see ::GetVANCFrameGeometry
**/
AJAExport bool HasVANCGeometries (const NTV2FrameGeometry inFrameGeometry);
/**
@return An ::NTV2GeometrySet containing normal, tall and (possibly) taller frame geometries
that are associated with the given ::NTV2FrameGeometry; or an empty set if passed
an invalid geometry.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry. (Need not be normalized.)
@note The resulting set will, at the least, contain the given geometry (if valid).
@see ::GetVANCFrameGeometry
**/
AJAExport NTV2GeometrySet GetRelatedGeometries (const NTV2FrameGeometry inFrameGeometry);
/**
@return The equivalent NTV2VANCMode for a given ::NTV2FrameGeometry.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry.
@see ::GetVANCFrameGeometry
**/
AJAExport NTV2VANCMode GetVANCModeForGeometry (const NTV2FrameGeometry inFrameGeometry);
/**
@return The pixel width of the given ::NTV2FrameGeometry.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry of interest.
@see ::GetVANCFrameGeometry
**/
AJAExport ULWord GetNTV2FrameGeometryWidth (const NTV2FrameGeometry inFrameGeometry);
/**
@return The height, in lines, of the given ::NTV2FrameGeometry.
@param[in] inFrameGeometry Specifies the ::NTV2FrameGeometry of interest.
@see ::GetVANCFrameGeometry
**/
AJAExport ULWord GetNTV2FrameGeometryHeight (const NTV2FrameGeometry inFrameGeometry);
/**
@return The equivalent normalized (non-VANC) ::NTV2FrameGeometry value for a given ::NTV2Standard.
@param[in] inStandard Specifies the ::NTV2Standard to be converted into a normalized ::NTV2FrameGeometry.
**/
AJAExport NTV2FrameGeometry GetGeometryFromStandard (const NTV2Standard inStandard);
/**
@return The equivalent ::NTV2Standard for the given ::NTV2FrameGeometry.
@param[in] inGeometry Specifies the ::NTV2FrameGeometry to be converted into a ::NTV2Standard.
@param[in] inIsProgressive Specifies if the resulting Standard should have a progressive transport or not.
Defaults to true.
**/
AJAExport NTV2Standard GetStandardFromGeometry (const NTV2FrameGeometry inGeometry, const bool inIsProgressive = true);
AJAExport ULWord GetDisplayWidth (const NTV2VideoFormat videoFormat);
AJAExport ULWord GetDisplayHeight (const NTV2VideoFormat videoFormat);
AJAExport NTV2ConversionMode GetConversionMode (const NTV2VideoFormat inFormat, const NTV2VideoFormat outFormat);
AJAExport NTV2VideoFormat GetInputForConversionMode (const NTV2ConversionMode conversionMode);
AJAExport NTV2VideoFormat GetOutputForConversionMode (const NTV2ConversionMode conversionMode);
AJAExport NTV2Channel GetNTV2ChannelForIndex (const ULWord inIndex0);
AJAExport ULWord GetIndexForNTV2Channel (const NTV2Channel inChannel);
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2Crosspoint GetNTV2CrosspointChannelForIndex (const ULWord inIndex0));
AJAExport NTV2_SHOULD_BE_DEPRECATED(ULWord GetIndexForNTV2CrosspointChannel (const NTV2Crosspoint inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2Crosspoint GetNTV2CrosspointInputForIndex (const ULWord inIndex0));
AJAExport NTV2_SHOULD_BE_DEPRECATED(ULWord GetIndexForNTV2CrosspointInput (const NTV2Crosspoint inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2Crosspoint GetNTV2CrosspointForIndex (const ULWord inIndex0));
AJAExport NTV2_SHOULD_BE_DEPRECATED(ULWord GetIndexForNTV2Crosspoint (const NTV2Crosspoint inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(bool IsNTV2CrosspointInput (const NTV2Crosspoint inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(bool IsNTV2CrosspointOutput (const NTV2Crosspoint inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(std::string NTV2CrosspointToString (const NTV2Crosspoint inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2Channel NTV2CrosspointToNTV2Channel (const NTV2Crosspoint inCrosspointChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2Crosspoint NTV2ChannelToInputCrosspoint (const NTV2Channel inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2Crosspoint NTV2ChannelToOutputCrosspoint (const NTV2Channel inChannel));
AJAExport NTV2_SHOULD_BE_DEPRECATED(NTV2InputSource GetNTV2HDMIInputSourceForIndex (const ULWord inIndex0));
AJAExport NTV2VideoFormat GetTransportCompatibleFormat (const NTV2VideoFormat inFormat, const NTV2VideoFormat inTargetFormat);
AJAExport bool IsTransportCompatibleFormat (const NTV2VideoFormat inFormat1, const NTV2VideoFormat inFormat2);
/**
@return The input source that corresponds to an index value, or ::NTV2_INPUTSOURCE_INVALID upon failure.
@param[in] inIndex0 Specifies the unsigned, zero-based integer value to be converted into an equivalent ::NTV2InputSource.
@param[in] inKinds Optionally specifies the input source type (SDI, HDMI, Analog, etc.) of interest.
Defaults to ::NTV2_INPUTSOURCES_SDI.
**/
AJAExport NTV2InputSource GetNTV2InputSourceForIndex (const ULWord inIndex0, const NTV2InputSourceKinds inKinds = NTV2_INPUTSOURCES_SDI);
AJAExport ULWord GetIndexForNTV2InputSource (const NTV2InputSource inValue); // 0-based index
/**
@brief Converts the given ::NTV2Channel value into the equivalent input ::INTERRUPT_ENUMS value.
@param[in] inChannel Specifies the ::NTV2Channel to be converted.
@return The equivalent input ::INTERRUPT_ENUMS value.
**/
AJAExport INTERRUPT_ENUMS NTV2ChannelToInputInterrupt (const NTV2Channel inChannel);
/**
@brief Converts the given ::NTV2Channel value into the equivalent output ::INTERRUPT_ENUMS value.
@param[in] inChannel Specifies the ::NTV2Channel to be converted.
@return The equivalent output ::INTERRUPT_ENUMS value.
**/
AJAExport INTERRUPT_ENUMS NTV2ChannelToOutputInterrupt (const NTV2Channel inChannel);
/**
@brief Converts the given ::NTV2Channel value into the equivalent ::NTV2TCIndex value.
@param[in] inChannel Specifies the ::NTV2Channel to be converted.
@param[in] inEmbeddedLTC Specify true for embedded LTC. Defaults to false.
@param[in] inIsF2 Specify true for VITC2. Defaults to false.
@return The equivalent ::NTV2TCIndex value.
**/
AJAExport NTV2TCIndex NTV2ChannelToTimecodeIndex (const NTV2Channel inChannel, const bool inEmbeddedLTC = false, const bool inIsF2 = false);
/**
@return The NTV2TCIndexes that are associated with the given SDI connector.
@param[in] inSDIConnector The SDI connector of interest, specified as an ::NTV2Channel (a zero-based index number).
**/
AJAExport NTV2TCIndexes GetTCIndexesForSDIConnector (const NTV2Channel inSDIConnector);
/**
@brief Converts the given ::NTV2TCIndex value into the appropriate ::NTV2Channel value.
@param[in] inTCIndex Specifies the ::NTV2TCIndex to be converted.
@return The equivalent ::NTV2Channel value.
**/
AJAExport NTV2Channel NTV2TimecodeIndexToChannel (const NTV2TCIndex inTCIndex);
/**
@brief Converts the given ::NTV2TCIndex value into the appropriate ::NTV2InputSource value.
@param[in] inTCIndex Specifies the ::NTV2TCIndex to be converted.
@return The equivalent ::NTV2InputSource value.
**/
AJAExport NTV2InputSource NTV2TimecodeIndexToInputSource (const NTV2TCIndex inTCIndex);
#define GetTCIndexesForSDIInput GetTCIndexesForSDIConnector
#define NTV2ChannelToCaptureCrosspoint NTV2ChannelToInputCrosspoint
#define NTV2ChannelToIngestCrosspoint NTV2ChannelToInputCrosspoint
#define NTV2ChannelToInputChannelSpec NTV2ChannelToInputCrosspoint
#define NTV2ChannelToPlayoutCrosspoint NTV2ChannelToOutputCrosspoint
#define NTV2ChannelToOutputChannelSpec NTV2ChannelToOutputCrosspoint
/**
@brief Converts the given ::NTV2Framesize value into an exact byte count.
@param[in] inFrameSize Specifies the ::NTV2Framesize to be converted.
@return The equivalent number of bytes.
**/
AJAExport ULWord NTV2FramesizeToByteCount (const NTV2Framesize inFrameSize);
/**
@brief Converts the given NTV2BufferSize value into its exact byte count.
@param[in] inBufferSize Specifies the NTV2AudioBufferSize to be converted.
@return The equivalent number of bytes.
**/
AJAExport ULWord NTV2AudioBufferSizeToByteCount (const NTV2AudioBufferSize inBufferSize);
/**
@brief Converts the given NTV2Channel value into its equivalent NTV2EmbeddedAudioInput.
@param[in] inChannel Specifies the NTV2Channel to be converted.
@return The equivalent NTV2EmbeddedAudioInput value.
**/
AJAExport NTV2EmbeddedAudioInput NTV2ChannelToEmbeddedAudioInput (const NTV2Channel inChannel);
/**
@brief Converts a given NTV2InputSource to its equivalent NTV2EmbeddedAudioInput value.
@param[in] inInputSource Specifies the NTV2InputSource to be converted.
@return The equivalent NTV2EmbeddedAudioInput value.
**/
AJAExport NTV2EmbeddedAudioInput NTV2InputSourceToEmbeddedAudioInput (const NTV2InputSource inInputSource);
/**
@param[in] inInputSource Specifies the NTV2InputSource.
@return The NTV2AudioSource that corresponds to the given NTV2InputSource.
**/
AJAExport NTV2AudioSource NTV2InputSourceToAudioSource (const NTV2InputSource inInputSource);
/**
@brief Converts a given NTV2InputSource to its equivalent NTV2Crosspoint value.
@param[in] inInputSource Specifies the NTV2InputSource to be converted.
@return The equivalent NTV2Crosspoint value.
**/
AJAExport NTV2Crosspoint NTV2InputSourceToChannelSpec (const NTV2InputSource inInputSource);
/**
@brief Converts a given NTV2InputSource to its equivalent NTV2Channel value.
@param[in] inInputSource Specifies the NTV2InputSource to be converted.
@return The equivalent NTV2Channel value.
**/
AJAExport NTV2Channel NTV2InputSourceToChannel (const NTV2InputSource inInputSource);
/**
@brief Converts a given NTV2InputSource to its equivalent NTV2ReferenceSource value.
@param[in] inInputSource Specifies the NTV2InputSource to be converted.
@return The equivalent NTV2ReferenceSource value.
**/
AJAExport NTV2ReferenceSource NTV2InputSourceToReferenceSource (const NTV2InputSource inInputSource);
/**
@brief Converts a given NTV2InputSource to its equivalent NTV2AudioSystem value.
@param[in] inInputSource Specifies the NTV2InputSource to be converted.
@return The equivalent NTV2AudioSystem value.
**/
AJAExport NTV2AudioSystem NTV2InputSourceToAudioSystem (const NTV2InputSource inInputSource);
/**
@brief Converts a given NTV2InputSource to its equivalent NTV2TimecodeIndex value.
@param[in] inInputSource Specifies the NTV2InputSource to be converted.
@param[in] inEmbeddedLTC Specify true for embedded ATC LTC. Defaults to false.
@return The equivalent NTV2TimecodeIndex value.
**/
AJAExport NTV2TimecodeIndex NTV2InputSourceToTimecodeIndex (const NTV2InputSource inInputSource, const bool inEmbeddedLTC = false);
/**
@brief Converts the given NTV2Channel value into its equivalent NTV2AudioSystem.
@param[in] inChannel Specifies the NTV2Channel to be converted.
@return The equivalent NTV2AudioSystem value.
**/
AJAExport NTV2AudioSystem NTV2ChannelToAudioSystem (const NTV2Channel inChannel);
/**
@param[in] inChannel Specifies the NTV2Channel to be converted.
@param[in] inKinds Specifies the type of input source of interest (SDI, HDMI, etc.).
Defaults to SDI.
@return The NTV2InputSource value that corresponds to the given NTV2Channel value.
**/
AJAExport NTV2InputSource NTV2ChannelToInputSource (const NTV2Channel inChannel, const NTV2InputSourceKinds inKinds = NTV2_INPUTSOURCES_SDI);
/**
@brief Converts a given NTV2OutputDestination to its equivalent NTV2Channel value.
@param[in] inOutputDest Specifies the NTV2OutputDestination to be converted.
@return The equivalent NTV2Channel value.
**/
AJAExport NTV2Channel NTV2OutputDestinationToChannel (const NTV2OutputDestination inOutputDest);
/**
@brief Converts the given NTV2Channel value into its ordinary equivalent NTV2OutputDestination.
@param[in] inChannel Specifies the NTV2Channel to be converted.
@return The equivalent NTV2OutputDestination value.
**/
AJAExport NTV2OutputDestination NTV2ChannelToOutputDestination (const NTV2Channel inChannel);
/**
@return The frame rate family that the given ::NTV2FrameRate belongs to.
(This is the ::NTV2FrameRate of the family having the lowest ordinal value.)
@param[in] inFrameRate Specifies the frame rate of interest.
**/
AJAExport NTV2FrameRate GetFrameRateFamily (const NTV2FrameRate inFrameRate);
/**
@brief Compares two frame rates and returns true if they are "compatible" (with respect to a multiformat-capable device).
@param[in] inFrameRate1 Specifies one of the frame rates to be compared.
@param[in] inFrameRate2 Specifies another frame rate to be compared.
**/
AJAExport bool IsMultiFormatCompatible (const NTV2FrameRate inFrameRate1, const NTV2FrameRate inFrameRate2);
/**
@brief Compares two video formats and returns true if they are "compatible" (with respect to a multiformat-capable device).
@param[in] inFormat1 Specifies one of the video formats to be compared.
@param[in] inFormat2 Specifies another video format to be compared.
**/
AJAExport bool IsMultiFormatCompatible (const NTV2VideoFormat inFormat1, const NTV2VideoFormat inFormat2);
AJAExport bool IsPSF (const NTV2VideoFormat format);
AJAExport bool IsProgressivePicture (const NTV2VideoFormat format);
AJAExport bool IsProgressiveTransport (const NTV2VideoFormat format);
AJAExport bool IsProgressiveTransport (const NTV2Standard format);
AJAExport bool IsRGBFormat (const NTV2FrameBufferFormat format);
AJAExport bool IsYCbCrFormat (const NTV2FrameBufferFormat format);
AJAExport bool IsAlphaChannelFormat (const NTV2FrameBufferFormat format);
AJAExport bool Is2KFormat (const NTV2VideoFormat format);
AJAExport bool Is4KFormat (const NTV2VideoFormat format);
AJAExport bool Is8KFormat (const NTV2VideoFormat format);
AJAExport bool IsRaw (const NTV2FrameBufferFormat format);
AJAExport bool Is8BitFrameBufferFormat (const NTV2FrameBufferFormat fbFormat);
AJAExport bool IsVideoFormatA (const NTV2VideoFormat format);
AJAExport bool IsVideoFormatB (const NTV2VideoFormat format);
AJAExport bool IsVideoFormatJ2KSupported (const NTV2VideoFormat format);
AJAExport int RecordCopyAudio (PULWord pAja, PULWord pSR, int iStartSample, int iNumBytes, int iChan0,
int iNumChans, bool bKeepAudio24Bits);
/**
@brief Fills the given buffer with 32-bit (ULWord) audio tone samples.
@param pAudioBuffer If non-NULL, must be a valid pointer to the buffer to be filled with audio samples,
and must be at least 4 x numSamples x numChannels bytes in size.
Callers may specify NULL to have the function return the required size of the buffer.
@param inOutCurrentSample On entry, specifies the sample where waveform generation is to resume.
If audioBuffer is non-NULL, on exit, receives the sample number where waveform generation left off.
Callers should specify zero for the first invocation of this function.
@param[in] inNumSamples Specifies the number of samples to generate.
@param[in] inSampleRate Specifies the sample rate, in samples per second.
@param[in] inAmplitude Specifies the amplitude of the generated tone.
@param[in] inFrequency Specifies the frequency of the generated tone, in cycles per second (Hertz).
@param[in] inNumBits Specifies the number of bits per sample. Should be between 8 and 32 (inclusive).
@param[in] inByteSwap If true, byte-swaps each 32-bit sample before copying it into the destination buffer.
@param[in] inNumChannels Specifies the number of audio channels to produce.
@return The total number of bytes written into the destination buffer (or if audioBuffer is NULL, the minimum
required size of the destination buffer, in bytes).
**/
AJAExport ULWord AddAudioTone ( ULWord * pAudioBuffer,
ULWord & inOutCurrentSample,
const ULWord inNumSamples,
const double inSampleRate,
const double inAmplitude,
const double inFrequency,
const ULWord inNumBits,
const bool inByteSwap,
const ULWord inNumChannels);
/**
@brief Fills the given buffer with 32-bit (ULWord) audio tone samples with a different frequency in each audio channel.
@param pAudioBuffer If non-NULL, must be a valid pointer to the buffer to be filled with audio samples,
and must be at least 4 x numSamples x numChannels bytes in size.
Callers may specify NULL to have the function return the required size of the buffer.
@param inOutCurrentSample On entry, specifies the sample where waveform generation is to resume.
If audioBuffer is non-NULL, on exit, receives the sample number where waveform generation left off.
Callers should specify zero for the first invocation of this function.
@param[in] inNumSamples Specifies the number of samples to generate.
@param[in] inSampleRate Specifies the sample rate, in samples per second.
@param[in] pInAmplitudes A valid, non-NULL pointer to an array of per-channel amplitude values.
This array must contain at least "inNumChannels" entries.
@param[in] pInFrequencies A valid, non-NULL pointer to an array of per-channel frequency values, in cycles per second (Hertz).
This array must contain at least "inNumChannels" entries.
@param[in] inNumBits Specifies the number of bits per sample. Should be between 8 and 32 (inclusive).
@param[in] inByteSwap If true, byte-swaps each 32-bit sample before copying it into the destination buffer.
@param[in] inNumChannels Specifies the number of audio channels to produce.
@return The total number of bytes written into the destination buffer (or if audioBuffer is NULL, the minimum
required size of the destination buffer, in bytes).
**/
AJAExport ULWord AddAudioTone ( ULWord * pAudioBuffer,
ULWord & inOutCurrentSample,
const ULWord inNumSamples,
const double inSampleRate,
const double * pInAmplitudes,
const double * pInFrequencies,
const ULWord inNumBits,
const bool inByteSwap,
const ULWord inNumChannels);
/**
@brief Fills the given buffer with 16-bit (UWord) audio tone samples.
@param pAudioBuffer If non-NULL, must be a valid pointer to the buffer to be filled with audio samples,
and must be at least numSamples*2*numChannels bytes in size.
Callers may specify NULL to have the function return the required size of the buffer.
@param inOutCurrentSample On entry, specifies the sample where waveform generation is to resume.
If audioBuffer is non-NULL, on exit, receives the sample number where waveform generation left off.
Callers should specify zero for the first invocation of this function.
@param[in] inNumSamples Specifies the number of samples to generate.
@param[in] inSampleRate Specifies the sample rate, in samples per second.
@param[in] inAmplitude Specifies the amplitude of the generated tone.
@param[in] inFrequency Specifies the frequency of the generated tone, in cycles per second (Hertz).
@param[in] inNumBits Specifies the number of bits per sample. Should be between 8 and 16 (inclusive).
@param[in] inByteSwap If true, byte-swaps each 16-bit sample before copying it into the destination buffer.
@param[in] inNumChannels Specifies the number of audio channels to produce.
@return The total number of bytes written into the destination buffer (or if audioBuffer is NULL, the minimum
required size of the destination buffer, in bytes).
**/
AJAExport ULWord AddAudioTone ( UWord * pAudioBuffer,
ULWord & inOutCurrentSample,
const ULWord inNumSamples,
const double inSampleRate,
const double inAmplitude,
const double inFrequency,
const ULWord inNumBits,
const bool inByteSwap,
const ULWord inNumChannels);
AJAExport ULWord AddAudioTestPattern (ULWord * pAudioBuffer,
ULWord & inOutCurrentSample,
const ULWord inNumSamples,
const ULWord inModulus,
const bool inEndianConvert,
const ULWord inNumChannels);
#if !defined (NTV2_DEPRECATE)
AJAExport bool BuildRoutingTableForOutput (CNTV2SignalRouter & outRouter,
NTV2Channel channel,
NTV2FrameBufferFormat fbf,
bool convert = false, // ignored
bool lut = false,
bool dualLink = false,
bool keyOut = false);
AJAExport bool BuildRoutingTableForInput (CNTV2SignalRouter & outRouter,
NTV2Channel channel,
NTV2FrameBufferFormat fbf,
bool withKey = false,
bool lut = false,
bool dualLink = false,
bool EtoE = true);
AJAExport bool BuildRoutingTableForInput (CNTV2SignalRouter & outRouter,
NTV2Channel channel,
NTV2FrameBufferFormat fbf,
bool convert, // Turn on the conversion module
bool withKey, // only supported for ::NTV2_CHANNEL1 for rgb formats with alpha
bool lut, // not supported
bool dualLink, // assume coming in RGB(only checked for ::NTV2_CHANNEL1
bool EtoE);
AJAExport bool BuildRoutingTableForInput (CNTV2SignalRouter & outRouter,
NTV2InputSource inputSource,
NTV2Channel channel,
NTV2FrameBufferFormat fbf,
bool convert, // Turn on the conversion module
bool withKey, // only supported for ::NTV2_CHANNEL1 for rgb formats with alpha
bool lut, // not supported
bool dualLink, // assume coming in RGB(only checked for ::NTV2_CHANNEL1
bool EtoE);
AJAExport ULWord ConvertFusionAnalogToTempCentigrade (ULWord adc10BitValue);
AJAExport ULWord ConvertFusionAnalogToMilliVolts (ULWord adc10BitValue, ULWord millivoltsResolution);
#endif // !defined (NTV2_DEPRECATE)
/**
@brief Writes the given NTV2FrameDimensions to the specified output stream.
@param inOutStream Specifies the output stream to receive the human-readable representation of the NTV2FrameDimensions.
@param[in] inFrameDimensions Specifies the NTV2FrameDimensions to print to the output stream.
@return A non-constant reference to the specified output stream.
**/
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2FrameDimensions inFrameDimensions);
/**
@brief Used to describe Start of Active Video (SAV) location and field dominance for a given NTV2Standard.
(See GetSmpteLineNumber function.)
**/
typedef struct AJAExport NTV2SmpteLineNumber
{
ULWord smpteFirstActiveLine; ///< @brief SMPTE line number of first (top-most) active line of video
ULWord smpteSecondActiveLine; ///< @brief SMPTE line number of second active line of video
bool firstFieldTop; ///< @brief True if the first field on the wire is the top-most field in the raster (field dominance)
private:
NTV2Standard mStandard; ///< @brief The NTV2Standard I was constructed from
public:
/**
@brief Constructs me from a given NTV2Standard.
@param[in] inStandard Specifies the NTV2Standard.
**/
explicit NTV2SmpteLineNumber (const NTV2Standard inStandard = NTV2_STANDARD_INVALID);
/**
@return True if valid; otherwise false.
**/
inline bool IsValid (void) const {return NTV2_IS_VALID_STANDARD (mStandard) && smpteFirstActiveLine;}
/**
@returns The SMPTE line number of the Start of Active Video (SAV).
@param[in] inRasterFieldID Specifies a valid raster field ID (not the wire field ID).
Defaults to NTV2_FIELD0 (i.e. first field) of the raster.
Use NTV2_FIELD1 for the starting line of a PsF frame.
**/
ULWord GetFirstActiveLine (const NTV2FieldID inRasterFieldID = NTV2_FIELD0) const;
/**
@returns The SMPTE line number of the last raster line.
@param[in] inRasterFieldID Specifies a valid raster field ID (not the wire field ID).
Defaults to NTV2_FIELD0 (i.e. first field) of the raster.
Use NTV2_FIELD1 for the starting line of a PsF frame.
**/
ULWord GetLastLine (const NTV2FieldID inRasterFieldID = NTV2_FIELD0) const;
/**
@return True if I'm equal to the given NTV2SmpteLineNumber.
@param[in] inRHS The right-hand-side operand that I'll be compared with.
**/
bool operator == (const NTV2SmpteLineNumber & inRHS) const;
/**
@brief Writes a human-readable description of me into the given output stream.
@param inOutStream The output stream to be written into.
@return The output stream I was handed.
**/
std::ostream & Print (std::ostream & inOutStream) const;
/**
@param[in] inLineOffset Specifies a line offset to add to the printed SMPTE line number.
Defaults to zero.
@param[in] inRasterFieldID Specifies a valid raster field ID (not the wire field ID).
Defaults to NTV2_FIELD0 (i.e. first field) of the raster.
@return A string containing the human-readable line number.
**/
std::string PrintLineNumber (const ULWord inLineOffset = 0, const NTV2FieldID inRasterFieldID = NTV2_FIELD0) const;
private:
explicit inline NTV2SmpteLineNumber (const ULWord inFirstActiveLine,
const ULWord inSecondActiveLine,
const bool inFirstFieldTop,
const NTV2Standard inStandard)
: smpteFirstActiveLine (inFirstActiveLine),
smpteSecondActiveLine (inSecondActiveLine),
firstFieldTop (inFirstFieldTop),
mStandard (inStandard) { }
} NTV2SmpteLineNumber;
/**
@brief Writes the given NTV2SmpteLineNumber to the specified output stream.
@param inOutStream Specifies the output stream to receive the human-readable representation of the NTV2SmpteLineNumber.
@param[in] inSmpteLineNumber Specifies the NTV2SmpteLineNumber instance to print to the output stream.
@return A non-constant reference to the specified output stream.
**/
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2SmpteLineNumber & inSmpteLineNumber);
/**
@brief For the given video standard, returns the SMPTE-designated line numbers for Field 1 and Field 2 that correspond
to the start-of-active-video (SAV).
@param[in] inStandard Specifies the video standard of interest.
@return The NTV2SmpteLineNumber structure that corresponds to the given video standard.
**/
inline NTV2SmpteLineNumber GetSmpteLineNumber (const NTV2Standard inStandard) {return NTV2SmpteLineNumber (inStandard);}
typedef std::vector <NTV2DeviceID> NTV2DeviceIDList; ///< @brief An ordered list of NTV2DeviceIDs.
typedef NTV2DeviceIDList::iterator NTV2DeviceIDListIter; ///< @brief A convenient non-const iterator for NTV2DeviceIDList.
typedef NTV2DeviceIDList::const_iterator NTV2DeviceIDListConstIter; ///< @brief A convenient const iterator for NTV2DeviceIDList.
AJAExport std::ostream & operator << (std::ostream & inOutStr, const NTV2DeviceIDList & inSet); ///< @brief Handy ostream writer for NTV2DeviceIDList.
typedef std::set <NTV2DeviceID> NTV2DeviceIDSet; ///< @brief A set of NTV2DeviceIDs.
typedef NTV2DeviceIDSet::iterator NTV2DeviceIDSetIter; ///< @brief A convenient non-const iterator for NTV2DeviceIDSet.
typedef NTV2DeviceIDSet::const_iterator NTV2DeviceIDSetConstIter; ///< @brief A convenient const iterator for NTV2DeviceIDSet.
/**
@brief Returns an NTV2DeviceIDSet of devices supported by the SDK.
@param[in] inKinds Optionally specifies an ::NTV2DeviceKinds filter. Defaults to ::NTV2_DEVICEKIND_ALL.
@return An ::NTV2DeviceIDSet of devices supported by the SDK.
**/
AJAExport NTV2DeviceIDSet NTV2GetSupportedDevices (const NTV2DeviceKinds inKinds = NTV2_DEVICEKIND_ALL);
AJAExport std::ostream & operator << (std::ostream & inOutStr, const NTV2DeviceIDSet & inSet); ///< @brief Handy ostream writer for NTV2DeviceIDSet.
/**
@brief Returns an SDK version component value.
@param[in] inVersionComponent Optionally specifies which version component to return.
Legal values are 0 (major version), 1 (minor version), 2 (point or "dot" version),
and 3 (build number). Defaults to 0 (the major version).
@return The value of the requested version component, or zero if an invalid version component is specified.
**/
AJAExport UWord NTV2GetSDKVersionComponent (const int inVersionComponent = 0); // New in SDK 16.1
typedef std::vector <NTV2OutputCrosspointID> NTV2OutputCrosspointIDs; ///< @brief An ordered sequence of NTV2OutputCrosspointID values.
typedef NTV2OutputCrosspointIDs::iterator NTV2OutputCrosspointIDsIter; ///< @brief A convenient non-const iterator for NTV2OutputCrosspointIDs.
typedef NTV2OutputCrosspointIDs::const_iterator NTV2OutputCrosspointIDsConstIter; ///< @brief A convenient const iterator for NTV2OutputCrosspointIDs.
AJAExport std::ostream & operator << (std::ostream & inOutStr, const NTV2OutputCrosspointIDs & inList); ///< @brief Handy ostream writer for NTV2OutputCrosspointIDs.
typedef std::vector <NTV2InputCrosspointID> NTV2InputCrosspointIDs; ///< @brief An ordered sequence of NTV2InputCrosspointID values.
typedef NTV2InputCrosspointIDs::iterator NTV2InputCrosspointIDsIter; ///< @brief A convenient non-const iterator for NTV2InputCrosspointIDs.
typedef NTV2InputCrosspointIDs::const_iterator NTV2InputCrosspointIDsConstIter; ///< @brief A convenient const iterator for NTV2InputCrosspointIDs.
AJAExport std::ostream & operator << (std::ostream & inOutStr, const NTV2OutputCrosspointIDs & inList); ///< @brief Handy ostream writer for NTV2OutputCrosspointIDs.
AJAExport std::string NTV2DeviceIDToString (const NTV2DeviceID inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2VideoFormatToString (const NTV2VideoFormat inValue, const bool inUseFrameRate = false); // New in SDK 12.0
AJAExport std::string NTV2StandardToString (const NTV2Standard inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2FrameBufferFormatToString (const NTV2FrameBufferFormat inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2M31VideoPresetToString (const M31VideoPreset inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2FrameGeometryToString (const NTV2FrameGeometry inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2FrameRateToString (const NTV2FrameRate inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2InputSourceToString (const NTV2InputSource inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2OutputDestinationToString (const NTV2OutputDestination inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2ReferenceSourceToString (const NTV2ReferenceSource inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2RegisterWriteModeToString (const NTV2RegisterWriteMode inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2InterruptEnumToString (const INTERRUPT_ENUMS inInterruptEnumValue);
AJAExport std::string NTV2IpErrorEnumToString (const NTV2IpError inIpErrorEnumValue);
AJAExport std::string NTV2ChannelToString (const NTV2Channel inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioSystemToString (const NTV2AudioSystem inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioRateToString (const NTV2AudioRate inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioBufferSizeToString (const NTV2AudioBufferSize inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioLoopBackToString (const NTV2AudioLoopBack inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2EmbeddedAudioClockToString (const NTV2EmbeddedAudioClock inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2GetBitfileName (const NTV2DeviceID inValue, const bool useOemNameOnWindows = false);
AJAExport bool NTV2IsCompatibleBitfileName (const std::string & inBitfileName, const NTV2DeviceID inDeviceID);
AJAExport NTV2DeviceID NTV2GetDeviceIDFromBitfileName (const std::string & inBitfileName);
AJAExport std::string NTV2GetFirmwareFolderPath (void);
AJAExport std::ostream & operator << (std::ostream & inOutStream, const RP188_STRUCT & inObj);
AJAExport std::string NTV2GetVersionString (const bool inDetailed = false);
AJAExport std::string NTV2RegisterNumberToString (const NTV2RegisterNumber inValue); // New in SDK 12.0
AJAExport std::string AutoCircVidProcModeToString (const AutoCircVidProcMode inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2ColorCorrectionModeToString (const NTV2ColorCorrectionMode inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2InputCrosspointIDToString (const NTV2InputCrosspointID inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2OutputCrosspointIDToString (const NTV2OutputCrosspointID inValue, const bool inForRetailDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2WidgetIDToString (const NTV2WidgetID inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2WidgetTypeToString (const NTV2WidgetType inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2TaskModeToString (const NTV2EveryFrameTaskMode inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2RegNumSetToString (const NTV2RegisterNumberSet & inValue); // New in SDK 12.0
AJAExport std::string NTV2TCIndexToString (const NTV2TCIndex inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioChannelPairToString (const NTV2AudioChannelPair inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioChannelQuadToString (const NTV2Audio4ChannelSelect inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2AudioChannelOctetToString (const NTV2Audio8ChannelSelect inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2FramesizeToString (const NTV2Framesize inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2ModeToString (const NTV2Mode inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2VANCModeToString (const NTV2VANCMode inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2MixerKeyerModeToString (const NTV2MixerKeyerMode inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2MixerInputControlToString (const NTV2MixerKeyerInputControl inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2VideoLimitingToString (const NTV2VideoLimiting inValue, const bool inCompactDisplay = false); // New in SDK 12.0
AJAExport std::string NTV2BreakoutTypeToString (const NTV2BreakoutType inValue, const bool inCompactDisplay = false); // New in SDK 15.5
AJAExport std::string NTV2AncDataRgnToStr (const NTV2AncDataRgn inValue, const bool inCompactDisplay = false); // New in SDK 15.5
AJAExport std::string NTV2UpConvertModeToString (const NTV2UpConvertMode inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2DownConvertModeToString (const NTV2DownConvertMode inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2IsoConvertModeToString (const NTV2IsoConvertMode inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2HDMIBitDepthToString (const NTV2HDMIBitDepth inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2HDMIAudioChannelsToString (const NTV2HDMIAudioChannels inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2HDMIProtocolToString (const NTV2HDMIProtocol inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2HDMIRangeToString (const NTV2HDMIRange inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2HDMIColorSpaceToString (const NTV2HDMIColorSpace inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2AudioFormatToString (const NTV2AudioFormat inValue, const bool inCompactDisplay = false); // New in SDK 16.1
AJAExport std::string NTV2BitfileTypeToString (const NTV2BitfileType inValue, const bool inCompactDisplay = false); // New in SDK 16.2
AJAExport bool convertHDRFloatToRegisterValues (const HDRFloatValues & inFloatValues, HDRRegValues & outRegisterValues);
AJAExport bool convertHDRRegisterToFloatValues (const HDRRegValues & inRegisterValues, HDRFloatValues & outFloatValues);
AJAExport void setHDRDefaultsForBT2020 (HDRRegValues & outRegisterValues);
AJAExport void setHDRDefaultsForDCIP3 (HDRRegValues & outRegisterValues);
#if !defined(NTV2_DEPRECATE_16_1)
inline std::string NTV2AudioMonitorSelectToString (const NTV2AudioMonitorSelect inValue, const bool inForRetailDisplay = false) {return NTV2AudioChannelPairToString(inValue, inForRetailDisplay);} ///< @deprecated Use ::NTV2AudioChannelPairToString instead.
#endif // !defined(NTV2_DEPRECATE_16_1)
typedef std::vector <std::string> NTV2StringList; // New in SDK 12.5
typedef NTV2StringList::iterator NTV2StringListIter; // New in SDK 16.0
typedef NTV2StringList::const_iterator NTV2StringListConstIter;// New in SDK 12.5
typedef std::set <std::string> NTV2StringSet; // New in SDK 12.5
typedef NTV2StringSet::const_iterator NTV2StringSetConstIter; // New in SDK 12.5
AJAExport std::string NTV2EmbeddedAudioInputToString (const NTV2EmbeddedAudioInput inValue, const bool inCompactDisplay = false); // New in SDK 13.0
AJAExport std::string NTV2AudioSourceToString (const NTV2AudioSource inValue, const bool inCompactDisplay = false); // New in SDK 13.0
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2StringList & inData); // New in SDK 15.5
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2StringSet & inData);
AJAExport NTV2RegisterReads FromRegNumSet (const NTV2RegNumSet & inRegNumSet);
AJAExport NTV2RegNumSet ToRegNumSet (const NTV2RegisterReads & inRegReads);
AJAExport bool GetRegNumChanges (const NTV2RegNumSet & inBefore, const NTV2RegNumSet & inAfter, NTV2RegNumSet & outGone, NTV2RegNumSet & outSame, NTV2RegNumSet & outAdded);
AJAExport bool GetChangedRegisters (const NTV2RegisterReads & inBefore, const NTV2RegisterReads & inAfter, NTV2RegNumSet & outChanged); // New in SDK 16.0
AJAExport std::string PercentEncode (const std::string & inStr); ///< @return The URL-encoded input string.
AJAExport std::string PercentDecode (const std::string & inStr); ///< @return The URL-decoded input string.
// FUTURE ** THESE WILL BE DISAPPEARING ** Deprecate in favor of the new "NTV2xxxxxxToString" functions...
#define NTV2CrosspointIDToString NTV2OutputCrosspointIDToString ///< @deprecated Use NTV2OutputCrosspointIDToString
#if !defined (NTV2_DEPRECATE)
AJAExport NTV2_DEPRECATED_f(std::string NTV2V2StandardToString (const NTV2V2Standard inValue, const bool inForRetailDisplay = false));
extern AJAExport NTV2_DEPRECATED_v(const char * NTV2VideoFormatStrings[]); ///< @deprecated Use NTV2VideoFormatToString instead.
extern AJAExport NTV2_DEPRECATED_v(const char * NTV2VideoStandardStrings[]); ///< @deprecated Use NTV2StandardToString instead.
extern AJAExport NTV2_DEPRECATED_v(const char * NTV2PixelFormatStrings[]); ///< @deprecated Use NTV2FrameBufferFormatToString instead.
extern AJAExport NTV2_DEPRECATED_v(const char * NTV2FrameRateStrings[]); ///< @deprecated Use NTV2FrameRateToString instead.
extern AJAExport NTV2_DEPRECATED_v(const char * frameBufferFormats[]); ///< @deprecated Use NTV2FrameBufferFormatToString instead.
AJAExport NTV2_DEPRECATED_f(std::string frameBufferFormatString (NTV2FrameBufferFormat inFrameBufferFormat)); ///< @deprecated Use NTV2FrameBufferFormatToString and pass 'true' for 'inForRetailDisplay'
AJAExport NTV2_DEPRECATED_f(void GetNTV2BoardString (NTV2BoardID inBoardID, std::string & outString)); ///< @deprecated Use NTV2DeviceIDToString and concatenate a space instead
AJAExport NTV2_DEPRECATED_f(std::string NTV2BoardIDToString (const NTV2BoardID inValue, const bool inForRetailDisplay = false)); ///< @deprecated Use NTV2DeviceIDToString(NTV2DeviceID,bool) instead.
AJAExport NTV2_DEPRECATED_f(void GetNTV2RetailBoardString (NTV2BoardID inBoardID, std::string & outString)); ///< @deprecated Use NTV2DeviceIDToString(NTV2DeviceID,bool) instead.
AJAExport NTV2_DEPRECATED_f(NTV2BoardType GetNTV2BoardTypeForBoardID (NTV2BoardID inBoardID)); ///< @deprecated This function is obsolete because NTV2BoardType is obsolete.
#endif // !defined (NTV2_DEPRECATE)
#if defined (AJAMac)
AJAExport bool GetInstalledMacDriverVersion (UWord & outMaj, UWord & outMin, UWord & outPt, UWord & outBld, UWord & outType);
#endif // AJAMac
#endif // NTV2UTILS_H