21 using json = nlohmann::json;
24 #define PLFAIL(__x__) AJA_sERROR (AJA_DebugUnit_Plugins, AJAFUNC << ": " << __x__) 25 #define PLWARN(__x__) AJA_sWARNING(AJA_DebugUnit_Plugins, AJAFUNC << ": " << __x__) 26 #define PLNOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_Plugins, AJAFUNC << ": " << __x__) 27 #define PLINFO(__x__) AJA_sINFO (AJA_DebugUnit_Plugins, AJAFUNC << ": " << __x__) 28 #define PLDBUG(__x__) AJA_sDEBUG (AJA_DebugUnit_Plugins, AJAFUNC << ": " << __x__) 31 #if !defined(NTV2_DEPRECATE_17_1) 33 {
static const string sHexDigits(
"0123456789ABCDEFabcdef");
34 return sHexDigits.find(inChr) != string::npos;
38 {
static const string sDecDigits(
"0123456789");
39 return sDecDigits.find(inChr) != string::npos;
43 {
static const string sLegalChars(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
44 return sLegalChars.find(inChr) != string::npos;
59 for (
size_t ndx(0); ndx < inStr.size(); ndx++)
64 #endif // !defined(NTV2_DEPRECATE_17_1) 68 if (inStr.length() != 8 && inStr.length() != 9)
88 #if !defined(NTV2_DEPRECATE_16_3) 95 #endif // !defined(NTV2_DEPRECATE_16_3) 109 for (
UWord boardNum(0); ; boardNum++)
127 SetDeviceAttributes(info, tmpDev);
128 SetAudioAttributes(info, tmpDev);
145 if (iter->deviceID == inDeviceID)
159 if (iter->deviceIndex == inDeviceIndexNumber)
161 outDeviceInfo = *iter;
174 if (iter->deviceIndex == inDeviceIndexNumber)
176 if (iter->isVirtualDevice)
177 return outDevice.
Open(iter->vdevUrl);
179 return outDevice.
Open(
UWord(inDeviceIndexNumber));
209 string nameSubString(inNameSubString);
aja::lower(nameSubString);
213 if (deviceName.find(nameSubString) != string::npos)
221 if (nameSubString ==
"io4kplus")
223 nameSubString =
"avid dnxiv";
227 if (deviceName.find(nameSubString) != string::npos)
246 string nameString(inNameString);
aja::lower(nameString);
252 if (deviceName == nameString)
265 string searchSerialStr(inSerialStr);
aja::lower(searchSerialStr);
269 if (ser.find(searchSerialStr) != string::npos)
281 #if !defined(NTV2_DEPRECATE_17_5) 285 return GetDeviceWithSerial(serNumStr, outDevice);
287 #endif // !defined(NTV2_DEPRECATE_17_5) 295 if (
sDevInfoList.at(ndx).serialNumber == inSerialNumber)
309 if (inArgument.empty())
315 string upperArg(inArgument);
aja::upper(upperArg);
316 if (upperArg ==
"LIST" || upperArg ==
"?")
319 cout <<
"No devices detected" << endl;
326 cout <<
DECN(ndx, 2) <<
" | " << setw(8) <<
"virtual";
328 cout <<
" | " << setw(10) <<
sDevInfoList.at(ndx).vdevName;
333 cout <<
DECN(ndx, 2) <<
" | " << setw(8) <<
"local";
336 cout <<
" | " << setw(10) << serNum;
346 if (iter->isVirtualDevice)
348 if (
to_string(iter->deviceIndex) == inArgument
349 || iter->deviceIdentifier == inArgument
350 || iter->vdevName == inArgument
355 ok = outDevice.
Open(iter->vdevUrl);
360 else if (IsLegalSerialNumber(inArgument))
361 return outDevice.
Open(inArgument);
362 else if (inArgument.find(
"://") != string::npos)
363 return outDevice.
Open(inArgument);
367 if (
to_string(iter->deviceIndex) == inArgument)
368 return outDevice.
Open(inArgument);
369 else if (iter->deviceIdentifier == inArgument)
370 return outDevice.
Open(inArgument);
372 return outDevice.
Open(inArgument);
373 else if (IsLegalSerialNumber(inArgument))
374 return outDevice.
Open(inArgument);
375 else if (inArgument.find(
"://") != string::npos)
376 return outDevice.
Open(inArgument);
379 return outDevice.
Open(inArgument);
398 if (!str.empty() && str !=
"???")
410 inOutStr <<
" " << *iter;
437 return diffs ?
false :
true;
446 deviceSerialNumber = 0;
450 numAnlgVidInputs = 0;
451 numAnlgVidOutputs = 0;
452 numHDMIVidInputs = 0;
453 numHDMIVidOutputs = 0;
454 numInputConverters = 0;
455 numOutputConverters = 0;
457 numDownConverters = 0;
458 downConverterDelay = 0;
459 isoConvertSupport =
false;
460 rateConvertSupport =
false;
461 dvcproHDSupport =
false;
464 quarterExpandSupport =
false;
465 vidProcSupport =
false;
466 dualLinkSupport =
false;
467 colorCorrectionSupport =
false;
468 programmableCSCSupport =
false;
469 rgbAlphaOutputSupport =
false;
470 breakoutBoxSupport =
false;
471 procAmpSupport =
false;
472 has2KSupport =
false;
473 has4KSupport =
false;
474 has8KSupport =
false;
475 has3GLevelConversion =
false;
476 proResSupport =
false;
477 sdi3GSupport =
false;
478 sdi12GSupport =
false;
480 biDirectionalSDI =
false;
481 ltcInSupport =
false;
482 ltcOutSupport =
false;
483 ltcInOnRefPort =
false;
484 stereoOutSupport =
false;
485 stereoInSupport =
false;
488 numAnalogAudioInputChannels = 0;
489 numAESAudioInputChannels = 0;
490 numEmbeddedAudioInputChannels = 0;
491 numHDMIAudioInputChannels = 0;
492 numAnalogAudioOutputChannels = 0;
493 numAESAudioOutputChannels = 0;
494 numEmbeddedAudioOutputChannels = 0;
495 numHDMIAudioOutputChannels = 0;
499 deviceIdentifier.clear();
500 audioSampleRateList.clear();
501 audioNumChannelsList.clear();
502 audioBitsPerSampleList.clear();
503 audioInSourceList.clear();
504 audioOutSourceList.clear();
522 outBoardsAdded.clear ();
523 outBoardsRemoved.clear ();
527 if (oldIter == inOldList.end () && newIter == inNewList.end ())
530 if (oldIter != inOldList.end () && newIter != inNewList.end ())
534 if (oldInfo != newInfo)
537 outBoardsRemoved.push_back (oldInfo);
541 outBoardsAdded.push_back (newInfo);
550 if (oldIter != inOldList.end () && newIter == inNewList.end ())
552 outBoardsRemoved.push_back (*oldIter);
557 if (oldIter == inOldList.end () && newIter != inNewList.end ())
559 if (newIter->deviceID && newIter->deviceID !=
NTV2DeviceID(0xFFFFFFFF))
560 outBoardsAdded.push_back (*newIter);
570 return !outBoardsAdded.empty () || !outBoardsRemoved.empty ();
578 inOutStr <<
" " << *iter;
587 inOutStr <<
" " << *iter;
605 return inOutStr <<
" ???";
612 inOutStr <<
" " << *iter;
621 <<
" Device Index Number: " << inInfo.
deviceIndex << endl
622 <<
" Device ID: 0x" << hex << inInfo.
deviceID << dec << endl
624 <<
" PCI Slot: 0x" << hex << inInfo.
pciSlot << dec << endl
638 <<
" Qrez: " << (inInfo.
qrezSupport ?
"Y" :
"N") << endl
639 <<
" HDV: " << (inInfo.
hdvSupport ?
"Y" :
"N") << endl
655 <<
" SDI 3G: " << (inInfo.
sdi3GSupport ?
"Y" :
"N") << endl
656 <<
" SDI 12G: " << (inInfo.
sdi12GSupport ?
"Y" :
"N") << endl
657 <<
" IP: " << (inInfo.
ipSupport ?
"Y" :
"N") << endl
659 <<
" LTC In: " << (inInfo.
ltcInSupport ?
"Y" :
"N") << endl
660 <<
" LTC Out: " << (inInfo.
ltcOutSupport ?
"Y" :
"N") << endl
661 <<
" LTC In on Ref Port: " << (inInfo.
ltcInOnRefPort ?
"Y" :
"N") << endl
690 inOutStr <<
"AudioPhysicalFormat:" << endl
691 <<
" boardNumber: " << inFormat.
boardNumber << endl
692 <<
" sampleRate: " << inFormat.
sampleRate << endl
693 <<
" numChannels: " << inFormat.
numChannels << endl
695 #if defined (DEBUG) || defined (AJA_DEBUG) 696 <<
" sourceIn: 0x" << hex << inFormat.
sourceIn << dec << endl
697 <<
" sourceOut: 0x" << hex << inFormat.
sourceOut << dec << endl
698 #endif // DEBUG or AJA_DEBUG 791 if (audioControl &
BIT(21))
823 #if defined(NTV2_PREVENT_PLUGIN_LOAD) 825 #else // else NTV2_PREVENT_PLUGIN_LOAD 827 if (vdevPath.empty())
832 for (
const auto & vdevFile : vdevFiles)
837 std::ifstream vf(vdevFile);
839 {
PLFAIL(
"Unable to open '" << vdevFile <<
"'");
return false;}
842 vdevJson = json::parse(vf);
844 catch (
const json::parse_error& e)
846 PLFAIL(
"Invalid JSON at byte " << e.byte <<
" in '" << vdevFile <<
"': " << e.what() <<
", exceptionID " << e.id);
857 bool explicitlyDisabled(
false);
865 if (vdevJson.size() > 32)
866 {
PLFAIL(
"File '" << vdevFile <<
"': more than 32 keys");
continue;}
868 for (
auto it(vdevJson.cbegin()); it != vdevJson.cend(); ++it)
869 if (keys.find(it.key()) == keys.end())
870 keys.insert(it.key());
875 if (legalKeys.find(*itKey) == legalKeys.end())
876 badKeys.push_back(*itKey);
878 goodKeys.push_back(*itKey);
880 if (!badKeys.empty())
881 PLWARN(
"File '" << vdevFile <<
"': ignored " <<
DEC(badKeys.size()) <<
" unknown key(s): '" <<
aja::join(badKeys,
"', '") <<
"'");
883 if (urlspecVal.is_null())
884 {
PLFAIL(
"File '" << vdevFile <<
"': missing required 'urlspec' parameter");
continue;}
885 if (disabledVal.is_boolean())
888 explicitlyDisabled = disabledVal.get<
bool>();
890 else if (!disabledVal.is_null())
891 {
PLFAIL(
"File '" << vdevFile <<
"': invalid 'disabled' value -- expected boolean 'true' or 'false' value");
continue;}
892 if (explicitlyDisabled)
893 {
PLNOTE(
"File '" << vdevFile <<
"': explicitly 'disabled'");
continue;}
894 newVDev.
vdevUrl = urlspecVal.get<std::string>();
896 if (!nameVal.is_null())
897 newVDev.
vdevName = nameVal.get<std::string>();
899 newVDev.
vdevUrl += parser.HasQueryParams() ?
"&" :
"?";
901 string fName (vdevFile);
902 fName.erase(fName.find(vdevPath), vdevPath.length()+1);
904 fName.erase(fName.length()-5, 5);
916 outVDevList.push_back(newVDev);
920 #endif // else NTV2_PREVENT_PLUGIN_LOAD 925 #if defined(NTV2_PREVENT_PLUGIN_LOAD) 927 #else // else NTV2_PREVENT_PLUGIN_LOAD 933 vdevPath +=
"virtualdevices";
937 for (
const auto & vdevFile : vdevFiles)
941 std::ifstream vf(vdevFile);
943 {
PLFAIL(
"Unable to open '" << vdevFile <<
"'");
return false;}
946 vdevJson = json::parse(vf);
948 catch (
const json::parse_error& e)
950 PLFAIL(
"Invalid JSON at byte " << e.byte <<
" in '" << vdevFile <<
"': " << e.what() <<
", exceptionID " << e.id);
967 auto pluginVal (vdevJson[
"plugin"]), nameVal (vdevJson[
"name"]), hostVal (vdevJson[
"host"]), urlspecVal (vdevJson[
"urlspec"]);
968 if (pluginVal.is_null())
969 {
PLFAIL(
"File: '" << vdevFile <<
"' missing required 'plugin' parameter");
continue;}
970 if (!urlspecVal.is_null())
971 PLWARN(
"File: '" << vdevFile <<
"' 'urlspec' parameter ignored");
973 newVDev.
vdevUrl = pluginVal.get<std::string>();
974 if (!nameVal.is_null())
977 oss << nameVal.get<std::string>() <<
" - " << newVDev.
deviceIndex;
979 newVDev.
vdevName = nameVal.get<std::string>();
982 if (!hostVal.is_null())
983 hostName = hostVal.get<std::string>();
984 if (hostName.empty())
985 hostName =
"localhost";
986 newVDev.
vdevUrl +=
"://" + hostName +
"/?";
989 for (
auto it (vdevJson.begin()); it != vdevJson.end(); ++it)
990 if (it.key() !=
"plugin" && it.key() !=
"name" && it.key() !=
"host")
992 auto paramValStr =
to_string(it.value());
999 const string queryStr(
aja::join(params,
"&"));
1000 if (!queryStr.empty())
1001 newVDev.
vdevUrl +=
"?" + queryStr;
1002 outVDevList.push_back(newVDev);
1005 #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.
bool is_legal_decimal_number(const std::string &inStr, const size_t inMaxLength)
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.
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)
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?
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
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)
NTV2StringSet::const_iterator NTV2StringSetConstIter
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.
std::vector< std::string > NTV2StringList
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 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...
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 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.
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.
std::set< std::string > NTV2StringSet
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...