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 == inIndexNum)
166 {outDeviceInfo = *iter;
return true;}
177 if (iter->serialNumber == inSerialNum)
178 {outDeviceInfo = *iter;
return true;}
188 string nameSubString(inModelName);
aja::lower(nameSubString);
191 string devName(iter->deviceIdentifier);
aja::lower(devName);
192 if (devName.find(nameSubString) != string::npos)
193 {outDeviceInfo = *iter;
return true;}
195 if (nameSubString ==
"io4kplus")
197 nameSubString =
"avid dnxiv";
200 string devName(iter->deviceIdentifier);
aja::lower(devName);
201 if (devName.find(nameSubString) != string::npos)
202 {outDeviceInfo = *iter;
return true;}
215 if (iter->deviceID == inID)
216 {outDeviceInfo = *iter;
return true;}
226 if (iter->deviceIndex == inDeviceIndexNumber)
228 if (iter->isVirtualDevice)
229 return outDevice.
Open(iter->vdevUrl);
231 return outDevice.
Open(
UWord(inDeviceIndexNumber));
261 string nameSubString(inNameSubString);
aja::lower(nameSubString);
265 if (deviceName.find(nameSubString) != string::npos)
277 if (nameSubString ==
"io4kplus")
279 nameSubString =
"avid dnxiv";
283 if (deviceName.find(nameSubString) != string::npos)
306 string nameString(inNameString);
aja::lower(nameString);
312 if (deviceName == nameString)
328 string searchSerialStr(inSerialStr);
aja::lower(searchSerialStr);
332 if (ser.find(searchSerialStr) != string::npos)
344 #if !defined(NTV2_DEPRECATE_17_5) 348 return GetDeviceWithSerial(serNumStr, outDevice);
350 #endif // !defined(NTV2_DEPRECATE_17_5) 358 if (
sDevInfoList.at(ndx).serialNumber == inSerialNumber)
380 if (larg ==
"list" || larg ==
"?")
383 cout <<
"No devices detected" << endl;
390 cout <<
DECN(ndx, 2) <<
" | " << setw(8) <<
"virtual";
392 cout <<
" | " << setw(10) <<
sDevInfoList.at(ndx).vdevName;
397 cout <<
DECN(ndx, 2) <<
" | " << setw(8) <<
"local";
400 cout <<
" | " << setw(10) << serNum;
408 return outDevice.
Open(arg);
427 if (!str.empty() && str !=
"???")
439 inOutStr <<
" " << *iter;
466 return diffs ?
false :
true;
475 deviceSerialNumber = 0;
479 numAnlgVidInputs = 0;
480 numAnlgVidOutputs = 0;
481 numHDMIVidInputs = 0;
482 numHDMIVidOutputs = 0;
483 numInputConverters = 0;
484 numOutputConverters = 0;
486 numDownConverters = 0;
487 downConverterDelay = 0;
488 isoConvertSupport =
false;
489 rateConvertSupport =
false;
490 dvcproHDSupport =
false;
493 quarterExpandSupport =
false;
494 vidProcSupport =
false;
495 dualLinkSupport =
false;
496 colorCorrectionSupport =
false;
497 programmableCSCSupport =
false;
498 rgbAlphaOutputSupport =
false;
499 breakoutBoxSupport =
false;
500 procAmpSupport =
false;
501 has2KSupport =
false;
502 has4KSupport =
false;
503 has8KSupport =
false;
504 has3GLevelConversion =
false;
505 proResSupport =
false;
506 sdi3GSupport =
false;
507 sdi12GSupport =
false;
509 biDirectionalSDI =
false;
510 ltcInSupport =
false;
511 ltcOutSupport =
false;
512 ltcInOnRefPort =
false;
513 stereoOutSupport =
false;
514 stereoInSupport =
false;
517 numAnalogAudioInputChannels = 0;
518 numAESAudioInputChannels = 0;
519 numEmbeddedAudioInputChannels = 0;
520 numHDMIAudioInputChannels = 0;
521 numAnalogAudioOutputChannels = 0;
522 numAESAudioOutputChannels = 0;
523 numEmbeddedAudioOutputChannels = 0;
524 numHDMIAudioOutputChannels = 0;
528 deviceIdentifier.clear();
529 audioSampleRateList.clear();
530 audioNumChannelsList.clear();
531 audioBitsPerSampleList.clear();
532 audioInSourceList.clear();
533 audioOutSourceList.clear();
551 outBoardsAdded.clear ();
552 outBoardsRemoved.clear ();
556 if (oldIter == inOldList.end () && newIter == inNewList.end ())
559 if (oldIter != inOldList.end () && newIter != inNewList.end ())
563 if (oldInfo != newInfo)
566 outBoardsRemoved.push_back (oldInfo);
570 outBoardsAdded.push_back (newInfo);
579 if (oldIter != inOldList.end () && newIter == inNewList.end ())
581 outBoardsRemoved.push_back (*oldIter);
586 if (oldIter == inOldList.end () && newIter != inNewList.end ())
588 if (newIter->deviceID && newIter->deviceID !=
NTV2DeviceID(0xFFFFFFFF))
589 outBoardsAdded.push_back (*newIter);
599 return !outBoardsAdded.empty () || !outBoardsRemoved.empty ();
607 inOutStr <<
" " << *iter;
616 inOutStr <<
" " << *iter;
634 return inOutStr <<
" ???";
641 inOutStr <<
" " << *iter;
650 <<
" Device Index Number: " << inInfo.
deviceIndex << endl
651 <<
" Device ID: 0x" << hex << inInfo.
deviceID << dec << endl
653 <<
" PCI Slot: 0x" << hex << inInfo.
pciSlot << dec << endl
667 <<
" Qrez: " << (inInfo.
qrezSupport ?
"Y" :
"N") << endl
668 <<
" HDV: " << (inInfo.
hdvSupport ?
"Y" :
"N") << endl
684 <<
" SDI 3G: " << (inInfo.
sdi3GSupport ?
"Y" :
"N") << endl
685 <<
" SDI 12G: " << (inInfo.
sdi12GSupport ?
"Y" :
"N") << endl
686 <<
" IP: " << (inInfo.
ipSupport ?
"Y" :
"N") << endl
688 <<
" LTC In: " << (inInfo.
ltcInSupport ?
"Y" :
"N") << endl
689 <<
" LTC Out: " << (inInfo.
ltcOutSupport ?
"Y" :
"N") << endl
690 <<
" LTC In on Ref Port: " << (inInfo.
ltcInOnRefPort ?
"Y" :
"N") << endl
719 inOutStr <<
"AudioPhysicalFormat:" << endl
720 <<
" boardNumber: " << inFormat.
boardNumber << endl
721 <<
" sampleRate: " << inFormat.
sampleRate << endl
722 <<
" numChannels: " << inFormat.
numChannels << endl
724 #if defined (DEBUG) || defined (AJA_DEBUG) 725 <<
" sourceIn: 0x" << hex << inFormat.
sourceIn << dec << endl
726 <<
" sourceOut: 0x" << hex << inFormat.
sourceOut << dec << endl
727 #endif // DEBUG or AJA_DEBUG 819 if (audioControl &
BIT(21))
873 SetDeviceAttributes (devInfo, dev);
874 SetAudioAttributes (devInfo, dev);
880 #if defined(NTV2_PREVENT_PLUGIN_LOAD) 882 #else // else NTV2_PREVENT_PLUGIN_LOAD 884 if (vdevPath.empty())
889 for (
const auto & vdevFile : vdevFiles)
894 std::ifstream vf(vdevFile);
896 {
VDFAIL(
"Unable to open '" << vdevFile <<
"'");
return false;}
899 vdevJson = json::parse(vf);
901 catch (
const json::parse_error& e)
903 VDFAIL(
"Invalid JSON at byte " << e.byte <<
" in '" << vdevFile <<
"': " << e.what() <<
", exceptionID " << e.id);
914 bool explicitlyDisabled(
false);
924 if (vdevJson.size() > 32)
925 {
VDFAIL(
"File '" << vdevFile <<
"': more than 32 keys");
continue;}
927 for (
auto it(vdevJson.cbegin()); it != vdevJson.cend(); ++it)
928 if (keys.find(it.key()) == keys.end())
929 keys.insert(it.key());
934 if (legalKeys.find(*itKey) == legalKeys.end())
935 badKeys.push_back(*itKey);
937 goodKeys.push_back(*itKey);
939 if (!badKeys.empty())
940 VDWARN(
"File '" << vdevFile <<
"': ignored " <<
DEC(badKeys.size()) <<
" unknown key(s): '" <<
aja::join(badKeys,
"', '") <<
"'");
943 if (urlspecVal.is_null())
944 {
VDFAIL(
"File '" << vdevFile <<
"': missing required 'urlspec' parameter");
continue;}
945 if (disabledVal.is_boolean())
948 explicitlyDisabled = disabledVal.get<
bool>();
950 else if (!disabledVal.is_null())
951 {
VDFAIL(
"File '" << vdevFile <<
"': invalid 'disabled' value -- expected boolean 'true' or 'false' value");
continue;}
952 if (explicitlyDisabled)
953 {
VDINFO(
"File '" << vdevFile <<
"': explicitly 'disabled'");
continue;}
954 if (!serialVal.is_null())
956 if (!serialVal.is_string())
957 {
VDFAIL(
"File '" << vdevFile <<
"': invalid 'serial' value -- expected string value");
continue;}
961 {
VDFAIL(
"File '" << vdevFile <<
"': illegal 'serial' value '" << newInfo.
serialNumber <<
"'");
continue;}
963 if (!devIDVal.is_null())
965 if (!devIDVal.is_string())
966 {
VDFAIL(
"File '" << vdevFile <<
"': invalid 'devid' value -- expected string value");
continue;}
967 string id (devIDVal.get<
string>());
970 {
VDFAIL(
"File '" << vdevFile <<
"': empty 'devid' value -- expected non-empty hex string value");
continue;}
973 {
VDFAIL(
"File '" << vdevFile <<
"': empty 'devid' value -- expected 8-hex-digit string value");
continue;}
974 if (
id.find(
"0x") == 0)
978 if (legalDevs.find(devid) == legalDevs.end())
979 {
VDFAIL(
"File '" << vdevFile <<
"': 'devid' value 0x" <<
id <<
" (" <<
xHEX0N(devid,8) <<
") is unsupported or unknown");
continue;}
982 newInfo.
vdevUrl = urlspecVal.get<std::string>();
986 {
VDFAIL(
"File '" << vdevFile <<
"': bad 'urlspec': " << newInfo.
vdevUrl <<
"\n" <<
aja::join(parser.Errors(),
"\n"));
continue;}
987 if (newInfo.
vdevUrl.find(
"://") == string::npos)
991 newInfo.
vdevUrl += parser.HasQueryParams() ?
"&" :
"?";
993 string fName (vdevFile);
994 fName.erase(fName.find(vdevPath), vdevPath.length()+1);
996 fName.erase(fName.length()-5, 5);
1008 outVDevList.push_back(newInfo);
1012 #endif // else NTV2_PREVENT_PLUGIN_LOAD 1017 #if defined(NTV2_PREVENT_PLUGIN_LOAD) 1019 #else // else NTV2_PREVENT_PLUGIN_LOAD 1025 vdevPath +=
"virtualdevices";
1029 for (
const auto & vdevFile : vdevFiles)
1033 std::ifstream vf(vdevFile);
1035 {
C2FAIL(
"Unable to open '" << vdevFile <<
"'");
return false;}
1038 vdevJson = json::parse(vf);
1040 catch (
const json::parse_error& e)
1042 C2FAIL(
"Invalid JSON at byte " << e.byte <<
" in '" << vdevFile <<
"': " << e.what() <<
", exceptionID " << e.id);
1059 auto pluginVal (vdevJson[
"plugin"]), nameVal (vdevJson[
"name"]), hostVal (vdevJson[
"host"]), urlspecVal (vdevJson[
"urlspec"]);
1060 if (pluginVal.is_null())
1061 {
C2FAIL(
"File: '" << vdevFile <<
"' missing required 'plugin' parameter");
continue;}
1062 if (!urlspecVal.is_null())
1063 C2WARN(
"File: '" << vdevFile <<
"' 'urlspec' parameter ignored");
1065 newVDev.
vdevUrl = pluginVal.get<std::string>();
1066 if (!nameVal.is_null())
1069 oss << nameVal.get<std::string>() <<
" - " << newVDev.
deviceIndex;
1071 newVDev.
vdevName = nameVal.get<std::string>();
1074 if (!hostVal.is_null())
1075 hostName = hostVal.get<std::string>();
1076 if (hostName.empty())
1077 hostName =
"localhost";
1078 newVDev.
vdevUrl +=
"://" + hostName +
"/?";
1081 for (
auto it (vdevJson.begin()); it != vdevJson.end(); ++it)
1082 if (it.key() !=
"plugin" && it.key() !=
"name" && it.key() !=
"host")
1084 auto paramValStr =
to_string(it.value());
1091 const string queryStr(
aja::join(params,
"&"));
1092 if (!queryStr.empty())
1093 newVDev.
vdevUrl +=
"?" + queryStr;
1094 outVDevList.push_back(newVDev);
1097 #endif // else NTV2_PREVENT_PLUGIN_LOAD
bool programmableCSCSupport
Programmable color space converter?
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...
static bool GetDeviceInfoForModel(const std::string &inModelName, NTV2DeviceInfo &outDeviceInfo, const bool inRescan=(0))
NTV2DeviceIDSet NTV2GetSupportedDevices(const NTV2DeviceKinds inKinds=NTV2_DEVICEKIND_ALL)
Returns an NTV2DeviceIDSet of devices supported by the SDK.
bool is_legal_hex_number(const std::string &inStr, size_t inMaxLength)
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.
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
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?
static bool GetDeviceInfoForSerial(const std::string &inSerialNum, NTV2DeviceInfo &outDeviceInfo, const bool inRescan=(0))
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.
unsigned long stoul(const std::string &str, std::size_t *idx, int base)
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
#define kVDevJSON_SerialNum
Running VDEV's serial number (expects string value)
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)
#define kVDevJSON_DeviceID
Running VDEV's device ID (expects string value containing 32-bit hexadecimal value) ...
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 VDEV (expects string value)
static NTV2DeviceInfoList GetDeviceInfoList(void)
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)
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
VDEV 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 bool GetDeviceInfoForID(const NTV2DeviceID inID, NTV2DeviceInfo &outDeviceInfo, const bool inRescan=(0))
static NTV2DeviceInfoList sDevInfoList
#define xHEX0N(__x__, __n__)
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 join(const std::vector< std::string > &parts, const std::string &delim)
std::set< NTV2DeviceID > NTV2DeviceIDSet
A set of NTV2DeviceIDs.
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...