120 {VHD_VIDEOSTD_S274M_1080p_25Hz,
"SMPTE 274M 1080p 25 Hz",
121 1920u, 1080u, 25.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
122 {VHD_VIDEOSTD_S274M_1080p_30Hz,
"SMPTE 274M 1080p 29.97 Hz",
123 1920u, 1080u, 29.97,
PROGRESSIVE, VHD_INTERFACE_AUTO},
124 {VHD_VIDEOSTD_S274M_1080p_30Hz,
"SMPTE 274M 1080p 30 Hz",
125 1920u, 1080u, 30.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
126 {VHD_VIDEOSTD_S274M_1080i_50Hz,
"SMPTE 274M 1080i 50 Hz",
128 {VHD_VIDEOSTD_S274M_1080i_60Hz,
"SMPTE 274M 1080i 59.94 Hz",
130 {VHD_VIDEOSTD_S274M_1080i_60Hz,
"SMPTE 274M 1080i 60 Hz",
132 {VHD_VIDEOSTD_S296M_720p_50Hz,
"SMPTE 296M 720p 50 Hz",
133 1280u, 720u, 50.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
134 {VHD_VIDEOSTD_S296M_720p_60Hz,
"SMPTE 296M 720p 59.94 Hz",
135 1280u, 720u, 59.94,
PROGRESSIVE, VHD_INTERFACE_AUTO},
136 {VHD_VIDEOSTD_S296M_720p_60Hz,
"SMPTE 296M 720p 60 Hz",
137 1280u, 720u, 60.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
138 {VHD_VIDEOSTD_S259M_PAL,
"SMPTE 259M PAL",
140 {VHD_VIDEOSTD_S259M_NTSC,
"SMPTE 259M NTSC",
142 {VHD_VIDEOSTD_S274M_1080p_24Hz,
"SMPTE 274M 1080p 23.98 Hz",
143 1920u, 1080u, 23.98,
PROGRESSIVE, VHD_INTERFACE_AUTO},
144 {VHD_VIDEOSTD_S274M_1080p_24Hz,
"SMPTE 274M 1080p 24 Hz",
145 1920u, 1080u, 24.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
146 {VHD_VIDEOSTD_S274M_1080p_60Hz,
"SMPTE 274M 1080p 59.94 Hz",
147 1920u, 1080u, 59.94,
PROGRESSIVE, VHD_INTERFACE_AUTO},
148 {VHD_VIDEOSTD_S274M_1080p_60Hz,
"SMPTE 274M 1080p 60 Hz",
149 1920u, 1080u, 60.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
150 {VHD_VIDEOSTD_S274M_1080p_24Hz,
"SMPTE 274M 1080p 50 Hz",
151 1920u, 1080u, 50.0,
PROGRESSIVE, VHD_INTERFACE_AUTO},
152 {VHD_VIDEOSTD_S274M_1080psf_24Hz,
"SMPTE 274M 1080psf 23.98 Hz",
154 {VHD_VIDEOSTD_S274M_1080psf_24Hz,
"SMPTE 274M 1080psf 24 Hz",
156 {VHD_VIDEOSTD_S274M_1080psf_25Hz,
"SMPTE 274M 1080psf 25 Hz",
158 {VHD_VIDEOSTD_S274M_1080psf_30Hz,
"SMPTE 274M 1080psf 29.97 Hz",
160 {VHD_VIDEOSTD_S274M_1080psf_30Hz,
"SMPTE 274M 1080psf 30 Hz",
163 {VHD_VIDEOSTD_3840x2160p_24Hz,
"3840x2160 24 Hz",
164 3840u, 2160u, 24.0,
PROGRESSIVE, VHD_INTERFACE_4XHD},
165 {VHD_VIDEOSTD_3840x2160p_25Hz,
"3840x2160 25 Hz",
166 3840u, 2160u, 25.0,
PROGRESSIVE, VHD_INTERFACE_4XHD},
167 {VHD_VIDEOSTD_3840x2160p_30Hz,
"3840x2160 30 Hz",
168 3840u, 2160u, 30.0,
PROGRESSIVE, VHD_INTERFACE_4XHD},
169 {VHD_VIDEOSTD_3840x2160p_50Hz,
"3840x2160 50 Hz",
170 3840u, 2160u, 50.0,
PROGRESSIVE, VHD_INTERFACE_4X3G_A},
171 {VHD_VIDEOSTD_3840x2160p_60Hz,
"3840x2160 60 Hz",
172 3840u, 2160u, 60.0,
PROGRESSIVE, VHD_INTERFACE_4X3G_A},
173 {VHD_VIDEOSTD_4096x2160p_24Hz,
"4096x2160 24 Hz",
174 4096u, 2160u, 24.0,
PROGRESSIVE, VHD_INTERFACE_4XHD},
175 {VHD_VIDEOSTD_4096x2160p_25Hz,
"4096x2160 25 Hz",
176 4096u, 2160u, 25.0,
PROGRESSIVE, VHD_INTERFACE_4XHD},
177 {VHD_VIDEOSTD_4096x2160p_25Hz,
"4096x2160 25 Hz",
178 4096u, 2160u, 25.0,
PROGRESSIVE, VHD_INTERFACE_4XHD},
179 {VHD_VIDEOSTD_4096x2160p_48Hz,
"4096x2160 48 Hz",
180 4096u, 2160u, 48.0,
PROGRESSIVE, VHD_INTERFACE_4X3G_A},
181 {VHD_VIDEOSTD_4096x2160p_50Hz,
"4096x2160 50 Hz",
182 4096u, 2160u, 50.0,
PROGRESSIVE, VHD_INTERFACE_4X3G_A},
183 {VHD_VIDEOSTD_4096x2160p_60Hz,
"4096x2160 60 Hz",
184 4096u, 2160u, 60.0,
PROGRESSIVE, VHD_INTERFACE_4X3G_A},
209 case VHDERR_NOERROR:
return "No error";
210 case VHDERR_FATALERROR:
return "Fatal error occurred (should re-install)";
211 case VHDERR_OPERATIONFAILED:
return "Operation failed (undefined error)";
212 case VHDERR_NOTENOUGHRESOURCE:
return "Not enough resource to complete the operation";
213 case VHDERR_NOTIMPLEMENTED:
return "Not implemented yet";
214 case VHDERR_NOTFOUND:
return "Required element was not found";
215 case VHDERR_BADARG:
return "Bad argument value";
216 case VHDERR_INVALIDPOINTER:
return "Invalid pointer";
217 case VHDERR_INVALIDHANDLE:
return "Invalid handle";
218 case VHDERR_INVALIDPROPERTY:
return "Invalid property index";
219 case VHDERR_INVALIDSTREAM:
return "Invalid stream or invalid stream type";
220 case VHDERR_RESOURCELOCKED:
return "Resource is currently locked";
221 case VHDERR_BOARDNOTPRESENT:
return "Board is not available";
222 case VHDERR_INCOHERENTBOARDSTATE:
return "Incoherent board state or register value";
223 case VHDERR_INCOHERENTDRIVERSTATE:
return "Incoherent driver state";
224 case VHDERR_INCOHERENTLIBSTATE:
return "Incoherent library state";
225 case VHDERR_SETUPLOCKED:
return "Configuration is locked";
226 case VHDERR_CHANNELUSED:
return "Requested channel is already used or doesn't exist";
227 case VHDERR_STREAMUSED:
return "Requested stream is already used";
228 case VHDERR_READONLYPROPERTY:
return "Property is read-only";
229 case VHDERR_OFFLINEPROPERTY:
return "Property is off-line only";
230 case VHDERR_TXPROPERTY:
return "Property is of TX streams";
231 case VHDERR_TIMEOUT:
return "Time-out occurred";
232 case VHDERR_STREAMNOTRUNNING:
return "Stream is not running";
233 case VHDERR_BADINPUTSIGNAL:
return "Bad input signal, or unsupported standard";
234 case VHDERR_BADREFERENCESIGNAL:
return "Bad genlock signal or unsupported standard";
235 case VHDERR_FRAMELOCKED:
return "Frame already locked";
236 case VHDERR_FRAMEUNLOCKED:
return "Frame already unlocked";
237 case VHDERR_INCOMPATIBLESYSTEM:
return "Selected video standard is incompatible with running clock system";
238 case VHDERR_ANCLINEISEMPTY:
return "ANC line is empty";
239 case VHDERR_ANCLINEISFULL:
return "ANC line is full";
240 case VHDERR_BUFFERTOOSMALL:
return "Buffer too small";
241 case VHDERR_BADANC:
return "Received ANC aren't standard";
242 case VHDERR_BADCONFIG:
return "Invalid configuration";
243 case VHDERR_FIRMWAREMISMATCH:
return "The loaded firmware is not compatible with the installed driver";
244 case VHDERR_LIBRARYMISMATCH:
return "The loaded VideomasterHD library is not compatible with the installed driver";
245 case VHDERR_FAILSAFE:
return "The fail safe firmware is loaded. You need to upgrade your firmware";
246 case VHDERR_RXPROPERTY:
return "Property is of RX streams";
247 case VHDERR_ALREADYINITIALIZED:
return "Already initialized";
248 case VHDERR_NOTINITIALIZED:
return "Not initialized";
249 case VHDERR_CROSSTHREAD:
return "Cross-thread";
250 case VHDERR_INCOHERENTDATA:
return "Incoherent data";
251 case VHDERR_BADSIZE:
return "Bad size";
252 case VHDERR_WAKEUP:
return "Wake up";
253 case VHDERR_DEVICE_REMOVED:
return "Device removed";
254 case VHDERR_LTCSOURCEUNLOCKED:
return "LTC source unlocked";
255 case VHDERR_INVALIDACCESSRIGHT:
return "Invalid access right";
256 case VHDERR_INVALIDCAPABILITY:
return "Invalid capability index";
257#ifdef DELTA_DVI_DEPRECATED
258 case VHDERR_DEPRECATED:
return "Symbol is deprecated";
260 default:
return "Unknown code error";
275 ULONG Result,DllVersion,NbBoards;
276 Result = VHD_GetApiInfo(&DllVersion,&NbBoards);
277 if (Result != VHDERR_NOERROR) {
279 " information. Result = 0x%08" PRIX_ULONG "\n",
289 std::cout <<
"\n\t\tAvailable cards:\n";
291 for (ULONG i = 0; i < NbBoards; i++)
293 ULONG BoardType = 0U;
294 ULONG DriverVersion = 0U;
295 HANDLE BoardHandle = NULL;
296 ULONG Result = VHD_OpenBoardHandle(i,&BoardHandle,NULL,0);
297 if (Result != VHDERR_NOERROR) {
301 Result = VHD_GetBoardProperty(BoardHandle, VHD_CORE_BP_BOARD_TYPE, &BoardType);
302 if (Result != VHDERR_NOERROR) {
306 Result = VHD_GetBoardProperty(BoardHandle, VHD_CORE_BP_DRIVER_VERSION, &DriverVersion);
307 if (Result != VHDERR_NOERROR) {
311 std::string board{
"Unknown board type"};
317 if ((DllVersion >> 16U) != (DriverVersion >> 16U)) {
320 VHD_CloseBoardHandle(BoardHandle);
325[[gnu::unused]]
static bool delta_set_nb_channels(ULONG BrdId, HANDLE BoardHandle, ULONG RequestedRx, ULONG RequestedTx) {
327 ULONG NbRxOnBoard = 0;
328 ULONG NbTxOnBoard = 0;
330 BOOL32 IsBiDir =
FALSE;
332 Result = VHD_GetBoardProperty(BoardHandle, VHD_CORE_BP_NB_RXCHANNELS, &NbRxOnBoard);
333 if (Result != VHDERR_NOERROR) {
338 Result = VHD_GetBoardProperty(BoardHandle, VHD_CORE_BP_NB_TXCHANNELS, &NbTxOnBoard);
339 if (Result != VHDERR_NOERROR) {
344 if (NbRxOnBoard >= RequestedRx && NbTxOnBoard >= RequestedTx) {
348 Result = VHD_GetBoardProperty(BoardHandle, VHD_CORE_BP_IS_BIDIR, (ULONG*)&IsBiDir);
349 if (Result != VHDERR_NOERROR) {
354 NbChanOnBoard = NbRxOnBoard + NbTxOnBoard;
356 if (IsBiDir && NbChanOnBoard >= (RequestedRx + RequestedTx)) {
357 std::map<std::pair<ULONG, ULONG>, ULONG>
mapping = {
362 {{4, 0}, VHD_BIDIR_04},
363 {{4, 1}, VHD_BIDIR_13},
364 {{4, 2}, VHD_BIDIR_22},
365 {{4, 3}, VHD_BIDIR_31},
366 {{4, 4}, VHD_BIDIR_40},
368 {{8, 0}, VHD_BIDIR_08},
369 {{8, 1}, VHD_BIDIR_17},
370 {{8, 2}, VHD_BIDIR_26},
371 {{8, 3}, VHD_BIDIR_35},
372 {{8, 4}, VHD_BIDIR_44},
373 {{8, 5}, VHD_BIDIR_53},
374 {{8, 6}, VHD_BIDIR_62},
375 {{8, 7}, VHD_BIDIR_71},
376 {{8, 8}, VHD_BIDIR_80}
378 auto it =
mapping.find({NbChanOnBoard, RequestedRx});
380 Result = VHD_SetBiDirCfg(BrdId, it->second);
381 if (Result != VHDERR_NOERROR) {