21 using json = nlohmann::json;
24 #define VDFAIL(__x__) AJA_sERROR (AJA_DebugUnit_VDev, AJAFUNC << ": " << __x__) 25 #define VDWARN(__x__) AJA_sWARNING(AJA_DebugUnit_VDev, AJAFUNC << ": " << __x__) 26 #define VDNOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_VDev, AJAFUNC << ": " << __x__) 27 #define VDINFO(__x__) AJA_sINFO (AJA_DebugUnit_VDev, AJAFUNC << ": " << __x__) 28 #define VDDBUG(__x__) AJA_sDEBUG (AJA_DebugUnit_VDev, AJAFUNC << ": " << __x__) 30 #define C2FAIL(__x__) AJA_sERROR (AJA_DebugUnit_CP2, AJAFUNC << ": " << __x__) 31 #define C2WARN(__x__) AJA_sWARNING(AJA_DebugUnit_CP2, AJAFUNC << ": " << __x__) 32 #define C2NOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_CP2, AJAFUNC << ": " << __x__) 33 #define C2INFO(__x__) AJA_sINFO (AJA_DebugUnit_CP2, AJAFUNC << ": " << __x__) 34 #define C2DBUG(__x__) AJA_sDEBUG (AJA_DebugUnit_CP2, AJAFUNC << ": " << __x__) 37 #if !defined(NTV2_DEPRECATE_17_1) 39 {
static const string sHexDigits(
"0123456789ABCDEFabcdef");
40 return sHexDigits.find(inChr) != string::npos;
44 {
static const string sDecDigits(
"0123456789");
45 return sDecDigits.find(inChr) != string::npos;
49 {
static const string sLegalChars(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
50 return sLegalChars.find(inChr) != string::npos;
65 for (
size_t ndx(0); ndx < inStr.size(); ndx++)
70 #endif // !defined(NTV2_DEPRECATE_17_1) 74 if (inStr.length() != 8 && inStr.length() != 9)
94 #if !defined(NTV2_DEPRECATE_16_3) 101 #endif // !defined(NTV2_DEPRECATE_16_3) 115 for (
UWord boardNum(0); ; boardNum++)
133 SetDeviceAttributes(info, tmpDev);
134 SetAudioAttributes(info, tmpDev);
151 if (iter->deviceID == inDeviceID)
165 if (iter->deviceIndex == inDeviceIndexNumber)
167 outDeviceInfo = *iter;
180 if (iter->deviceIndex == inDeviceIndexNumber)
182 if (iter->isVirtualDevice)
183 return outDevice.
Open(iter->vdevUrl);
185 return outDevice.
Open(
UWord(inDeviceIndexNumber));
215 string nameSubString(inNameSubString);
aja::lower(nameSubString);
219 if (deviceName.find(nameSubString) != string::npos)
227 if (nameSubString ==
"io4kplus")
229 nameSubString =
"avid dnxiv";
233 if (deviceName.find(nameSubString) != string::npos)
252 string nameString(inNameString);
aja::lower(nameString);
258 if (deviceName == nameString)
271 string searchSerialStr(inSerialStr);
aja::lower(searchSerialStr);
275 if (ser.find(searchSerialStr) != string::npos)
287 #if !defined(NTV2_DEPRECATE_17_5) 291 return GetDeviceWithSerial(serNumStr, outDevice);
293 #endif // !defined(NTV2_DEPRECATE_17_5) 301 if (
sDevInfoList.at(ndx).serialNumber == inSerialNumber)
315 if (inArgument.empty())
321 string upperArg(inArgument);
aja::upper(upperArg);
322 if (upperArg ==
"LIST" || upperArg ==
"?")
325 cout <<
"No devices detected" << endl;
332 cout <<
DECN(ndx, 2) <<
" | " << setw(8) <<
"virtual";
334 cout <<
" | " << setw(10) <<
sDevInfoList.at(ndx).vdevName;
339 cout <<
DECN(ndx, 2) <<
" | " << setw(8) <<
"local";
342 cout <<
" | " << setw(10) << serNum;
352 if (iter->isVirtualDevice)
354 if (
to_string(iter->deviceIndex) == inArgument
355 || iter->deviceIdentifier == inArgument
356 || iter->vdevName == inArgument
361 ok = outDevice.
Open(iter->vdevUrl);
366 else if (IsLegalSerialNumber(inArgument))
367 return outDevice.
Open(inArgument);
368 else if (inArgument.find(
"://") != string::npos)
369 return outDevice.
Open(inArgument);
373 if (
to_string(iter->deviceIndex) == inArgument)
374 return outDevice.
Open(inArgument);
375 else if (iter->deviceIdentifier == inArgument)
376 return outDevice.
Open(inArgument);
378 return outDevice.
Open(inArgument);
379 else if (IsLegalSerialNumber(inArgument))
380 return outDevice.
Open(inArgument);
381 else if (inArgument.find(
"://") != string::npos)
382 return outDevice.
Open(inArgument);
385 return outDevice.
Open(inArgument);
404 if (!str.empty() && str !=
"???")
416 inOutStr <<
" " << *iter;
443 return diffs ?
false :
true;
452 deviceSerialNumber = 0;
456 numAnlgVidInputs = 0;
457 numAnlgVidOutputs = 0;
458 numHDMIVidInputs = 0;
459 numHDMIVidOutputs = 0;
460 numInputConverters = 0;
461 numOutputConverters = 0;
463 numDownConverters = 0;
464 downConverterDelay = 0;
465 isoConvertSupport =
false;
466 rateConvertSupport =
false;
467 dvcproHDSupport =
false;
470 quarterExpandSupport =
false;
471 vidProcSupport =
false;
472 dualLinkSupport =
false;
473 colorCorrectionSupport =
false;
474 programmableCSCSupport =
false;
475 rgbAlphaOutputSupport =
false;
476 breakoutBoxSupport =
false;
477 procAmpSupport =
false;
478 has2KSupport =
false;
479 has4KSupport =
false;
480 has8KSupport =
false;
481 has3GLevelConversion =
false;
482 proResSupport =
false;
483 sdi3GSupport =
false;
484 sdi12GSupport =
false;
486 biDirectionalSDI =
false;
487 ltcInSupport =
false;
488 ltcOutSupport =
false;
489 ltcInOnRefPort =
false;
490 stereoOutSupport =
false;
491 stereoInSupport =
false;
494 numAnalogAudioInputChannels = 0;
495 numAESAudioInputChannels = 0;
496 numEmbeddedAudioInputChannels = 0;
497 numHDMIAudioInputChannels = 0;
498 numAnalogAudioOutputChannels = 0;
499 numAESAudioOutputChannels = 0;
500 numEmbeddedAudioOutputChannels = 0;
501 numHDMIAudioOutputChannels = 0;
505 deviceIdentifier.clear();
506 audioSampleRateList.clear();
507 audioNumChannelsList.clear();
508 audioBitsPerSampleList.clear();
509 audioInSourceList.clear();
510 audioOutSourceList.clear();
528 outBoardsAdded.clear ();
529 outBoardsRemoved.clear ();
533 if (oldIter == inOldList.end () && newIter == inNewList.end ())
536 if (oldIter != inOldList.end () && newIter != inNewList.end ())
540 if (oldInfo != newInfo)
543 outBoardsRemoved.push_back (oldInfo);
547 outBoardsAdded.push_back (newInfo);
556 if (oldIter != inOldList.end () && newIter == inNewList.end ())
558 outBoardsRemoved.push_back (*oldIter);
563 if (oldIter == inOldList.end () && newIter != inNewList.end ())
565 if (newIter->deviceID && newIter->deviceID !=
NTV2DeviceID(0xFFFFFFFF))
566 outBoardsAdded.push_back (*newIter);
576 return !outBoardsAdded.empty () || !outBoardsRemoved.empty ();
584 inOutStr <<
" " << *iter;
593 inOutStr <<
" " << *iter;
611 return inOutStr <<
" ???";
618 inOutStr <<
" " << *iter;
627 <<
" Device Index Number: " << inInfo.
deviceIndex << endl
628 <<
" Device ID: 0x" << hex << inInfo.
deviceID << dec << endl
630 <<
" PCI Slot: 0x" << hex << inInfo.
pciSlot << dec << endl
644 <<
" Qrez: " << (inInfo.
qrezSupport ?
"Y" :
"N") << endl
645 <<
" HDV: " << (inInfo.
hdvSupport ?
"Y" :
"N") << endl
661 <<
" SDI 3G: " << (inInfo.
sdi3GSupport ?
"Y" :
"N") << endl
662 <<
" SDI 12G: " << (inInfo.
sdi12GSupport ?
"Y" :
"N") << endl
663 <<
" IP: " << (inInfo.
ipSupport ?
"Y" :
"N") << endl
665 <<
" LTC In: " << (inInfo.
ltcInSupport ?
"Y" :
"N") << endl
666 <<
" LTC Out: " << (inInfo.
ltcOutSupport ?
"Y" :
"N") << endl
667 <<
" LTC In on Ref Port: " << (inInfo.
ltcInOnRefPort ?
"Y" :
"N") << endl
696 inOutStr <<
"AudioPhysicalFormat:" << endl
697 <<
" boardNumber: " << inFormat.
boardNumber << endl
698 <<
" sampleRate: " << inFormat.
sampleRate << endl
699 <<
" numChannels: " << inFormat.
numChannels << endl
701 #if defined (DEBUG) || defined (AJA_DEBUG) 702 <<
" sourceIn: 0x" << hex << inFormat.
sourceIn << dec << endl
703 <<
" sourceOut: 0x" << hex << inFormat.
sourceOut << dec << endl
704 #endif // DEBUG or AJA_DEBUG 796 if (audioControl &
BIT(21))
850 SetDeviceAttributes (devInfo, dev);
851 SetAudioAttributes (devInfo, dev);
857 #if defined(NTV2_PREVENT_PLUGIN_LOAD) 859 #else // else NTV2_PREVENT_PLUGIN_LOAD 861 if (vdevPath.empty())
866 for (
const auto & vdevFile : vdevFiles)
871 std::ifstream vf(vdevFile);
873 {
VDFAIL(
"Unable to open '" << vdevFile <<
"'");
return false;}
876 vdevJson = json::parse(vf);
878 catch (
const json::parse_error& e)
880 VDFAIL(
"Invalid JSON at byte " << e.byte <<
" in '" << vdevFile <<
"': " << e.what() <<
", exceptionID " << e.id);
891 bool explicitlyDisabled(
false);
899 if (vdevJson.size() > 32)
900 {
VDFAIL(
"File '" << vdevFile <<
"': more than 32 keys");
continue;}
902 for (
auto it(vdevJson.cbegin()); it != vdevJson.cend(); ++it)
903 if (keys.find(it.key()) == keys.end())
904 keys.insert(it.key());
909 if (legalKeys.find(*itKey) == legalKeys.end())
910 badKeys.push_back(*itKey);
912 goodKeys.push_back(*itKey);
914 if (!badKeys.empty())
915 VDWARN(
"File '" << vdevFile <<
"': ignored " <<
DEC(badKeys.size()) <<
" unknown key(s): '" <<
aja::join(badKeys,
"', '") <<
"'");
917 if (urlspecVal.is_null())
918 {
VDFAIL(
"File '" << vdevFile <<
"': missing required 'urlspec' parameter");
continue;}
919 if (disabledVal.is_boolean())
922 explicitlyDisabled = disabledVal.get<
bool>();
924 else if (!disabledVal.is_null())
925 {
VDFAIL(
"File '" << vdevFile <<
"': invalid 'disabled' value -- expected boolean 'true' or 'false' value");
continue;}
926 if (explicitlyDisabled)
927 {
VDINFO(
"File '" << vdevFile <<
"': explicitly 'disabled'");
continue;}
928 newVDev.
vdevUrl = urlspecVal.get<std::string>();
930 if (!nameVal.is_null())
931 newVDev.
vdevName = nameVal.get<std::string>();
933 newVDev.
vdevUrl += parser.HasQueryParams() ?
"&" :
"?";
935 string fName (vdevFile);
936 fName.erase(fName.find(vdevPath), vdevPath.length()+1);
938 fName.erase(fName.length()-5, 5);
950 outVDevList.push_back(newVDev);
954 #endif // else NTV2_PREVENT_PLUGIN_LOAD 959 #if defined(NTV2_PREVENT_PLUGIN_LOAD) 961 #else // else NTV2_PREVENT_PLUGIN_LOAD 967 vdevPath +=
"virtualdevices";
971 for (
const auto & vdevFile : vdevFiles)
975 std::ifstream vf(vdevFile);
977 {
C2FAIL(
"Unable to open '" << vdevFile <<
"'");
return false;}
980 vdevJson = json::parse(vf);
982 catch (
const json::parse_error& e)
984 C2FAIL(
"Invalid JSON at byte " << e.byte <<
" in '" << vdevFile <<
"': " << e.what() <<
", exceptionID " << e.id);
1001 auto pluginVal (vdevJson[
"plugin"]), nameVal (vdevJson[
"name"]), hostVal (vdevJson[
"host"]), urlspecVal (vdevJson[
"urlspec"]);
1002 if (pluginVal.is_null())
1003 {
C2FAIL(
"File: '" << vdevFile <<
"' missing required 'plugin' parameter");
continue;}
1004 if (!urlspecVal.is_null())
1005 C2WARN(
"File: '" << vdevFile <<
"' 'urlspec' parameter ignored");
1007 newVDev.
vdevUrl = pluginVal.get<std::string>();
1008 if (!nameVal.is_null())
1011 oss << nameVal.get<std::string>() <<
" - " << newVDev.
deviceIndex;
1013 newVDev.
vdevName = nameVal.get<std::string>();
1016 if (!hostVal.is_null())
1017 hostName = hostVal.get<std::string>();
1018 if (hostName.empty())
1019 hostName =
"localhost";
1020 newVDev.
vdevUrl +=
"://" + hostName +
"/?";
1023 for (
auto it (vdevJson.begin()); it != vdevJson.end(); ++it)
1024 if (it.key() !=
"plugin" && it.key() !=
"name" && it.key() !=
"host")
1026 auto paramValStr =
to_string(it.value());
1033 const string queryStr(
aja::join(params,
"&"));
1034 if (!queryStr.empty())
1035 newVDev.
vdevUrl +=
"?" + queryStr;
1036 outVDevList.push_back(newVDev);
1039 #endif // else NTV2_PREVENT_PLUGIN_LOAD
bool programmableCSCSupport
Programmable color space converter?
NTV2DeviceInfoList GetDeviceInfoList(void)
The number of input converter widgets on the device.
virtual bool IsSupported(const NTV2BoolParamID inParamID)
True if device can handle 2Kx1556 (film) video.
static bool GetFirstDeviceWithID(const NTV2DeviceID inDeviceID, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the first AJA device found on the host t...
#define kQParamVDevIndex
Device index number for .vdev virtual device.
True if device supports 3D video output over dual-stream SDI.
Declares the AJALock class.
bool ipSupport
Supports IP IO?
The number of SDI-embedded input audio channels supported by the device.
True if audio system(s) support 2 or more audio channels.
The number of analog video outputs on the device.
UWord numAnalogAudioInputChannels
Total number of analog audio input channels.
True if device can do ISO conversion.
UWord numAnalogAudioOutputChannels
Total number of analog audio output channels.
static bool GetFirstDeviceWithSerial(const std::string &inSerialStr, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the first AJA device whose serial number...
static bool GetVirtualDeviceWithName(const std::string &inNameString, CNTV2Card &outDevice, const bool inRescan=(!(0)))
Rescans the host, and returns an open CNTV2Card instance for the first virtual device with a matching...
I interrogate and control an AJA video/audio capture/playout device.
UWord numOutputConverters
Total number of output converters.
True if device can squeeze/stretch between 1920x1080/1280x1080 and 1280x720/960x720.
UWord numAnlgVidInputs
Total number of analog video inputs.
True if device can do 3G level B to 3G level A conversion.
True if device supports an AJA breakout box.
#define kVDevJSON_Name
Optional name for virtual device to override .vdev file name (expects string value) ...
The number of analog LTC outputs on the device.
The number of AES/EBU audio output channels on the device.
NTV2StringSet::const_iterator NTV2StringSetConstIter
Declares the AJADebug class.
NTV2AudioPhysicalFormatList::const_iterator NTV2AudioPhysicalFormatListConstIter
virtual UWord GetIndexNumber(void) const
static bool IsLegalDecimalNumber(const std::string &inStr, const size_t maxLen=2)
The number of independent Audio Systems on the device.
void setDeviceIndexNumber(const UWord num)
bool ltcInOnRefPort
Supports LTC on reference input?
#define kQParamVDevName
Device name, if not specified in .vdev file, then base name of .vdev file.
static AJAStatus ReadDirectory(const std::string &directory, const std::string &filePattern, std::vector< std::string > &fileContainer)
UWord numVidOutputs
Total number of video outputs – analog, digital, whatever.
virtual bool Close(void)
Closes me, releasing host resources that may have been allocated in a previous Open call...
std::string NTV2GetVDevFolderPath(const bool inAddTrailingPathDelim=false)
static bool PatchDeviceInfo(const UWord inDevIndex, CNTV2DriverInterface &dev)
One-stop shop for parsing device specifications. (New in SDK 16.3) I do very little in the way of val...
virtual bool Open(const UWord inDeviceIndex)
Opens a local/physical AJA device so it can be monitored/controlled.
static bool DeviceIDPresent(const NTV2DeviceID inDeviceID, const bool inRescan=(0))
True if device has SFP connectors.
UWord numEmbeddedAudioInputChannels
Total number of embedded (SDI) audio input channels.
True if device can do video processing.
bool has2KSupport
Supports 2K formats?
True if device can handle QRez.
The number of DMA engines on the device.
UWord numHDMIAudioInputChannels
Total number of HDMI audio input channels.
ULWord pciSlot
PCI slot (if applicable and/or known)
#define kQParamVDevFolderPath
Path to folder containing .vdev files.
#define NTV2_ASSERT(_expr_)
The number of SDI video outputs on the device.
virtual bool IsRemote(void) const
NTV2AudioSampleRateList audioSampleRateList
My supported audio sample rates.
NTV2AudioSourceList audioInSourceList
My supported audio input sources (AES, ADAT, etc.)
True if device can read LTC (Linear TimeCode) from its reference input.
UWord numAnlgVidOutputs
Total number of analog video outputs.
True if device SDI connectors are bi-directional.
std::string PercentEncode(const std::string &inStr)
static AJALock sDevInfoListLock
static bool GetFirstDeviceWithName(const std::string &inNameSubString, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the first AJA device whose device identi...
UWord numDMAEngines
Total number of DMA engines.
bool ltcOutSupport
Supports LTC output?
bool proResSupport
Supports ProRes?
I'm the base class that undergirds the platform-specific derived classes (from which CNTV2Card is ult...
True if device has CSCs capable of splitting the key (alpha) and YCbCr (fill) from RGB frame buffers ...
True if device has at least one programmable color space converter widget.
True if device supports 3D video input over dual-stream SDI.
bool breakoutBoxSupport
Can support a breakout box?
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
The highest bit number of the LED bits in the Global Control Register on the device.
std::vector< AudioBitsPerSampleEnum > NTV2AudioBitsPerSampleList
UWord numHDMIVidOutputs
Total number of HDMI outputs.
True if device can handle quarter-sized frames (pixel-halving and line-halving during input...
bool ltcInSupport
Accepts LTC input?
virtual bool IsOpen(void) const
CNTV2DeviceScanner(const bool inScanNow=(!(0)))
std::string to_string(bool val)
static bool GetFirstDeviceFromArgument(const std::string &inArgument, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the AJA device that matches a command li...
NTV2AudioChannelsPerFrameList::const_iterator NTV2AudioChannelsPerFrameListConstIter
std::set< std::string > NTV2StringSet
NTV2AudioBitsPerSampleList::const_iterator NTV2AudioBitsPerSampleListConstIter
static bool GetDeviceWithSerial(const std::string &inSerialNumber, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the first AJA device whose serial number...
True if device can squeeze/stretch between 1920x1080 and 1440x1080.
bool has4KSupport
Supports 4K formats?
Declares the AJAFileIO class.
virtual bool GetSerialNumberString(std::string &outSerialNumberString)
Answers with a string that contains my human-readable serial number.
std::string serialNumber
Unique device serial number (new in SDK 17.5)
virtual bool ReadRegister(const ULWord inRegNum, ULWord &outValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Reads all or part of the 32-bit contents of a specific register (real or virtual) on the AJA device...
std::vector< NTV2DeviceInfo > NTV2DeviceInfoList
I am an ordered list of NTV2DeviceInfo structs.
The number of up-converters on the device.
bool is_alpha_numeric(const char inChr)
static size_t GetNumDevices(void)
bool has8KSupport
Supports 8K formats?
static bool IsHexDigit(const char inChr)
bool sdi12GSupport
Supports 12G?
UWord numUpConverters
Total number of up-converters.
std::set< ULWord > ULWordSet
A collection of unique ULWord (uint32_t) values.
Software device that doesn't emulate one of the above devices.
NTV2DeviceInfoList::const_iterator NTV2DeviceInfoListConstIter
bool colorCorrectionSupport
Supports color correction?
#define kVDevJSON_URLSpec
URLspec for virtual device (expects string value)
True if device has 12G SDI connectors.
#define kQParamVDevFileName
.vdev file name (with extension)
UWord numAESAudioInputChannels
Total number of AES audio input channels.
static bool CompareDeviceInfoLists(const NTV2DeviceInfoList &inOldList, const NTV2DeviceInfoList &inNewList, NTV2DeviceInfoList &outDevicesAdded, NTV2DeviceInfoList &outDevicesRemoved)
True if audio system(s) support 6 or more audio channels.
virtual NTV2DeviceID GetDeviceID(void)
bool biDirectionalSDI
Supports Bi-directional SDI.
static bool GetDeviceAtIndex(const ULWord inDeviceIndexNumber, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the AJA device having the given zero-bas...
uint64_t is_legal_hex_serial_number(const std::string &inStr)
int stoi(const std::string &str, std::size_t *idx, int base)
std::vector< AudioChannelsPerFrameEnum > NTV2AudioChannelsPerFrameList
Declares the CNTV2DeviceScanner class.
virtual std::string GetDescription(void) const
ULWord deviceIndex
Device index number – this will be phased out someday.
The number of HDMI video outputs on the device.
UWord numHDMIVidInputs
Total number of HDMI inputs.
ostream & operator<<(ostream &inOutStr, const NTV2DeviceInfoList &inList)
The number of SDI-embedded output audio channels supported by the device.
std::vector< AudioSampleRateEnum > NTV2AudioSampleRateList
UWord numVidInputs
Total number of video inputs – analog, digital, whatever.
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
bool operator==(const NTV2DeviceInfo &rhs) const
True if device supports 10-bit RGB input/output over 2-wire SDI.
std::string & strip(std::string &str, const std::string &ws)
UWord numDownConverters
Total number of down-converters.
#define kVDevJSON_Disabled
Virtual device is disabled if value is true (expects boolean value)
The number of analog audio output channels on the device.
NTV2AudioChannelsPerFrameList audioNumChannelsList
My supported number of audio channels per frame.
static bool GetDeviceInfo(const ULWord inDeviceIndexNumber, NTV2DeviceInfo &outDeviceInfo, const bool inRescan=(0))
The number of analog LTC inputs on the device.
The number of analog video inputs on the device.
Declares numerous NTV2 utility functions.
UWord numSerialPorts
Total number of serial ports.
virtual ULWord GetNumSupported(const NTV2NumericParamID inParamID)
Declares the AJASystemInfo class.
bool quarterExpandSupport
static void ScanHardware(void)
The number of output converter widgets on the device.
True if device has any analog inputs or outputs.
True if the device can handle 4K/UHD video.
The number of RS-422 serial ports on the device.
bool is_legal_decimal_number(const std::string &inStr, size_t inMaxLength)
bool stereoOutSupport
Supports stereo output?
UWord numAudioStreams
Maximum number of independent audio streams.
static NTV2DeviceInfoList sDevInfoList
The number of HDMI audio input channels on the device.
static bool IsAlphaNumeric(const char inStr)
static bool IsLegalSerialNumber(const std::string &inStr)
static std::string GetDeviceRefName(CNTV2Card &inDevice)
virtual ULWordSet GetSupportedItems(const NTV2EnumsID inEnumsID)
UWord numInputConverters
Total number of input converters.
True if device has any LUTs.
The down-converter delay on the device.
bool dualLinkSupport
Supports dual-link?
static uint64_t IsLegalHexSerialNumber(const std::string &inStr)
static bool IsDecimalDigit(const char inChr)
NTV2AudioSampleRateList::const_iterator NTV2AudioSampleRateListConstIter
Private include file for all ajabase sources.
UWord numEmbeddedAudioOutputChannels
Total number of embedded (SDI) audio output channels.
The number of analog audio input channels on the device.
True if audio system(s) support 8 or more audio channels.
True if device has a microphone input connector.
std::string SerialNum64ToString(const uint64_t &inSerNum)
std::string & upper(std::string &str)
std::string join(const std::vector< std::string > &parts, const std::string &delim)
bool stereoInSupport
Supports stereo input?
bool rgbAlphaOutputSupport
Supports RGB alpha channel?
UWord numHDMIAudioOutputChannels
Total number of HDMI audio output channels.
std::vector< std::string > NTV2StringList
NTV2AudioBitsPerSampleList audioBitsPerSampleList
My supported audio bits-per-sample.
NTV2DeviceID deviceID
Device ID/species (e.g., DEVICE_ID_KONA3G, DEVICE_ID_IOXT, etc.)
std::vector< NTV2AudioPhysicalFormat > NTV2AudioPhysicalFormatList
I am an ordered list of NTV2AudioPhysicalFormat structs.
std::string & lower(std::string &str)
#define DECN(__x__, __n__)
Identifies the NTV2AudioWidgetID enumerated type.
std::vector< AudioSourceEnum > NTV2AudioSourceList
True if device supports 8K video formats.
bool has3GLevelConversion
Supports 3G Level Conversion?
The number of HDMI audio output channels on the device.
The number of SDI video inputs on the device.
bool multiFormat
Supports multiple video formats?
True if device can can accommodate Apple ProRes-compressed video in its frame buffers.
virtual std::string GetHostName(void) const
NTV2AudioSourceList::const_iterator NTV2AudioSourceListConstIter
Declares device capability functions.
NTV2AudioSourceList audioOutSourceList
My supported audio output destinations (AES, etc.)
The number of AES/EBU audio input channels on the device.
The number of down-converters on the device.
UWord numAESAudioOutputChannels
Total number of AES audio output channels.
True if Audio System(s) support a 96kHz sample rate.
bool sdi3GSupport
Supports 3G?
std::string deviceIdentifier
Device name as seen in Control Panel, Watcher, Cables, etc.
True if device can do frame rate conversion.
The number of HDMI video inputs on the device.
True if device can simultaneously handle different video formats on more than one SDI input or output...