AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
ntv2regvpid.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #include "ntv2card.h"
9 
10 using namespace std;
11 
12 
15 
18 
21 
24 
27 
30 
33 
36 
39 
42 
45 
48 
51 
54 
57 
60 
63 
66 
67 bool CNTV2Card::GetVPIDValidA (const NTV2Channel inChannel)
68 {
69  ULWord value(0);
70  if (IS_CHANNEL_INVALID(inChannel))
71  return false;
72  return ReadRegister(gChannelToSDIInput3GStatusRegNum[inChannel], value, gChannelToSDIInVPIDLinkAValidMask[inChannel])
73  && value;
74 }
75 
76 bool CNTV2Card::GetVPIDValidB (const NTV2Channel inChannel)
77 {
78  ULWord value(0);
79  if (IS_CHANNEL_INVALID(inChannel))
80  return false;
81  return ReadRegister(gChannelToSDIInput3GStatusRegNum[inChannel], value, gChannelToSDIInVPIDLinkBValidMask[inChannel])
82  && value;
83 }
84 
85 bool CNTV2Card::ReadSDIInVPID (const NTV2Channel inChannel, ULWord & outValue_A, ULWord & outValue_B)
86 {
87  ULWord status (0);
88  ULWord valA (0);
89  ULWord valB (0);
90 
91  if (IS_CHANNEL_INVALID (inChannel))
92  return false;
93  if (!ReadRegister (gChannelToSDIInput3GStatusRegNum [inChannel], status))
94  return false;
95  if (status & gChannelToSDIInVPIDLinkAValidMask [inChannel])
96  {
97  if (!ReadRegister (gChannelToSDIInVPIDARegNum [inChannel], valA))
98  return false;
99  }
100  else
101  {
102  outValue_A = 0;
103  outValue_B = 0;
104  return false;
105  }
106 
107  if (!ReadRegister (gChannelToSDIInput3GStatusRegNum [inChannel], status))
108  return false;
109  if (status & gChannelToSDIInVPIDLinkBValidMask [inChannel])
110  {
111  if (!ReadRegister (gChannelToSDIInVPIDBRegNum [inChannel], valB))
112  return false;
113  }
114 
115  // reverse byte order
116  if (GetDeviceID() == DEVICE_ID_KONALHI)
117  {
118  outValue_A = valA;
119  outValue_B = valB;
120  }
121  else
122  {
123  outValue_A = NTV2EndianSwap32(valA);
124  outValue_B = NTV2EndianSwap32(valB);
125  }
126 
127  return true;
128 
129 } // ReadSDIInVPID
130 
131 
132 bool CNTV2Card::WriteSDIInVPID (const NTV2Channel inChannel, const ULWord inValA, const ULWord inValB)
133 {
134  ULWord valA(inValA), valB(inValB);
135 
136  if (IS_CHANNEL_INVALID(inChannel))
137  return false;
138 
139  // reverse byte order
140  if (GetDeviceID() != DEVICE_ID_KONALHI)
141  {
142  valA = NTV2EndianSwap32(valA);
143  valB = NTV2EndianSwap32(valB);
144  }
145 
146  return WriteRegister (gChannelToSDIInVPIDARegNum[inChannel], valA)
147  && WriteRegister (gChannelToSDIInVPIDBRegNum[inChannel], valB);
148 
149 } // WriteSDIInVPID
150 
151 
152 bool CNTV2Card::SetSDIOutVPID (const ULWord inValueA, const ULWord inValueB, const UWord inOutputSpigot)
153 {
154  if (IS_OUTPUT_SPIGOT_INVALID (inOutputSpigot))
155  return false;
156  if (inValueA)
157  {
158  if (!WriteRegister (gChannelToSDIOutVPIDARegNum [inOutputSpigot], inValueA)) return false;
159  if (!WriteRegister (gChannelToSDIOutVPIDBRegNum [inOutputSpigot], inValueB)) return false;
161  return false;
163  return false;
164  return true;
165  }
166 
168  return false;
170  return false;
171  if (!WriteRegister (gChannelToSDIOutVPIDARegNum [inOutputSpigot], 0))
172  return false;
173  if (!WriteRegister (gChannelToSDIOutVPIDBRegNum [inOutputSpigot], 0))
174  return false;
175  return true;
176 
177 } // SetSDIOutVPID
178 
179 
180 bool CNTV2Card::GetSDIOutVPID (ULWord & outValueA, ULWord & outValueB, const UWord inOutputSpigot)
181 {
182  if (IS_OUTPUT_SPIGOT_INVALID(inOutputSpigot))
183  return false;
184 
185  return ReadRegister(gChannelToSDIOutVPIDARegNum[inOutputSpigot], outValueA)
186  && ReadRegister(gChannelToSDIOutVPIDBRegNum[inOutputSpigot], outValueB);
187 
188 } // GetSDIOutVPID
189 
190 // channel default VPID parameters
192 {
193  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToVPIDTransferCharacteristics[inChannel], inValue);
194 }
195 
197 {
198  return IS_CHANNEL_VALID(inChannel) && CNTV2DriverInterface::ReadRegister(gChannelToVPIDTransferCharacteristics[inChannel], outValue);
199 }
200 
201 bool CNTV2Card::SetVPIDColorimetry (const NTV2VPIDColorimetry inValue, const NTV2Channel inChannel)
202 {
203  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToVPIDColorimetry[inChannel], inValue);
204 }
205 
207 {
208  return IS_CHANNEL_VALID(inChannel) && CNTV2DriverInterface::ReadRegister(gChannelToVPIDColorimetry[inChannel], outValue);
209 }
210 
211 bool CNTV2Card::SetVPIDLuminance (const NTV2VPIDLuminance inValue, const NTV2Channel inChannel)
212 {
213  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToVPIDLuminance[inChannel], inValue);
214 }
215 
217 {
218  return IS_CHANNEL_VALID(inChannel) && CNTV2DriverInterface::ReadRegister(gChannelToVPIDLuminance[inChannel], outValue);
219 }
220 
221 bool CNTV2Card::SetVPIDRGBRange (const NTV2VPIDRGBRange inValue, const NTV2Channel inChannel)
222 {
223  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToVPIDRGBRange[inChannel], inValue);
224 }
225 
226 bool CNTV2Card::GetVPIDRGBRange (NTV2VPIDRGBRange & outValue, const NTV2Channel inChannel)
227 {
228  return IS_CHANNEL_VALID(inChannel) && CNTV2DriverInterface::ReadRegister(gChannelToVPIDRGBRange[inChannel], outValue);
229 }
230 
231 bool CNTV2Card::SetKeySignal (bool inValue, const NTV2Channel inChannel)
232 {
233  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToNTV2KeySignal[inChannel], (inValue? 1 : 0));
234 }
235 
236 bool CNTV2Card::GetKeySignal (bool & outValue, const NTV2Channel inChannel)
237 {
238  ULWord regValue = 0;
239  if (!IS_CHANNEL_VALID(inChannel))
240  return false;
242  return false;
243  outValue = regValue != 0;
244  return true;
245 }
246 
247 // sdi output VPID parameter overrides
249 {
250  ULWord regValue = (enable? kVRegMaskSDIOutVPIDOverride : 0) | (inValue & kVRegMaskSDIOutVPIDValue);
251  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToSDIOutVPIDTransferCharacteristics[inChannel], regValue);
252 }
253 
255 {
256  if (!IS_CHANNEL_VALID(inChannel))
257  return false;
258  ULWord regValue = 0;
260  return false;
261  enable = (regValue & kVRegMaskSDIOutVPIDOverride) != 0;
263  return true;
264 }
265 
266 bool CNTV2Card::SetSDIOutVPIDColorimetry(bool enable, NTV2VPIDColorimetry inValue, const NTV2Channel inChannel)
267 {
268  ULWord regValue = (enable? kVRegMaskSDIOutVPIDOverride : 0) | (inValue & kVRegMaskSDIOutVPIDValue);
269  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToSDIOutVPIDColorimetry[inChannel], regValue);
270 }
271 
272 bool CNTV2Card::GetSDIOutVPIDColorimetry(bool & enable, NTV2VPIDColorimetry & outValue, const NTV2Channel inChannel)
273 {
274  if (!IS_CHANNEL_VALID(inChannel))
275  return false;
276  ULWord regValue = 0;
278  return false;
279  enable = (regValue & kVRegMaskSDIOutVPIDOverride) != 0;
280  outValue = (NTV2VPIDColorimetry)(regValue & kVRegMaskSDIOutVPIDValue);
281  return true;
282 }
283 
284 bool CNTV2Card::SetSDIOutVPIDLuminance(bool enable, NTV2VPIDLuminance inValue, const NTV2Channel inChannel)
285 {
286  ULWord regValue = (enable? kVRegMaskSDIOutVPIDOverride : 0) | (inValue & kVRegMaskSDIOutVPIDValue);
287  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToSDIOutVPIDLuminance[inChannel], regValue);
288 }
289 
290 bool CNTV2Card::GetSDIOutVPIDLuminance(bool & enable, NTV2VPIDLuminance & outValue, const NTV2Channel inChannel)
291 {
292  if (!IS_CHANNEL_VALID(inChannel))
293  return false;
294  ULWord regValue = 0;
296  return false;
297  enable = (regValue & kVRegMaskSDIOutVPIDOverride) != 0;
298  outValue = (NTV2VPIDLuminance)(regValue & kVRegMaskSDIOutVPIDValue);
299  return true;
300 }
301 
302 bool CNTV2Card::SetSDIOutVPIDRGBRange(bool enable, NTV2VPIDRGBRange inValue, const NTV2Channel inChannel)
303 {
304  ULWord regValue = (enable? kVRegMaskSDIOutVPIDOverride : 0) | (inValue & kVRegMaskSDIOutVPIDValue);
305  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToSDIOutVPIDRGBRange[inChannel], regValue);
306 }
307 
308 bool CNTV2Card::GetSDIOutVPIDRGBRange(bool & enable, NTV2VPIDRGBRange & outValue, const NTV2Channel inChannel)
309 {
310  if (!IS_CHANNEL_VALID(inChannel))
311  return false;
312  ULWord regValue = 0;
314  return false;
315  enable = (regValue & kVRegMaskSDIOutVPIDOverride) != 0;
316  outValue = (NTV2VPIDRGBRange)(regValue & kVRegMaskSDIOutVPIDValue);
317  return true;
318 }
319 
320 bool CNTV2Card::SetSDIOutKeySignal(bool enable, bool inValue, const NTV2Channel inChannel)
321 {
322  ULWord regValue = (enable? kVRegMaskSDIOutVPIDOverride : 0) | ((inValue? 1 : 0) & kVRegMaskSDIOutVPIDValue);
323  return IS_CHANNEL_VALID(inChannel) && WriteRegister(gChannelToSDIOutKeySignal[inChannel], regValue);
324 }
325 
326 bool CNTV2Card::GetSDIOutKeySignal(bool & enable, bool & outValue, const NTV2Channel inChannel)
327 {
328  if (!IS_CHANNEL_VALID(inChannel))
329  return false;
330  ULWord regValue = 0;
332  return false;
333  enable = (regValue & kVRegMaskSDIOutVPIDOverride) != 0;
334  outValue = (regValue & kVRegMaskSDIOutVPIDValue) != 0;
335  return true;
336 }
337 
338 
virtual bool SetSDIOutVPIDTransferCharacteristics(bool enable, NTV2VPIDTransferCharacteristics inValue, const NTV2Channel inChannel)
virtual bool SetSDIOutKeySignal(bool enable, bool inValue, const NTV2Channel inChannel)
virtual bool GetVPIDLuminance(NTV2VPIDLuminance &outValue, const NTV2Channel inChannel)
virtual bool SetVPIDLuminance(const NTV2VPIDLuminance inValue, const NTV2Channel inChannel)
virtual bool GetSDIOutKeySignal(bool &enable, bool &outValue, const NTV2Channel inChannel)
static const ULWord gChannelToSDIInVPIDARegNum[]
Definition: ntv2regvpid.cpp:19
virtual bool GetVPIDColorimetry(NTV2VPIDColorimetry &outValue, const NTV2Channel inChannel)
static const ULWord gChannelToSDIOutVPIDARegNum[]
Definition: ntv2regvpid.cpp:13
virtual bool SetSDIOutVPIDRGBRange(bool enable, NTV2VPIDRGBRange inValue, const NTV2Channel inChannel)
NTV2VPIDLuminance
Definition: ntv2enums.h:4262
static const ULWord gChannelToVPIDTransferCharacteristics[]
Definition: ntv2regvpid.cpp:37
virtual bool ReadSDIInVPID(const NTV2Channel inSDIInput, ULWord &outValueA, ULWord &outValueB)
Definition: ntv2regvpid.cpp:85
virtual bool SetSDIOutVPID(const ULWord inValueA, const ULWord inValueB, const UWord inOutputSpigot=NTV2_CHANNEL1)
virtual bool GetVPIDValidA(const NTV2Channel inChannel)
Definition: ntv2regvpid.cpp:67
virtual bool SetKeySignal(bool inValue, const NTV2Channel inChannel)
static const ULWord gChannelToSDIOutControlRegNum[]
Definition: ntv2regvpid.cpp:34
Definition: json.hpp:5362
virtual bool GetVPIDValidB(const NTV2Channel inChannel)
Definition: ntv2regvpid.cpp:76
uint32_t ULWord
Definition: ajatypes.h:223
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
Definition: ntv2enums.h:1357
virtual bool GetVPIDRGBRange(NTV2VPIDRGBRange &outValue, const NTV2Channel inChannel)
static const ULWord gChannelToSDIInput3GStatusRegNum[]
Definition: ntv2regvpid.cpp:31
static const ULWord gChannelToNTV2KeySignal[]
Definition: ntv2regvpid.cpp:49
static const ULWord gChannelToVPIDColorimetry[]
Definition: ntv2regvpid.cpp:40
static const ULWord gChannelToSDIInVPIDLinkBValidMask[]
Definition: ntv2regvpid.cpp:28
virtual bool SetSDIOutVPIDColorimetry(bool enable, NTV2VPIDColorimetry inValue, const NTV2Channel inChannel)
See KONA LHi.
Definition: ntv2enums.h:78
static const ULWord gChannelToSDIInVPIDBRegNum[]
Definition: ntv2regvpid.cpp:22
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...
static const ULWord gChannelToSDIOutKeySignal[]
Definition: ntv2regvpid.cpp:64
virtual bool SetVPIDTransferCharacteristics(const NTV2VPIDTransferCharacteristics inValue, const NTV2Channel inChannel)
virtual bool WriteSDIInVPID(const NTV2Channel inChannel, const ULWord inValA, const ULWord inValB)
NTV2VPIDColorimetry
Definition: ntv2enums.h:4254
static const ULWord gChannelToSDIOutVPIDRGBRange[]
Definition: ntv2regvpid.cpp:61
virtual bool GetSDIOutVPIDRGBRange(bool &enable, NTV2VPIDRGBRange &outValue, const NTV2Channel inChannel)
static const ULWord gChannelToSDIOutVPIDLuminance[]
Definition: ntv2regvpid.cpp:58
virtual bool GetSDIOutVPIDLuminance(bool &enable, NTV2VPIDLuminance &outValue, const NTV2Channel inChannel)
static const ULWord gChannelToVPIDRGBRange[]
Definition: ntv2regvpid.cpp:46
virtual bool GetSDIOutVPID(ULWord &outValueA, ULWord &outValueB, const UWord inOutputSpigot=NTV2_CHANNEL1)
virtual bool SetVPIDRGBRange(const NTV2VPIDRGBRange inValue, const NTV2Channel inChannel)
virtual bool GetSDIOutVPIDTransferCharacteristics(bool &enable, NTV2VPIDTransferCharacteristics &outValue, const NTV2Channel inChannel)
NTV2VPIDTransferCharacteristics
Definition: ntv2enums.h:4246
static const ULWord gChannelToSDIOutVPIDTransferCharacteristics[]
Definition: ntv2regvpid.cpp:52
static const ULWord gChannelToSDIInVPIDLinkAValidMask[]
Definition: ntv2regvpid.cpp:25
uint16_t UWord
Definition: ajatypes.h:221
Declares the CNTV2Card class.
virtual bool SetSDIOutVPIDLuminance(bool enable, NTV2VPIDLuminance inValue, const NTV2Channel inChannel)
virtual bool GetSDIOutVPIDColorimetry(bool &enable, NTV2VPIDColorimetry &outValue, const NTV2Channel inChannel)
virtual bool GetKeySignal(bool &outValue, const NTV2Channel inChannel)
virtual bool SetVPIDColorimetry(const NTV2VPIDColorimetry inValue, const NTV2Channel inChannel)
NTV2VPIDRGBRange
Definition: ntv2enums.h:4268
static const ULWord gChannelToVPIDLuminance[]
Definition: ntv2regvpid.cpp:43
#define NTV2EndianSwap32(__val__)
Definition: ntv2endian.h:19
virtual bool GetVPIDTransferCharacteristics(NTV2VPIDTransferCharacteristics &outValue, const NTV2Channel inChannel)
static const ULWord gChannelToSDIOutVPIDColorimetry[]
Definition: ntv2regvpid.cpp:55
static const ULWord gChannelToSDIOutVPIDBRegNum[]
Definition: ntv2regvpid.cpp:16