AJA NTV2 SDK  17.5.0.1492
NTV2 SDK 17.5.0.1492
ntv2devicescanner.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #include "ntv2devicescanner.h"
9 #include "ntv2devicefeatures.h"
10 #include "ntv2utils.h"
11 #include "ajabase/common/common.h"
12 #include "ajabase/system/lock.h"
13 #include <sstream>
14 #include "ajabase/system/info.h"
15 #include "ajabase/common/json.hpp"
16 #include <fstream>
17 #include "ajabase/system/file_io.h"
18 
19 using namespace std;
21 
22 
23 #if defined(NTV2_DEPRECATE_17_1)
24  // Abbreviated device info struct
25  typedef struct NTV2DeviceInfo
26  {
27  NTV2DeviceID deviceID;
28  string serialNumber;
29  string deviceIdentifier;
31 
32  typedef vector <NTV2DeviceInfo> NTV2DeviceInfoList;
33  typedef NTV2DeviceInfoList::const_iterator NTV2DeviceInfoListConstIter;
34 #else
35  bool CNTV2DeviceScanner::IsHexDigit (const char inChr)
36  { static const string sHexDigits("0123456789ABCDEFabcdef");
37  return sHexDigits.find(inChr) != string::npos;
38  }
39 
40  bool CNTV2DeviceScanner::IsDecimalDigit (const char inChr)
41  { static const string sDecDigits("0123456789");
42  return sDecDigits.find(inChr) != string::npos;
43  }
44 
45  bool CNTV2DeviceScanner::IsAlphaNumeric (const char inChr)
46  { static const string sLegalChars("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
47  return sLegalChars.find(inChr) != string::npos;
48  }
49 
50  bool CNTV2DeviceScanner::IsLegalDecimalNumber (const string & inStr, const size_t inMaxLength)
51  {
52  return aja::is_legal_decimal_number(inStr, inMaxLength);
53  }
54 
55  uint64_t CNTV2DeviceScanner::IsLegalHexSerialNumber (const string & inStr) // 0x3236333331375458
56  {
57  return aja::is_legal_hex_serial_number(inStr);
58  }
59 
60  bool CNTV2DeviceScanner::IsAlphaNumeric (const string & inStr)
61  {
62  for (size_t ndx(0); ndx < inStr.size(); ndx++)
63  if (!aja::is_alpha_numeric(inStr.at(ndx)))
64  return false;
65  return true;
66  }
67 #endif // !defined(NTV2_DEPRECATE_17_1)
68 
69 bool CNTV2DeviceScanner::IsLegalSerialNumber (const string & inStr)
70 {
71  if (inStr.length() != 8 && inStr.length() != 9)
72  return false;
73  return aja::is_alpha_numeric(inStr);
74 }
75 
78 
80 {
81  AJAAutoLock tmpLock(&sDevInfoListLock);
82  return sDevInfoList.size();
83 }
84 
85 #if defined(NTV2_DEPRECATE_17_1)
86  void ScanHardware (void)
87  {
88  AJAAutoLock tmpLock(&sDevInfoListLock);
89  sDevInfoList.clear();
90  UWord ndx(0);
91  do
92  {
93  CNTV2Card tmpDev(ndx);
94  if (!tmpDev.IsOpen())
95  break;
96  NTV2DeviceInfo info;
97  info.deviceID = tmpDev.GetDeviceID();
98  tmpDev.GetSerialNumberString(info.serialNumber);
99  info.deviceIdentifier = tmpDev.GetDisplayName();
100  sDevInfoList.push_back(info);
101  ndx++;
102  } while (ndx < 16);
103  }
104 #else // !defined(NTV2_DEPRECATE_17_1)
106 {
107  if (inScanNow)
108  ScanHardware();
109 }
110 
111  #if !defined(NTV2_DEPRECATE_16_3)
112  CNTV2DeviceScanner::CNTV2DeviceScanner (bool inScanNow, UWord inDeviceMask)
113  {
114  (void)inDeviceMask;
115  if (inScanNow)
116  ScanHardware();
117  }
118  #endif // !defined(NTV2_DEPRECATE_16_3)
119 
121 {
122  AJAAutoLock tmpLock(&sDevInfoListLock);
123  return sDevInfoList;
124 }
125 
126 
128 {
129  AJAAutoLock tmpLock(&sDevInfoListLock);
130  sDevInfoList.clear();
131 
132  for (UWord boardNum(0); ; boardNum++)
133  {
134  CNTV2Card tmpDev(boardNum);
135  if (!tmpDev.IsOpen())
136  break;
137  const NTV2DeviceID deviceID (tmpDev.GetDeviceID());
138 
139  if (deviceID != DEVICE_ID_NOTFOUND)
140  {
141  ostringstream oss;
142  NTV2DeviceInfo info;
143  info.deviceIndex = boardNum;
144  info.deviceID = deviceID;
145  tmpDev.GetSerialNumberString(info.serialNumber);
146 
147  oss << ::NTV2DeviceIDToString (deviceID, tmpDev.IsSupported(kDeviceHasMicrophoneInput)) << " - " << boardNum;
148 
149  info.deviceIdentifier = oss.str();
150  SetDeviceAttributes(info, tmpDev);
151  SetAudioAttributes(info, tmpDev);
152  sDevInfoList.push_back(info);
153  }
154  tmpDev.Close();
155  } // boardNum loop
156 
157  GetVirtualDeviceList(sDevInfoList);
158 } // ScanHardware
159 
160 bool CNTV2DeviceScanner::DeviceIDPresent (const NTV2DeviceID inDeviceID, const bool inRescan)
161 {
162  AJAAutoLock tmpLock(&sDevInfoListLock);
163  if (inRescan)
164  ScanHardware();
165 
166  for (NTV2DeviceInfoListConstIter iter(sDevInfoList.begin()); iter != sDevInfoList.end(); ++iter)
167  if (iter->deviceID == inDeviceID)
168  return true; // Found!
169  return false; // Not found
170 
171 } // DeviceIDPresent
172 
173 
174 bool CNTV2DeviceScanner::GetDeviceInfo (const ULWord inDeviceIndexNumber, NTV2DeviceInfo & outDeviceInfo, const bool inRescan)
175 {
176  AJAAutoLock tmpLock(&sDevInfoListLock);
177  if (inRescan)
178  ScanHardware();
179 
180  for (NTV2DeviceInfoListConstIter iter(sDevInfoList.begin()); iter != sDevInfoList.end(); ++iter)
181  if (iter->deviceIndex == inDeviceIndexNumber)
182  {
183  outDeviceInfo = *iter;
184  return true; // Found!
185  }
186  return false; // No devices with this index number
187 
188 } // GetDeviceInfo
189 #endif // !defined(NTV2_DEPRECATE_17_1)
190 
191 bool CNTV2DeviceScanner::GetDeviceAtIndex (const ULWord inDeviceIndexNumber, CNTV2Card & outDevice)
192 {
193  outDevice.Close();
194  AJAAutoLock tmpLock(&sDevInfoListLock);
195  ScanHardware();
196  for (NTV2DeviceInfoListConstIter iter(sDevInfoList.begin()); iter != sDevInfoList.end(); ++iter)
197  if (iter->deviceIndex == inDeviceIndexNumber)
198  {
199  if (iter->isVirtualDevice)
200  return outDevice.Open(iter->vdevUrl);
201  else
202  return outDevice.Open(UWord(inDeviceIndexNumber));
203  }
204  return false; // No devices with this index number
205 
206 } // GetDeviceAtIndex
207 
208 
210 {
211  outDevice.Close();
212  AJAAutoLock tmpLock(&sDevInfoListLock);
213  ScanHardware();
214  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
215  if (sDevInfoList.at(ndx).deviceID == inDeviceID)
216  {
217  if (sDevInfoList.at(ndx).isVirtualDevice)
218  return outDevice.Open(sDevInfoList.at(ndx).vdevUrl);
219  else
220  return outDevice.Open(UWord(ndx));
221  }
222  return false; // Not found
223 
224 } // GetFirstDeviceWithID
225 
226 
227 bool CNTV2DeviceScanner::GetFirstDeviceWithName (const string & inNameSubString, CNTV2Card & outDevice)
228 {
229  outDevice.Close();
230  AJAAutoLock tmpLock(&sDevInfoListLock);
231  ScanHardware();
232  string nameSubString(inNameSubString); aja::lower(nameSubString);
233  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
234  {
235  string deviceName(sDevInfoList.at(ndx).deviceIdentifier); aja::lower(deviceName);
236  if (deviceName.find(nameSubString) != string::npos)
237  {
238  if (sDevInfoList.at(ndx).isVirtualDevice)
239  return outDevice.Open(sDevInfoList.at(ndx).vdevUrl);
240  else
241  return outDevice.Open(UWord(ndx));
242  }
243  }
244  if (nameSubString == "io4kplus")
245  { // Io4K+ == DNXIV...
246  nameSubString = "avid dnxiv";
247  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
248  {
249  string deviceName(sDevInfoList.at(ndx).deviceIdentifier); aja::lower(deviceName);
250  if (deviceName.find(nameSubString) != string::npos)
251  {
252  if (sDevInfoList.at(ndx).isVirtualDevice)
253  return outDevice.Open(sDevInfoList.at(ndx).vdevUrl);
254  else
255  return outDevice.Open(UWord(ndx));
256  }
257  }
258  }
259  return false; // Not found
260 
261 } // GetFirstDeviceWithName
262 
263 bool CNTV2DeviceScanner::GetVirtualDeviceWithName (const string & inNameString, CNTV2Card & outDevice, const bool inRescan)
264 {
265  outDevice.Close();
266  AJAAutoLock tmpLock(&sDevInfoListLock);
267  if (inRescan)
268  ScanHardware();
269  string nameString(inNameString); aja::lower(nameString);
270  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
271  {
272  if (!sDevInfoList.at(ndx).isVirtualDevice)
273  continue;
274  string deviceName(sDevInfoList.at(ndx).vdevName); aja::lower(deviceName);
275  if (deviceName == nameString)
276  {
277  return outDevice.Open(sDevInfoList.at(ndx).vdevUrl);
278  }
279  }
280  return false; // Not found
281 }
282 
283 bool CNTV2DeviceScanner::GetFirstDeviceWithSerial (const string & inSerialStr, CNTV2Card & outDevice)
284 {
285  outDevice.Close();
286  AJAAutoLock tmpLock(&sDevInfoListLock);
287  ScanHardware();
288  string searchSerialStr(inSerialStr); aja::lower(searchSerialStr);
289  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
290  {
291  string ser(sDevInfoList.at(ndx).serialNumber); aja::lower(ser);
292  if (ser.find(searchSerialStr) != string::npos)
293  {
294  if (sDevInfoList.at(ndx).isVirtualDevice)
295  return outDevice.Open(sDevInfoList.at(ndx).vdevUrl);
296  else
297  return outDevice.Open(UWord(ndx));
298  }
299  }
300  return false;
301 }
302 
303 
304 #if !defined(NTV2_DEPRECATE_17_5)
305 bool CNTV2DeviceScanner::GetDeviceWithSerial (const uint64_t inSerialNumber, CNTV2Card & outDevice)
306 {
307  const string serNumStr(::SerialNum64ToString(inSerialNumber));
308  return GetDeviceWithSerial(serNumStr, outDevice);
309 }
310 #endif // !defined(NTV2_DEPRECATE_17_5)
311 
312 bool CNTV2DeviceScanner::GetDeviceWithSerial (const string & inSerialNumber, CNTV2Card & outDevice)
313 {
314  outDevice.Close();
315  AJAAutoLock tmpLock(&sDevInfoListLock);
316  ScanHardware();
317  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
318  if (sDevInfoList.at(ndx).serialNumber == inSerialNumber)
319  {
320  if (sDevInfoList.at(ndx).isVirtualDevice)
321  return outDevice.Open(sDevInfoList.at(ndx).vdevUrl);
322  else
323  return outDevice.Open(UWord(ndx));
324  }
325  return false;
326 }
327 
328 
329 bool CNTV2DeviceScanner::GetFirstDeviceFromArgument (const string & inArgument, CNTV2Card & outDevice)
330 {
331  outDevice.Close();
332  if (inArgument.empty())
333  return false;
334 
335  // Special case: 'LIST' or '?' --- print an enumeration of available devices to stdout, then bail
336  AJAAutoLock tmpLock(&sDevInfoListLock);
337  ScanHardware();
338  string upperArg(inArgument); aja::upper(upperArg);
339  if (upperArg == "LIST" || upperArg == "?")
340  {
341  if (sDevInfoList.empty())
342  cout << "No devices detected" << endl;
343  else
344  cout << DEC(sDevInfoList.size()) << " available " << (sDevInfoList.size() == 1 ? "device:" : "devices:") << endl;
345  for (size_t ndx(0); ndx < sDevInfoList.size(); ndx++)
346  {
347  if (sDevInfoList.at(ndx).isVirtualDevice)
348  {
349  cout << DECN(ndx, 2) << " | " << setw(8) << "virtual";
350  if (!sDevInfoList.at(ndx).vdevName.empty())
351  cout << " | " << setw(10) << sDevInfoList.at(ndx).vdevName;
352  cout << " | " << sDevInfoList.at(ndx).vdevUrl << endl;
353  }
354  else
355  {
356  cout << DECN(ndx, 2) << " | " << setw(8) << "local";
357  const string serNum(sDevInfoList.at(ndx).serialNumber);
358  if (!serNum.empty())
359  cout << " | " << setw(10) << serNum;
360  cout << " | " << setw(16) << ::NTV2DeviceIDToString(sDevInfoList.at(ndx).deviceID);
361  cout << endl;
362  }
363  }
364  return false;
365  }
366 
367  for (NTV2DeviceInfoListConstIter iter(sDevInfoList.begin()); iter != sDevInfoList.end(); ++iter)
368  {
369  if (to_string(iter->deviceIndex) == inArgument)
370  return outDevice.Open(iter->isVirtualDevice ? iter->vdevUrl : inArgument);
371  else if (iter->deviceIdentifier == inArgument)
372  return outDevice.Open(iter->isVirtualDevice ? iter->vdevUrl : inArgument);
373  else if (iter->isVirtualDevice && iter->vdevName == inArgument)
374  return outDevice.Open( iter->vdevUrl );
375  else if (aja::is_legal_decimal_number(inArgument, inArgument.length())
376  && aja::is_legal_hex_serial_number(inArgument)
377  && iter->deviceID == NTV2DeviceID(stoi(inArgument)))
378  return outDevice.Open(iter->isVirtualDevice ? iter->vdevUrl : inArgument);
379  else if (IsLegalSerialNumber(inArgument))
380  return outDevice.Open(inArgument);
381  else if (inArgument.find("://") != string::npos)
382  return outDevice.Open(inArgument);
383  }
384  return outDevice.Open(inArgument);
385 } // GetFirstDeviceFromArgument
386 
387 
389 { // Name that will find given device via CNTV2DeviceScanner::GetFirstDeviceFromArgument
390  if (!inDevice.IsOpen())
391  return string();
392  // Nub address 1st...
393  if (!inDevice.GetHostName().empty() && inDevice.IsRemote())
394  return inDevice.GetHostName(); // Nub host/device
395 
396  // Serial number 2nd...
397  string str;
398  if (inDevice.GetSerialNumberString(str))
399  return str;
400 
401  // Model name 3rd...
402  str = ::NTV2DeviceIDToString(inDevice.GetDeviceID(), false);
403  if (!str.empty() && str != "???")
404  return str;
405 
406  // Index number last...
407  ostringstream oss; oss << DEC(inDevice.GetIndexNumber());
408  return oss.str();
409 }
410 
411 
412 #if !defined(NTV2_DEPRECATE_17_1)
413 ostream & operator << (ostream & inOutStr, const NTV2DeviceInfoList & inList)
414 {
415  for (NTV2DeviceInfoListConstIter iter(inList.begin()); iter != inList.end(); ++iter)
416  inOutStr << " " << *iter;
417  return inOutStr;
418 
419 } // NTV2DeviceInfoList ostream operator <<
420 
421 
423 {
424  const NTV2DeviceInfo & first (*this);
425  size_t diffs (0);
426 
427  // 'memcmp' would be simpler, but because NTV2DeviceInfo has no constructor, the unfilled bytes in
428  // its "boardIdentifier" field are indeterminate, making it worthless for accurate comparisons.
429  // "boardSerialNumber" and boardNumber are the only required comparisons, but I also check boardType,
430  // boardID, and pciSlot for good measure...
431  if (first.deviceID != second.deviceID) diffs++;
432  if (first.deviceIndex != second.deviceIndex) diffs++;
433  if (first.serialNumber != second.serialNumber) diffs++;
434  if (first.pciSlot != second.pciSlot) diffs++;
435 
436  // Needs to be fixed now that deviceIdentifier is a std::string
437  //#if defined (AJA_DEBUG)
438  // if (::strncmp (first.deviceIdentifier.c_str (), second.deviceIdentifier.c_str (), first.deviceIdentifier.length ()))) diffs++;
439  // if (diffs)
440  // {cout << "## DEBUG: " << diffs << " diff(s):" << endl << "#### first ####" << endl << first << "#### second ####" << endl << second << endl;}
441  //#endif // AJA_DEBUG
442 
443  return diffs ? false : true;
444 
445 } // equality operator
446 
448 {
449  deviceID = DEVICE_ID_INVALID;
450  deviceIndex = 0;
451  pciSlot = 0;
452  deviceSerialNumber = 0;
453  serialNumber = "";
454  numVidInputs = 0;
455  numVidOutputs = 0;
456  numAnlgVidInputs = 0;
457  numAnlgVidOutputs = 0;
458  numHDMIVidInputs = 0;
459  numHDMIVidOutputs = 0;
460  numInputConverters = 0;
461  numOutputConverters = 0;
462  numUpConverters = 0;
463  numDownConverters = 0;
464  downConverterDelay = 0;
465  isoConvertSupport = false;
466  rateConvertSupport = false;
467  dvcproHDSupport = false;
468  qrezSupport = false;
469  hdvSupport = 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;
485  ipSupport = false;
486  biDirectionalSDI = false;
487  ltcInSupport = false;
488  ltcOutSupport = false;
489  ltcInOnRefPort = false;
490  stereoOutSupport = false;
491  stereoInSupport = false;
492  multiFormat = false;
493  numAudioStreams = 0;
494  numAnalogAudioInputChannels = 0;
495  numAESAudioInputChannels = 0;
496  numEmbeddedAudioInputChannels = 0;
497  numHDMIAudioInputChannels = 0;
498  numAnalogAudioOutputChannels = 0;
499  numAESAudioOutputChannels = 0;
500  numEmbeddedAudioOutputChannels = 0;
501  numHDMIAudioOutputChannels = 0;
502  numDMAEngines = 0;
503  numSerialPorts = 0;
504  pingLED = 0;
505  deviceIdentifier.clear();
506  audioSampleRateList.clear();
507  audioNumChannelsList.clear();
508  audioBitsPerSampleList.clear();
509  audioInSourceList.clear();
510  audioOutSourceList.clear();
511 }
512 
514 {
515  if (&info != this)
516  *this = info;
517 }
518 
519 
521  const NTV2DeviceInfoList & inNewList,
522  NTV2DeviceInfoList & outBoardsAdded,
523  NTV2DeviceInfoList & outBoardsRemoved)
524 {
525  NTV2DeviceInfoListConstIter oldIter (inOldList.begin ());
526  NTV2DeviceInfoListConstIter newIter (inNewList.begin ());
527 
528  outBoardsAdded.clear ();
529  outBoardsRemoved.clear ();
530 
531  while (true)
532  {
533  if (oldIter == inOldList.end () && newIter == inNewList.end ())
534  break; // Done -- exit
535 
536  if (oldIter != inOldList.end () && newIter != inNewList.end ())
537  {
538  const NTV2DeviceInfo & oldInfo (*oldIter), newInfo (*newIter);
539 
540  if (oldInfo != newInfo)
541  {
542  // Out with the old...
543  outBoardsRemoved.push_back (oldInfo);
544 
545  // In with the new...
546  if (newInfo.deviceID && newInfo.deviceID != NTV2DeviceID(0xFFFFFFFF))
547  outBoardsAdded.push_back (newInfo);
548  } // if mismatch
549 
550  ++oldIter;
551  ++newIter;
552  continue; // Move along
553 
554  } // if both valid
555 
556  if (oldIter != inOldList.end () && newIter == inNewList.end ())
557  {
558  outBoardsRemoved.push_back (*oldIter);
559  ++oldIter;
560  continue; // Move along
561  } // old is valid, new is not valid
562 
563  if (oldIter == inOldList.end () && newIter != inNewList.end ())
564  {
565  if (newIter->deviceID && newIter->deviceID != NTV2DeviceID(0xFFFFFFFF))
566  outBoardsAdded.push_back (*newIter);
567  ++newIter;
568  continue; // Move along
569  } // old is not valid, new is valid
570 
571  NTV2_ASSERT(false && "should never get here");
572 
573  } // loop til break
574 
575  // Return 'true' if there were any changes...
576  return !outBoardsAdded.empty () || !outBoardsRemoved.empty ();
577 
578 } // CompareDeviceInfoLists
579 
580 
581 ostream & operator << (ostream & inOutStr, const NTV2AudioSampleRateList & inList)
582 {
583  for (NTV2AudioSampleRateListConstIter iter (inList.begin ()); iter != inList.end (); ++iter)
584  inOutStr << " " << *iter;
585 
586  return inOutStr;
587 }
588 
589 
590 ostream & operator << (ostream & inOutStr, const NTV2AudioChannelsPerFrameList & inList)
591 {
592  for (NTV2AudioChannelsPerFrameListConstIter iter (inList.begin ()); iter != inList.end (); ++iter)
593  inOutStr << " " << *iter;
594 
595  return inOutStr;
596 }
597 
598 
599 ostream & operator << (ostream & inOutStr, const NTV2AudioSourceList & inList)
600 {
601  for (NTV2AudioSourceListConstIter iter(inList.begin()); iter != inList.end(); ++iter)
602  switch (*iter) // AudioSourceEnum
603  {
604  case kSourceSDI: return inOutStr << " SDI";
605  case kSourceAES: return inOutStr << " AES";
606  case kSourceADAT: return inOutStr << " ADAT";
607  case kSourceAnalog: return inOutStr << " Analog";
608  case kSourceNone: return inOutStr << " None";
609  case kSourceAll: return inOutStr << " All";
610  }
611  return inOutStr << " ???";
612 }
613 
614 
615 ostream & operator << (ostream & inOutStr, const NTV2AudioBitsPerSampleList & inList)
616 {
617  for (NTV2AudioBitsPerSampleListConstIter iter (inList.begin ()); iter != inList.end (); ++iter)
618  inOutStr << " " << *iter;
619 
620  return inOutStr;
621 }
622 
623 
624 ostream & operator << (ostream & inOutStr, const NTV2DeviceInfo & inInfo)
625 {
626  inOutStr << "Device Info for '" << inInfo.deviceIdentifier << "'" << endl
627  << " Device Index Number: " << inInfo.deviceIndex << endl
628  << " Device ID: 0x" << hex << inInfo.deviceID << dec << endl
629  << " Serial Number: " << inInfo.serialNumber << endl
630  << " PCI Slot: 0x" << hex << inInfo.pciSlot << dec << endl
631  << " Video Inputs: " << inInfo.numVidInputs << endl
632  << " Video Outputs: " << inInfo.numVidOutputs << endl
633  #if defined (_DEBUG)
634  << " Analog Video Inputs: " << inInfo.numAnlgVidInputs << endl
635  << " Analog Video Outputs: " << inInfo.numAnlgVidOutputs << endl
636  << " HDMI Video Inputs: " << inInfo.numHDMIVidInputs << endl
637  << " HDMI Video Outputs: " << inInfo.numHDMIVidOutputs << endl
638  << " Input Converters: " << inInfo.numInputConverters << endl
639  << " Output Converters: " << inInfo.numOutputConverters << endl
640  << " Up Converters: " << inInfo.numUpConverters << endl
641  << " Down Converters: " << inInfo.numDownConverters << endl
642  << " Down Converter Delay: " << inInfo.downConverterDelay << endl
643  << " DVCProHD: " << (inInfo.dvcproHDSupport ? "Y" : "N") << endl
644  << " Qrez: " << (inInfo.qrezSupport ? "Y" : "N") << endl
645  << " HDV: " << (inInfo.hdvSupport ? "Y" : "N") << endl
646  << " Quarter Expand: " << (inInfo.quarterExpandSupport ? "Y" : "N") << endl
647  << " ISO Convert: " << (inInfo.isoConvertSupport ? "Y" : "N") << endl
648  << " Rate Convert: " << (inInfo.rateConvertSupport ? "Y" : "N") << endl
649  << " VidProc: " << (inInfo.vidProcSupport ? "Y" : "N") << endl
650  << " Dual-Link: " << (inInfo.dualLinkSupport ? "Y" : "N") << endl
651  << " Color-Correction: " << (inInfo.colorCorrectionSupport ? "Y" : "N") << endl
652  << " Programmable CSC: " << (inInfo.programmableCSCSupport ? "Y" : "N") << endl
653  << " RGB Alpha Output: " << (inInfo.rgbAlphaOutputSupport ? "Y" : "N") << endl
654  << " Breakout Box: " << (inInfo.breakoutBoxSupport ? "Y" : "N") << endl
655  << " ProcAmp: " << (inInfo.procAmpSupport ? "Y" : "N") << endl
656  << " 2K: " << (inInfo.has2KSupport ? "Y" : "N") << endl
657  << " 4K: " << (inInfo.has4KSupport ? "Y" : "N") << endl
658  << " 8K: " << (inInfo.has8KSupport ? "Y" : "N") << endl
659  << " 3G Level Conversion: " << (inInfo.has3GLevelConversion ? "Y" : "N") << endl
660  << " ProRes: " << (inInfo.proResSupport ? "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
664  << " SDI Bi-Directional: " << (inInfo.biDirectionalSDI ? "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
668  << " Stereo Out: " << (inInfo.stereoOutSupport ? "Y" : "N") << endl
669  << " Stereo In: " << (inInfo.stereoInSupport ? "Y" : "N") << endl
670  << " Audio Sample Rates: " << inInfo.audioSampleRateList << endl
671  << " AudioNumChannelsList: " << inInfo.audioNumChannelsList << endl
672  << " AudioBitsPerSampleList: " << inInfo.audioBitsPerSampleList << endl
673  << " AudioInSourceList: " << inInfo.audioInSourceList << endl
674  << " AudioOutSourceList: " << inInfo.audioOutSourceList << endl
675  << " Audio Streams: " << inInfo.numAudioStreams << endl
676  << " Analog Audio Input Channels: " << inInfo.numAnalogAudioInputChannels << endl
677  << " Analog Audio Output Channels: " << inInfo.numAnalogAudioOutputChannels << endl
678  << " AES Audio Input Channels: " << inInfo.numAESAudioInputChannels << endl
679  << " AES Audio Output Channels: " << inInfo.numAESAudioOutputChannels << endl
680  << " Embedded Audio Input Channels: " << inInfo.numEmbeddedAudioInputChannels << endl
681  << " Embedded Audio Output Channels: " << inInfo.numEmbeddedAudioOutputChannels << endl
682  << " HDMI Audio Input Channels: " << inInfo.numHDMIAudioInputChannels << endl
683  << " HDMI Audio Output Channels: " << inInfo.numHDMIAudioOutputChannels << endl
684  << " DMA Engines: " << inInfo.numDMAEngines << endl
685  << " Serial Ports: " << inInfo.numSerialPorts << endl
686  #endif // AJA_DEBUG
687  << "";
688 
689  return inOutStr;
690 
691 } // NTV2DeviceInfo ostream operator <<
692 
693 
694 ostream & operator << (ostream & inOutStr, const NTV2AudioPhysicalFormat & inFormat)
695 {
696  inOutStr << "AudioPhysicalFormat:" << endl
697  << " boardNumber: " << inFormat.boardNumber << endl
698  << " sampleRate: " << inFormat.sampleRate << endl
699  << " numChannels: " << inFormat.numChannels << endl
700  << " bitsPerSample: " << inFormat.bitsPerSample << 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
705  ;
706 
707  return inOutStr;
708 
709 } // AudioPhysicalFormat ostream operator <<
710 
711 
712 std::ostream & operator << (std::ostream & inOutStr, const NTV2AudioPhysicalFormatList & inList)
713 {
714  for (NTV2AudioPhysicalFormatListConstIter iter (inList.begin ()); iter != inList.end (); ++iter)
715  inOutStr << *iter;
716 
717  return inOutStr;
718 
719 } // AudioPhysicalFormatList ostream operator <<
720 
721 
722 // Private methods
723 
724 void CNTV2DeviceScanner::SetDeviceAttributes (NTV2DeviceInfo & inDeviceInfo, CNTV2Card & inDevice)
725 {
726  inDevice.GetSerialNumberString(inDeviceInfo.serialNumber);
727  const ULWordSet wgtIDs (inDevice.GetSupportedItems(kNTV2EnumsID_WidgetID));
728  inDeviceInfo.numVidInputs = inDevice.GetNumSupported(kDeviceGetNumVideoInputs);
739  inDeviceInfo.dvcproHDSupport = inDevice.IsSupported(kDeviceCanDoDVCProHD);
740  inDeviceInfo.qrezSupport = inDevice.IsSupported(kDeviceCanDoQREZ);
741  inDeviceInfo.hdvSupport = inDevice.IsSupported(kDeviceCanDoHDV);
746  inDeviceInfo.breakoutBoxSupport = inDevice.IsSupported(kDeviceCanDoBreakoutBox);
747  inDeviceInfo.vidProcSupport = inDevice.IsSupported(kDeviceCanDoVideoProcessing);
748  inDeviceInfo.dualLinkSupport = inDevice.IsSupported(kDeviceCanDoDualLink);
750  inDeviceInfo.pingLED = inDevice.GetNumSupported(kDeviceGetPingLED);
751  inDeviceInfo.has2KSupport = inDevice.IsSupported(kDeviceCanDo2KVideo);
752  inDeviceInfo.has4KSupport = inDevice.IsSupported(kDeviceCanDo4KVideo);
753  inDeviceInfo.has8KSupport = inDevice.IsSupported(kDeviceCanDo8KVideo);
755  inDeviceInfo.isoConvertSupport = inDevice.IsSupported(kDeviceCanDoIsoConvert);
756  inDeviceInfo.rateConvertSupport = inDevice.IsSupported(kDeviceCanDoRateConvert);
757  inDeviceInfo.proResSupport = inDevice.IsSupported(kDeviceCanDoProRes);
758  inDeviceInfo.sdi3GSupport = wgtIDs.find(NTV2_Wgt3GSDIOut1) != wgtIDs.end();
759  inDeviceInfo.sdi12GSupport = inDevice.IsSupported(kDeviceCanDo12GSDI);
760  inDeviceInfo.ipSupport = inDevice.IsSupported(kDeviceCanDoIP);
762  inDeviceInfo.ltcInSupport = inDevice.GetNumSupported(kDeviceGetNumLTCInputs) > 0;
763  inDeviceInfo.ltcOutSupport = inDevice.GetNumSupported(kDeviceGetNumLTCOutputs) > 0;
764  inDeviceInfo.ltcInOnRefPort = inDevice.IsSupported(kDeviceCanDoLTCInOnRefPort);
765  inDeviceInfo.stereoOutSupport = inDevice.IsSupported(kDeviceCanDoStereoOut);
766  inDeviceInfo.stereoInSupport = inDevice.IsSupported(kDeviceCanDoStereoIn);
767  inDeviceInfo.multiFormat = inDevice.IsSupported(kDeviceCanDoMultiFormat);
769  inDeviceInfo.procAmpSupport = false;
770 }
771 
772 void CNTV2DeviceScanner::SetAudioAttributes (NTV2DeviceInfo & info, CNTV2Card & inBoard)
773 {
774  // Start with empty lists...
775  info.audioSampleRateList.clear();
776  info.audioNumChannelsList.clear();
777  info.audioBitsPerSampleList.clear();
778  info.audioInSourceList.clear();
779  info.audioOutSourceList.clear();
780 
781 
783  {
784  ULWord audioControl;
785  inBoard.ReadRegister(kRegAud1Control, audioControl);
786 
787  //audioSampleRateList
788  info.audioSampleRateList.push_back(k48KHzSampleRate);
789  if (inBoard.IsSupported(kDeviceCanDoAudio96K))
790  info.audioSampleRateList.push_back(k96KHzSampleRate);
791 
792  //audioBitsPerSampleList
794 
795  //audioInSourceList
796  info.audioInSourceList.push_back(kSourceSDI);
797  if (audioControl & BIT(21))
798  info.audioInSourceList.push_back(kSourceAES);
800  info.audioInSourceList.push_back(kSourceAnalog);
801 
802  //audioOutSourceList
803  info.audioOutSourceList.push_back(kSourceAll);
804 
805  //audioNumChannelsList
812 
814  }
815 
824 
825 } // SetAudioAttributes
826 
827 
828 bool CNTV2DeviceScanner::GetVirtualDeviceList(NTV2DeviceInfoList& outVirtualDevList)
829 {
830 #if defined(NTV2_PREVENT_PLUGIN_LOAD)
831  return false;
832 #endif
833 
834  string vdevPath;
835  AJASystemInfo info;
837  return false;
838  vdevPath = vdevPath + "virtualdevices";
839  ULWord vdIndex = ULWord(outVirtualDevList.size());
840  std::vector<std::string> vdevFiles;
841  AJAFileIO::ReadDirectory(vdevPath, "*.vdev", vdevFiles);
842  for (const auto& vdevFile : vdevFiles)
843  {
844  std::ifstream cfgJsonfile(vdevFile);
845  json vdevJson;
846  if (cfgJsonfile.is_open())
847  {
848  try
849  {
850  vdevJson = json::parse(cfgJsonfile);
851  }
852  catch (const json::parse_error& e)
853  {
854  cerr << "JSON parse error: " << e.what() << endl;
855  cerr << "Exception id: " << e.id << endl;
856  cerr << "Byte position of error: " << e.byte << endl;
857  return false;
858  }
859  }
860  else
861  return false;
862  cfgJsonfile.close();
863 
864  NTV2DeviceInfo newVDev;
865  newVDev.isVirtualDevice = true;
866  newVDev.deviceIndex = vdIndex++;
867  newVDev.deviceID = DEVICE_ID_SOFTWARE;
868  newVDev.deviceIdentifier = "";
869  newVDev.vdevName = "";
870 
871  // There are 3 special keys:
872  // plugin - this is required, specifies the name of plug-in to try loading.
873  // name - optional, specifies a human readable name for the virtual device,
874  // defaults to "" if not specified.
875  // host - optional, host to use in the plug-in url, defaults to "localhost"
876  // if not specified.
877  string hostName;
878  auto pluginVal = vdevJson["plugin"];
879  auto nameVal = vdevJson["name"];
880  auto hostVal = vdevJson["host"];
881 
882  if (pluginVal.is_null())
883  {
884  cerr << "JSON file: '" << vdevFile << "' is missing the required paramater 'plugin'." << endl;
885  continue;
886  }
887  newVDev.vdevUrl = pluginVal.get<std::string>();
888 
889  if (!nameVal.is_null())
890  {
891  ostringstream oss;
892  oss << nameVal.get<std::string>() << " - " << newVDev.deviceIndex;
893  newVDev.deviceIdentifier = oss.str();
894 
895  newVDev.vdevName = nameVal.get<std::string>();
896  }
897 
898  if (!hostVal.is_null())
899  {
900  hostName = hostVal.get<std::string>();
901  }
902 
903  if (hostName.empty())
904  {
905  hostName = "localhost";
906  }
907 
908  newVDev.vdevUrl += "://" + hostName + "/?";
909  bool isFirstParam = true;
910  for (auto it = vdevJson.begin(); it != vdevJson.end(); ++it)
911  {
912  if (it.key() != "plugin" && it.key() != "name" && it.key() != "host")
913  {
914  auto paramValStr = to_string(it.value());
915  aja::strip(paramValStr, "\"");
916  newVDev.vdevUrl += (isFirstParam ? "" : "&") + it.key() + "=" + PercentEncode(paramValStr);
917  isFirstParam = false;
918  }
919  }
920 
921  if (!newVDev.deviceIdentifier.empty())
922  {
923  string displayNameParam = "displayname";
924  newVDev.vdevUrl += (isFirstParam ? "" : "&") + displayNameParam + "=" + PercentEncode(newVDev.deviceIdentifier);
925  }
926 
927  outVirtualDevList.push_back(newVDev);
928  }
929  return true;
930 }
931 #endif // !defined(NTV2_DEPRECATE_17_1)
CNTV2DeviceScanner::IsLegalHexSerialNumber
static uint64_t IsLegalHexSerialNumber(const std::string &inStr)
Definition: ntv2devicescanner.cpp:55
kDeviceGetNumVideoInputs
@ kDeviceGetNumVideoInputs
The number of SDI video inputs on the device.
Definition: ntv2devicefeatures.h:210
kDeviceHasBiDirectionalSDI
@ kDeviceHasBiDirectionalSDI
True if device SDI connectors are bi-directional.
Definition: ntv2devicefeatures.h:92
NTV2AudioPhysicalFormat::sourceIn
AudioSourceEnum sourceIn
Definition: ntv2devicescanner.h:181
kDeviceCanDoAudio6Channels
@ kDeviceCanDoAudio6Channels
True if audio system(s) support 6 or more audio channels.
Definition: ntv2devicefeatures.h:49
kNumAudioChannels6
@ kNumAudioChannels6
Definition: ntv2audiodefines.h:41
info.h
Declares the AJASystemInfo class.
NTV2DeviceInfo::audioOutSourceList
NTV2AudioSourceList audioOutSourceList
My supported audio output destinations (AES, etc.)
Definition: ntv2devicescanner.h:90
NTV2DeviceInfo::quarterExpandSupport
bool quarterExpandSupport
Definition: ntv2devicescanner.h:63
CNTV2DeviceScanner::DeviceIDPresent
static bool DeviceIDPresent(const NTV2DeviceID inDeviceID, const bool inRescan=(0))
Definition: ntv2devicescanner.cpp:160
NTV2DeviceInfo::numAnalogAudioInputChannels
UWord numAnalogAudioInputChannels
Total number of analog audio input channels.
Definition: ntv2devicescanner.h:92
NTV2DeviceInfo::biDirectionalSDI
bool biDirectionalSDI
Supports Bi-directional SDI.
Definition: ntv2devicescanner.h:79
NTV2DeviceInfo::audioBitsPerSampleList
NTV2AudioBitsPerSampleList audioBitsPerSampleList
My supported audio bits-per-sample.
Definition: ntv2devicescanner.h:88
kDeviceCanDoIP
@ kDeviceCanDoIP
True if device has SFP connectors.
Definition: ntv2devicefeatures.h:128
kSourceAnalog
@ kSourceAnalog
Definition: ntv2audiodefines.h:69
kDeviceCanDoVideoProcessing
@ kDeviceCanDoVideoProcessing
True if device can do video processing.
Definition: ntv2devicefeatures.h:89
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::exception::what
const char * what() const noexcept override
returns the explanatory string
Definition: json.hpp:4375
NTV2DeviceInfo::numDownConverters
UWord numDownConverters
Total number of down-converters.
Definition: ntv2devicescanner.h:56
NTV2DeviceInfo::numAnlgVidOutputs
UWord numAnlgVidOutputs
Total number of analog video outputs.
Definition: ntv2devicescanner.h:50
NTV2AudioPhysicalFormat::bitsPerSample
AudioBitsPerSampleEnum bitsPerSample
Definition: ntv2devicescanner.h:180
ntv2devicefeatures.h
Declares device capability functions.
CNTV2MacDriverInterface::ReadRegister
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....
Definition: ntv2macdriverinterface.cpp:389
NTV2DeviceInfo::has3GLevelConversion
bool has3GLevelConversion
Supports 3G Level Conversion?
Definition: ntv2devicescanner.h:74
NTV2DeviceInfo::rateConvertSupport
bool rateConvertSupport
Definition: ntv2devicescanner.h:59
NTV2DeviceInfo::numHDMIVidInputs
UWord numHDMIVidInputs
Total number of HDMI inputs.
Definition: ntv2devicescanner.h:51
aja::strip
std::string & strip(std::string &str, const std::string &ws)
Definition: common.cpp:461
kDeviceGetNumDownConverters
@ kDeviceGetNumDownConverters
The number of down-converters on the device.
Definition: ntv2devicefeatures.h:194
kDeviceCanDoHDV
@ kDeviceCanDoHDV
True if device can squeeze/stretch between 1920x1080 and 1440x1080.
Definition: ntv2devicefeatures.h:64
NTV2DeviceInfo::sdi12GSupport
bool sdi12GSupport
Supports 12G?
Definition: ntv2devicescanner.h:77
AJA_STATUS_SUCCESS
@ AJA_STATUS_SUCCESS
Definition: types.h:381
kDeviceGetNumAnalogAudioInputChannels
@ kDeviceGetNumAnalogAudioInputChannels
The number of analog audio input channels on the device.
Definition: ntv2devicefeatures.h:187
NTV2_ASSERT
#define NTV2_ASSERT(_expr_)
Definition: ajatypes.h:508
NTV2DeviceInfo::ltcInSupport
bool ltcInSupport
Accepts LTC input?
Definition: ntv2devicescanner.h:80
kDeviceGetNumEmbeddedAudioOutputChannels
@ kDeviceGetNumEmbeddedAudioOutputChannels
The number of SDI-embedded output audio channels supported by the device.
Definition: ntv2devicefeatures.h:196
GetDeviceInfoList
NTV2DeviceInfoList GetDeviceInfoList(void)
Definition: ntv2devicescanner.cpp:120
NTV2DeviceInfo::vdevUrl
std::string vdevUrl
Definition: ntv2devicescanner.h:104
kSourceSDI
@ kSourceSDI
Definition: ntv2audiodefines.h:66
NTV2AudioSourceListConstIter
NTV2AudioSourceList::const_iterator NTV2AudioSourceListConstIter
Definition: ntv2devicescanner.h:29
NTV2DeviceInfo::numHDMIVidOutputs
UWord numHDMIVidOutputs
Total number of HDMI outputs.
Definition: ntv2devicescanner.h:52
sDevInfoListLock
static AJALock sDevInfoListLock
Definition: ntv2devicescanner.cpp:77
CNTV2DeviceScanner::GetFirstDeviceFromArgument
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...
Definition: ntv2devicescanner.cpp:329
CNTV2DeviceScanner::GetFirstDeviceWithID
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...
Definition: ntv2devicescanner.cpp:209
NTV2DeviceInfo::vdevName
std::string vdevName
Definition: ntv2devicescanner.h:105
k48KHzSampleRate
@ k48KHzSampleRate
Definition: ntv2audiodefines.h:59
NTV2AudioPhysicalFormat::sourceOut
AudioSourceEnum sourceOut
Definition: ntv2devicescanner.h:182
NTV2DeviceInfoList
std::vector< NTV2DeviceInfo > NTV2DeviceInfoList
I am an ordered list of NTV2DeviceInfo structs.
Definition: ntv2devicescanner.h:162
kDeviceCanDo4KVideo
@ kDeviceCanDo4KVideo
True if the device can handle 4K/UHD video.
Definition: ntv2devicefeatures.h:43
NTV2DeviceInfo::numSerialPorts
UWord numSerialPorts
Total number of serial ports.
Definition: ntv2devicescanner.h:101
kDeviceCanDoAudio96K
@ kDeviceCanDoAudio96K
True if Audio System(s) support a 96kHz sample rate.
Definition: ntv2devicefeatures.h:51
kDeviceCanDo3GLevelConversion
@ kDeviceCanDo3GLevelConversion
True if device can do 3G level B to 3G level A conversion.
Definition: ntv2devicefeatures.h:40
kNumAudioChannels2
@ kNumAudioChannels2
Definition: ntv2audiodefines.h:39
kDeviceCanDoQuarterExpand
@ kDeviceCanDoQuarterExpand
True if device can handle quarter-sized frames (pixel-halving and line-halving during input,...
Definition: ntv2devicefeatures.h:79
NTV2DeviceID
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
kDeviceGetNumVideoOutputs
@ kDeviceGetNumVideoOutputs
The number of SDI video outputs on the device.
Definition: ntv2devicefeatures.h:211
CNTV2DeviceScanner::CNTV2DeviceScanner
CNTV2DeviceScanner(const bool inScanNow=(!(0)))
Definition: ntv2devicescanner.cpp:105
NTV2_Wgt3GSDIOut1
@ NTV2_Wgt3GSDIOut1
Definition: ntv2enums.h:2917
aja::is_legal_hex_serial_number
uint64_t is_legal_hex_serial_number(const std::string &inStr)
Definition: common.cpp:536
CNTV2DeviceScanner::GetDeviceWithSerial
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...
aja::stoi
int stoi(const std::string &str, std::size_t *idx, int base)
Definition: common.cpp:122
kDeviceGetNumAESAudioOutputChannels
@ kDeviceGetNumAESAudioOutputChannels
The number of AES/EBU audio output channels on the device.
Definition: ntv2devicefeatures.h:186
kDeviceCanDoColorCorrection
@ kDeviceCanDoColorCorrection
True if device has any LUTs.
Definition: ntv2devicefeatures.h:55
kDeviceCanDoDualLink
@ kDeviceCanDoDualLink
True if device supports 10-bit RGB input/output over 2-wire SDI.
Definition: ntv2devicefeatures.h:58
k96KHzSampleRate
@ k96KHzSampleRate
Definition: ntv2audiodefines.h:60
CNTV2DeviceScanner::GetNumDevices
static size_t GetNumDevices(void)
Definition: ntv2devicescanner.cpp:79
CNTV2DeviceScanner::GetFirstDeviceWithSerial
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...
Definition: ntv2devicescanner.cpp:283
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::basic_json
a class to store JSON values
Definition: json.hpp:3411
PercentEncode
std::string PercentEncode(const std::string &inStr)
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::void
j template void())
Definition: json.hpp:4893
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::basic_json::begin
iterator begin() noexcept
returns an iterator to the first element
Definition: json.hpp:22071
kDeviceGetNumAnalogAudioOutputChannels
@ kDeviceGetNumAnalogAudioOutputChannels
The number of analog audio output channels on the device.
Definition: ntv2devicefeatures.h:188
k32bitsPerSample
@ k32bitsPerSample
Definition: ntv2audiodefines.h:52
kDeviceGetNumDMAEngines
@ kDeviceGetNumDMAEngines
The number of DMA engines on the device.
Definition: ntv2devicefeatures.h:180
NTV2DeviceInfo::numHDMIAudioOutputChannels
UWord numHDMIAudioOutputChannels
Total number of HDMI audio output channels.
Definition: ntv2devicescanner.h:99
NTV2DeviceInfo::vidProcSupport
bool vidProcSupport
Definition: ntv2devicescanner.h:64
NTV2DeviceInfo::numAnlgVidInputs
UWord numAnlgVidInputs
Total number of analog video inputs.
Definition: ntv2devicescanner.h:49
NTV2AudioChannelsPerFrameListConstIter
NTV2AudioChannelsPerFrameList::const_iterator NTV2AudioChannelsPerFrameListConstIter
Definition: ntv2devicescanner.h:25
CNTV2DriverInterface::IsSupported
virtual bool IsSupported(const NTV2BoolParamID inParamID)
Definition: ntv2driverinterface.h:424
kDeviceCanDoDVCProHD
@ kDeviceCanDoDVCProHD
True if device can squeeze/stretch between 1920x1080/1280x1080 and 1280x720/960x720.
Definition: ntv2devicefeatures.h:59
NTV2AudioPhysicalFormat::boardNumber
ULWord boardNumber
Definition: ntv2devicescanner.h:177
NTV2AudioBitsPerSampleList
std::vector< AudioBitsPerSampleEnum > NTV2AudioBitsPerSampleList
Definition: ntv2devicescanner.h:32
NTV2AudioSampleRateList
std::vector< AudioSampleRateEnum > NTV2AudioSampleRateList
Definition: ntv2devicescanner.h:20
CNTV2DeviceScanner::CompareDeviceInfoLists
static bool CompareDeviceInfoLists(const NTV2DeviceInfoList &inOldList, const NTV2DeviceInfoList &inNewList, NTV2DeviceInfoList &outDevicesAdded, NTV2DeviceInfoList &outDevicesRemoved)
Definition: ntv2devicescanner.cpp:520
kSourceADAT
@ kSourceADAT
Definition: ntv2audiodefines.h:68
kDeviceCanDoAnalogAudio
@ kDeviceCanDoAnalogAudio
True if device has any analog inputs or outputs.
Definition: ntv2devicefeatures.h:45
NTV2AudioPhysicalFormat::sampleRate
AudioSampleRateEnum sampleRate
Definition: ntv2devicescanner.h:178
NTV2DeviceInfo::numVidOutputs
UWord numVidOutputs
Total number of video outputs – analog, digital, whatever.
Definition: ntv2devicescanner.h:48
aja::lower
std::string & lower(std::string &str)
Definition: common.cpp:436
kDeviceGetNumAudioSystems
@ kDeviceGetNumAudioSystems
The number of independent Audio Systems on the device.
Definition: ntv2devicefeatures.h:191
NTV2DeviceInfo::deviceIdentifier
std::string deviceIdentifier
Device name as seen in Control Panel, Watcher, Cables, etc.
Definition: ntv2devicescanner.h:46
NTV2DeviceInfo::audioInSourceList
NTV2AudioSourceList audioInSourceList
My supported audio input sources (AES, ADAT, etc.)
Definition: ntv2devicescanner.h:89
ULWordSet
std::set< ULWord > ULWordSet
A collection of unique ULWord (uint32_t) values.
Definition: ntv2publicinterface.h:54
lock.h
Declares the AJALock class.
NTV2DeviceInfo::has4KSupport
bool has4KSupport
Supports 4K formats?
Definition: ntv2devicescanner.h:72
AJASystemInfo::GetValue
virtual AJAStatus GetValue(const AJASystemInfoTag inTag, std::string &outValue) const
Answers with the host system info value string for the given AJASystemInfoTag.
Definition: info.cpp:151
ULWord
uint32_t ULWord
Definition: ajatypes.h:255
kDeviceCanDoProRes
@ kDeviceCanDoProRes
True if device can can accommodate Apple ProRes-compressed video in its frame buffers.
Definition: ntv2devicefeatures.h:77
kDeviceGetNumAnalogVideoInputs
@ kDeviceGetNumAnalogVideoInputs
The number of analog video inputs on the device.
Definition: ntv2devicefeatures.h:189
ntv2devicescanner.h
Declares the CNTV2DeviceScanner class.
NTV2DeviceInfo::numOutputConverters
UWord numOutputConverters
Total number of output converters.
Definition: ntv2devicescanner.h:54
kDeviceCanDoLTCInOnRefPort
@ kDeviceCanDoLTCInOnRefPort
True if device can read LTC (Linear TimeCode) from its reference input.
Definition: ntv2devicefeatures.h:68
NTV2DeviceIDToString
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:4678
CNTV2DeviceScanner::ScanHardware
static void ScanHardware(void)
Definition: ntv2devicescanner.cpp:127
CNTV2DeviceScanner::GetDeviceInfo
static bool GetDeviceInfo(const ULWord inDeviceIndexNumber, NTV2DeviceInfo &outDeviceInfo, const bool inRescan=(0))
Definition: ntv2devicescanner.cpp:174
CNTV2Card::GetSerialNumberString
virtual bool GetSerialNumberString(std::string &outSerialNumberString)
Answers with a string that contains my human-readable serial number.
Definition: ntv2card.cpp:233
kDeviceGetNumInputConverters
@ kDeviceGetNumInputConverters
The number of input converter widgets on the device.
Definition: ntv2devicefeatures.h:203
aja::upper
std::string & upper(std::string &str)
Definition: common.cpp:442
UWord
uint16_t UWord
Definition: ajatypes.h:253
NTV2AudioPhysicalFormat
Definition: ntv2devicescanner.h:176
ntv2utils.h
Declares numerous NTV2 utility functions.
NTV2DeviceInfo::numDMAEngines
UWord numDMAEngines
Total number of DMA engines.
Definition: ntv2devicescanner.h:100
CNTV2DeviceScanner::GetFirstDeviceWithName
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...
Definition: ntv2devicescanner.cpp:227
CNTV2Card
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:28
NTV2DeviceInfo::rgbAlphaOutputSupport
bool rgbAlphaOutputSupport
Supports RGB alpha channel?
Definition: ntv2devicescanner.h:68
AJA_SystemInfoTag_Path_PersistenceStoreUser
@ AJA_SystemInfoTag_Path_PersistenceStoreUser
Definition: info.h:46
DEVICE_ID_INVALID
@ DEVICE_ID_INVALID
Definition: ntv2enums.h:93
sDevInfoList
static NTV2DeviceInfoList sDevInfoList
Definition: ntv2devicescanner.cpp:76
kDeviceCanDoBreakoutBox
@ kDeviceCanDoBreakoutBox
True if device supports an AJA breakout box.
Definition: ntv2devicefeatures.h:53
kNTV2EnumsID_WidgetID
@ kNTV2EnumsID_WidgetID
Identifies the NTV2AudioWidgetID enumerated type.
Definition: ntv2devicefeatures.h:250
NTV2DeviceInfo::numAESAudioOutputChannels
UWord numAESAudioOutputChannels
Total number of AES audio output channels.
Definition: ntv2devicescanner.h:97
CNTV2DeviceScanner::GetDeviceRefName
static std::string GetDeviceRefName(CNTV2Card &inDevice)
Definition: ntv2devicescanner.cpp:388
kDeviceGetPingLED
@ kDeviceGetPingLED
The highest bit number of the LED bits in the Global Control Register on the device.
Definition: ntv2devicefeatures.h:182
kDeviceCanDoStereoIn
@ kDeviceCanDoStereoIn
True if device supports 3D video input over dual-stream SDI.
Definition: ntv2devicefeatures.h:86
CNTV2DriverInterface::GetNumSupported
virtual ULWord GetNumSupported(const NTV2NumericParamID inParamID)
Definition: ntv2driverinterface.h:435
AJALock
Definition: lock.h:28
NTV2DeviceInfo::has2KSupport
bool has2KSupport
Supports 2K formats?
Definition: ntv2devicescanner.h:71
NTV2DeviceInfo::procAmpSupport
bool procAmpSupport
Definition: ntv2devicescanner.h:70
kDeviceGetDownConverterDelay
@ kDeviceGetDownConverterDelay
The down-converter delay on the device.
Definition: ntv2devicefeatures.h:174
NTV2DeviceInfo::proResSupport
bool proResSupport
Supports ProRes?
Definition: ntv2devicescanner.h:75
NTV2DeviceInfo::stereoOutSupport
bool stereoOutSupport
Supports stereo output?
Definition: ntv2devicescanner.h:83
kDeviceGetNumAESAudioInputChannels
@ kDeviceGetNumAESAudioInputChannels
The number of AES/EBU audio input channels on the device.
Definition: ntv2devicefeatures.h:185
NTV2DeviceInfo::qrezSupport
bool qrezSupport
Definition: ntv2devicescanner.h:61
NTV2DeviceInfo::numUpConverters
UWord numUpConverters
Total number of up-converters.
Definition: ntv2devicescanner.h:55
kDeviceGetNumHDMIVideoInputs
@ kDeviceGetNumHDMIVideoInputs
The number of HDMI video inputs on the device.
Definition: ntv2devicefeatures.h:201
AJAAutoLock
Definition: lock.h:89
NTV2DeviceInfo::isVirtualDevice
bool isVirtualDevice
Definition: ntv2devicescanner.h:103
NTV2DeviceInfo::numEmbeddedAudioInputChannels
UWord numEmbeddedAudioInputChannels
Total number of embedded (SDI) audio input channels.
Definition: ntv2devicescanner.h:94
CNTV2DeviceScanner::IsHexDigit
static bool IsHexDigit(const char inChr)
Definition: ntv2devicescanner.cpp:35
NTV2AudioPhysicalFormat::numChannels
AudioChannelsPerFrameEnum numChannels
Definition: ntv2devicescanner.h:179
json.hpp
NTV2DeviceInfo::programmableCSCSupport
bool programmableCSCSupport
Programmable color space converter?
Definition: ntv2devicescanner.h:67
kDeviceCanDoRGBPlusAlphaOut
@ kDeviceCanDoRGBPlusAlphaOut
True if device has CSCs capable of splitting the key (alpha) and YCbCr (fill) from RGB frame buffers ...
Definition: ntv2devicefeatures.h:81
NTV2DeviceInfoListConstIter
NTV2DeviceInfoList::const_iterator NTV2DeviceInfoListConstIter
Definition: ntv2devicescanner.h:163
NTV2DeviceInfo::multiFormat
bool multiFormat
Supports multiple video formats?
Definition: ntv2devicescanner.h:85
file_io.h
Declares the AJAFileIO class.
kRegAud1Control
@ kRegAud1Control
Definition: ntv2publicinterface.h:127
NTV2DeviceInfo::isoConvertSupport
bool isoConvertSupport
Definition: ntv2devicescanner.h:58
NTV2DeviceInfo::deviceIndex
ULWord deviceIndex
Device index number – this will be phased out someday.
Definition: ntv2devicescanner.h:42
NTV2DeviceInfo::numAnalogAudioOutputChannels
UWord numAnalogAudioOutputChannels
Total number of analog audio output channels.
Definition: ntv2devicescanner.h:96
NTV2DeviceInfo::numHDMIAudioInputChannels
UWord numHDMIAudioInputChannels
Total number of HDMI audio input channels.
Definition: ntv2devicescanner.h:95
NTV2DeviceInfo::numVidInputs
UWord numVidInputs
Total number of video inputs – analog, digital, whatever.
Definition: ntv2devicescanner.h:47
NTV2DeviceInfo::has8KSupport
bool has8KSupport
Supports 8K formats?
Definition: ntv2devicescanner.h:73
DEC
#define DEC(__x__)
Definition: ntv2publicinterface.h:5647
NTV2AudioSourceList
std::vector< AudioSourceEnum > NTV2AudioSourceList
Definition: ntv2devicescanner.h:28
kDeviceGetNumHDMIVideoOutputs
@ kDeviceGetNumHDMIVideoOutputs
The number of HDMI video outputs on the device.
Definition: ntv2devicefeatures.h:202
false
#define false
Definition: ntv2devicefeatures.h:25
common.h
Private include file for all ajabase sources.
CNTV2DeviceScanner::GetDeviceAtIndex
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...
Definition: ntv2devicescanner.cpp:191
kDeviceGetNumHDMIAudioOutputChannels
@ kDeviceGetNumHDMIAudioOutputChannels
The number of HDMI audio output channels on the device.
Definition: ntv2devicefeatures.h:200
kDeviceGetNumHDMIAudioInputChannels
@ kDeviceGetNumHDMIAudioInputChannels
The number of HDMI audio input channels on the device.
Definition: ntv2devicefeatures.h:199
NTV2DeviceInfo
Definition: ntv2devicescanner.h:39
aja::is_alpha_numeric
bool is_alpha_numeric(const char inChr)
Definition: common.cpp:521
std
Definition: json.hpp:5362
operator<<
ostream & operator<<(ostream &inOutStr, const NTV2DeviceInfoList &inList)
Definition: ntv2devicescanner.cpp:413
aja::is_legal_decimal_number
bool is_legal_decimal_number(const std::string &inStr, const size_t inMaxLength)
Definition: common.cpp:526
NTV2AudioPhysicalFormatListConstIter
NTV2AudioPhysicalFormatList::const_iterator NTV2AudioPhysicalFormatListConstIter
Definition: ntv2devicescanner.h:199
NTV2DeviceInfo::audioSampleRateList
NTV2AudioSampleRateList audioSampleRateList
My supported audio sample rates.
Definition: ntv2devicescanner.h:86
kDeviceCanDo8KVideo
@ kDeviceCanDo8KVideo
True if device supports 8K video formats.
Definition: ntv2devicefeatures.h:119
kDeviceHasMicrophoneInput
@ kDeviceHasMicrophoneInput
True if device has a microphone input connector.
Definition: ntv2devicefeatures.h:142
kSourceAES
@ kSourceAES
Definition: ntv2audiodefines.h:67
NTV2DeviceInfo::pingLED
ULWord pingLED
Definition: ntv2devicescanner.h:102
CNTV2DriverInterface::GetDeviceID
virtual NTV2DeviceID GetDeviceID(void)
Definition: ntv2driverinterface.cpp:411
NTV2DeviceInfo::operator==
bool operator==(const NTV2DeviceInfo &rhs) const
Definition: ntv2devicescanner.cpp:422
NTV2DeviceInfo::pciSlot
ULWord pciSlot
PCI slot (if applicable and/or known)
Definition: ntv2devicescanner.h:43
kDeviceCanDoAudio2Channels
@ kDeviceCanDoAudio2Channels
True if audio system(s) support 2 or more audio channels.
Definition: ntv2devicefeatures.h:48
kDeviceCanDo12GSDI
@ kDeviceCanDo12GSDI
True if device has 12G SDI connectors.
Definition: ntv2devicefeatures.h:117
NTV2AudioSampleRateListConstIter
NTV2AudioSampleRateList::const_iterator NTV2AudioSampleRateListConstIter
Definition: ntv2devicescanner.h:21
NTV2DeviceInfo::ltcOutSupport
bool ltcOutSupport
Supports LTC output?
Definition: ntv2devicescanner.h:81
kSourceAll
@ kSourceAll
Definition: ntv2audiodefines.h:71
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::basic_json::parse
static basic_json parse(InputType &&i, const parser_callback_t cb=nullptr, const bool allow_exceptions=true, const bool ignore_comments=false)
deserialize from a compatible input
Definition: json.hpp:23318
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::basic_json::end
iterator end() noexcept
returns an iterator to one past the last element
Definition: json.hpp:22096
NTV2DeviceInfo::numInputConverters
UWord numInputConverters
Total number of input converters.
Definition: ntv2devicescanner.h:53
kDeviceCanDoRateConvert
@ kDeviceCanDoRateConvert
True if device can do frame rate conversion.
Definition: ntv2devicefeatures.h:80
NTV2DeviceInfo::dvcproHDSupport
bool dvcproHDSupport
Definition: ntv2devicescanner.h:60
NTV2DeviceInfo::ipSupport
bool ipSupport
Supports IP IO?
Definition: ntv2devicescanner.h:78
CNTV2DeviceScanner::GetVirtualDeviceWithName
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...
Definition: ntv2devicescanner.cpp:263
NTV2DeviceInfo::colorCorrectionSupport
bool colorCorrectionSupport
Supports color correction?
Definition: ntv2devicescanner.h:66
NTV2DeviceInfo::sdi3GSupport
bool sdi3GSupport
Supports 3G?
Definition: ntv2devicescanner.h:76
kDeviceCanDoProgrammableCSC
@ kDeviceCanDoProgrammableCSC
True if device has at least one programmable color space converter widget.
Definition: ntv2devicefeatures.h:75
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::exception::id
const int id
the id of the exception
Definition: json.hpp:4381
kDeviceCanDoAudio8Channels
@ kDeviceCanDoAudio8Channels
True if audio system(s) support 8 or more audio channels.
Definition: ntv2devicefeatures.h:50
aja::to_string
std::string to_string(bool val)
Definition: common.cpp:180
NTV2DeviceInfo::breakoutBoxSupport
bool breakoutBoxSupport
Can support a breakout box?
Definition: ntv2devicescanner.h:69
NTV2DeviceInfo::NTV2DeviceInfo
NTV2DeviceInfo()
Definition: ntv2devicescanner.cpp:447
kDeviceCanDo2KVideo
@ kDeviceCanDo2KVideo
True if device can handle 2Kx1556 (film) video.
Definition: ntv2devicefeatures.h:39
AJAFileIO::ReadDirectory
static AJAStatus ReadDirectory(const std::string &directory, const std::string &filePattern, std::vector< std::string > &fileContainer)
Definition: file_io.cpp:805
BIT
#define BIT(_x_)
Definition: ajatypes.h:563
NTV2DeviceInfo
struct NTV2DeviceInfo NTV2DeviceInfo
kDeviceGetNumUpConverters
@ kDeviceGetNumUpConverters
The number of up-converters on the device.
Definition: ntv2devicefeatures.h:209
kSourceNone
@ kSourceNone
Definition: ntv2audiodefines.h:70
NTV2AudioPhysicalFormatList
std::vector< NTV2AudioPhysicalFormat > NTV2AudioPhysicalFormatList
I am an ordered list of NTV2AudioPhysicalFormat structs.
Definition: ntv2devicescanner.h:198
NTV2DeviceInfo::ltcInOnRefPort
bool ltcInOnRefPort
Supports LTC on reference input?
Definition: ntv2devicescanner.h:82
NTV2DeviceInfo::audioNumChannelsList
NTV2AudioChannelsPerFrameList audioNumChannelsList
My supported number of audio channels per frame.
Definition: ntv2devicescanner.h:87
NTV2AudioChannelsPerFrameList
std::vector< AudioChannelsPerFrameEnum > NTV2AudioChannelsPerFrameList
Definition: ntv2devicescanner.h:24
kDeviceGetNumAnalogVideoOutputs
@ kDeviceGetNumAnalogVideoOutputs
The number of analog video outputs on the device.
Definition: ntv2devicefeatures.h:190
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::parse_error::byte
const std::size_t byte
byte index of the parse error
Definition: json.hpp:4507
DEVICE_ID_SOFTWARE
@ DEVICE_ID_SOFTWARE
Software device that doesn't emulate one of the above devices.
Definition: ntv2enums.h:80
kDeviceGetNumOutputConverters
@ kDeviceGetNumOutputConverters
The number of output converter widgets on the device.
Definition: ntv2devicefeatures.h:206
CNTV2DriverInterface::Open
virtual bool Open(const UWord inDeviceIndex)
Opens a local/physical AJA device so it can be monitored/controlled.
Definition: ntv2driverinterface.cpp:131
kDeviceGetNumEmbeddedAudioInputChannels
@ kDeviceGetNumEmbeddedAudioInputChannels
The number of SDI-embedded input audio channels supported by the device.
Definition: ntv2devicefeatures.h:195
kDeviceGetNumSerialPorts
@ kDeviceGetNumSerialPorts
The number of RS-422 serial ports on the device.
Definition: ntv2devicefeatures.h:208
DEVICE_ID_NOTFOUND
@ DEVICE_ID_NOTFOUND
Invalid or "not found".
Definition: ntv2enums.h:92
NTV2DeviceInfo::downConverterDelay
UWord downConverterDelay
Definition: ntv2devicescanner.h:57
NTV2DeviceInfo::stereoInSupport
bool stereoInSupport
Supports stereo input?
Definition: ntv2devicescanner.h:84
kDeviceCanDoQREZ
@ kDeviceCanDoQREZ
True if device can handle QRez.
Definition: ntv2devicefeatures.h:78
CNTV2DeviceScanner::IsDecimalDigit
static bool IsDecimalDigit(const char inChr)
Definition: ntv2devicescanner.cpp:40
NTV2DeviceInfo::numAESAudioInputChannels
UWord numAESAudioInputChannels
Total number of AES audio input channels.
Definition: ntv2devicescanner.h:93
NTV2DeviceInfo::serialNumber
std::string serialNumber
Unique device serial number (new in SDK 17.5)
Definition: ntv2devicescanner.h:45
kDeviceCanDoIsoConvert
@ kDeviceCanDoIsoConvert
True if device can do ISO conversion.
Definition: ntv2devicefeatures.h:66
kDeviceCanDoMultiFormat
@ kDeviceCanDoMultiFormat
True if device can simultaneously handle different video formats on more than one SDI input or output...
Definition: ntv2devicefeatures.h:70
NTV2DeviceInfo::deviceID
NTV2DeviceID deviceID
Device ID/species (e.g., DEVICE_ID_KONA3G, DEVICE_ID_IOXT, etc.)
Definition: ntv2devicescanner.h:41
SerialNum64ToString
std::string SerialNum64ToString(const uint64_t &inSerNum)
Definition: ntv2utils.cpp:8166
CNTV2DriverInterface::Close
virtual bool Close(void)
Closes me, releasing host resources that may have been allocated in a previous Open call.
Definition: ntv2driverinterface.cpp:227
CNTV2DeviceScanner::IsAlphaNumeric
static bool IsAlphaNumeric(const char inStr)
Definition: ntv2devicescanner.cpp:45
CNTV2DeviceScanner::IsLegalSerialNumber
static bool IsLegalSerialNumber(const std::string &inStr)
Definition: ntv2devicescanner.cpp:69
kDeviceGetNumLTCOutputs
@ kDeviceGetNumLTCOutputs
The number of analog LTC outputs on the device.
Definition: ntv2devicefeatures.h:215
CNTV2DriverInterface::GetSupportedItems
virtual ULWordSet GetSupportedItems(const NTV2EnumsID inEnumsID)
Definition: ntv2driverinterface.cpp:1435
NTV2AudioBitsPerSampleListConstIter
NTV2AudioBitsPerSampleList::const_iterator NTV2AudioBitsPerSampleListConstIter
Definition: ntv2devicescanner.h:33
kNumAudioChannels8
@ kNumAudioChannels8
Definition: ntv2audiodefines.h:42
CNTV2DeviceScanner::IsLegalDecimalNumber
static bool IsLegalDecimalNumber(const std::string &inStr, const size_t maxLen=2)
Definition: ntv2devicescanner.cpp:50
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::parse_error
exception indicating a parse error
Definition: json.hpp:4469
NTV2DeviceInfo::numAudioStreams
UWord numAudioStreams
Maximum number of independent audio streams.
Definition: ntv2devicescanner.h:91
kDeviceCanDoStereoOut
@ kDeviceCanDoStereoOut
True if device supports 3D video output over dual-stream SDI.
Definition: ntv2devicefeatures.h:87
NTV2DeviceInfo::dualLinkSupport
bool dualLinkSupport
Supports dual-link?
Definition: ntv2devicescanner.h:65
kDeviceGetNumLTCInputs
@ kDeviceGetNumLTCInputs
The number of analog LTC inputs on the device.
Definition: ntv2devicefeatures.h:214
NTV2DeviceInfo::hdvSupport
bool hdvSupport
Definition: ntv2devicescanner.h:62
DECN
#define DECN(__x__, __n__)
Definition: ntv2publicinterface.h:5648
NTV2DeviceInfo::numEmbeddedAudioOutputChannels
UWord numEmbeddedAudioOutputChannels
Total number of embedded (SDI) audio output channels.
Definition: ntv2devicescanner.h:98
AJASystemInfo
Definition: info.h:78