AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
ntv2anc.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #include "ntv2card.h"
9 #include "ntv2devicefeatures.h"
10 #include "ntv2formatdescriptor.h"
11 #include "ntv2utils.h"
12 
13 
14 
18 
19 // SDI Spigot: 1 2 3 4 5 6 7 8
20 static const ULWord sAncInsBaseRegNum[] = { 4608, 4672, 4736, 4800, 4864, 4928, 4992, 5056 };
21 static const ULWord sAncExtBaseRegNum[] = { 4096, 4160, 4224, 4288, 4352, 4416, 4480, 4544 };
23 
24 
25 static inline ULWord AncInsRegNum(const UWord inSDIOutput, const ANCInsRegisters inReg)
26 {
27  return sAncInsBaseRegNum[inSDIOutput] + inReg;
28 }
29 
30 
31 static inline ULWord AncExtRegNum(const UWord inSDIInput, const ANCExtRegisters inReg)
32 {
33  return sAncExtBaseRegNum[inSDIInput] + inReg;
34 }
35 
36 
37 
41 
42 typedef struct ANCInserterInitParams
43 {
44  uint32_t field1ActiveLine;
45  uint32_t field2ActiveLine;
46  uint32_t hActivePixels;
47  uint32_t hTotalPixels;
48  uint32_t totalLines;
49  uint32_t fidLow;
50  uint32_t fidHigh;
51  uint32_t field1SwitchLine;
52  uint32_t field2SwitchLine;
53  uint32_t pixelDelay;
55 
57 // F1 F2 Horz F1 F2
58 // Active Active Active Total Total FID FID Switch Switch Pixel
59 // Standard Line Line Pixels Pixels Lines Lo Hi Line Line Delay
60 /* 1080 */ { 21, 564, 1920, 2200, 1125, 1125, 563, 7, 569, 8, },
61 /* 720 */ { 26, 0, 1280, 1280, 750, 0, 0, 7, 0, 8, },
62 /* 525 */ { 21, 283, 720, 720, 525, 3, 265, 10, 273, 8, },
63 /* 625 */ { 23, 336, 720, 864, 625, 625, 312, 6, 319, 8, },
64 /* 1080p */ { 42, 0, 1920, 2640, 1125, 0, 0, 7, 0, 8, },
65 /* 2K */ { 42, 0, 2048, 2640, 1125, 0, 0, 7, 0, 8, },
66 /* 2Kx1080p */ { 42, 0, 2048, 2640, 1125, 0, 0, 7, 0, 8, },
67 /* 2Kx1080i */ { 21, 564, 2048, 2200, 1125, 1125, 563, 7, 569, 8, },
68 /* 3840x2160p */ { 42, 0, 1920, 2640, 1125, 0, 0, 7, 0, 8, },
69 /* 4096x2160p */ { 42, 0, 2048, 2640, 1125, 0, 0, 7, 0, 8, },
70 /* 3840HFR */ { 42, 0, 1920, 2640, 1125, 0, 0, 7, 0, 8, },
71 /* 4096HFR */ { 42, 0, 2048, 2640, 1125, 0, 0, 7, 0, 8, }
72 };
73 
74 
75 
79 
80 typedef struct ANCExtractorInitParams
81 {
82  uint32_t field1StartLine;
83  uint32_t field1CutoffLine;
84  uint32_t field2StartLine;
85  uint32_t field2CutoffLine;
86  uint32_t totalLines;
87  uint32_t fidLow;
88  uint32_t fidHigh;
89  uint32_t field1SwitchLine;
90  uint32_t field2SwitchLine;
99 
101 // F1 F1 F2 F2 F1 F2 F1Anlg F2Anlg F1 F2 F1 F2 Analog
102 // Start Cutoff Start Cutoff Total FID FID Switch Switch Start Start Anlg Anlg Anlg Anlg Active
103 // Standard Line Line Line Line Lines Low High Line Line Line Line Y Filt Y Filt C Filt C Filt LineLength
104 /* 1080 */{ 561, 26, 1124, 588, 1125, 1125, 563, 7, 569, 0, 0, 0, 0, 0, 0, 0x07800000 },
105 /* 720 */{ 746, 745, 0, 0, 750, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x05000000 },
106 /* 525 */{ 264, 30, 1, 293, 525, 3, 265, 10, 273, 4, 266, 0x20000, 0x40000, 0, 0, 0x02D00000 },
107 /* 625 */{ 311, 33, 1, 346, 625, 625, 312, 6, 319, 5, 318, 0x10000, 0x10000, 0, 0, 0x02D00000 },
108 /* 1080p */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
109 /* 2K */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
110 /* 2Kx1080p */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
111 /* 2Kx1080i */{ 561, 26, 1124, 588, 1125, 1125, 563, 7, 569, 0, 0, 0, 0, 0, 0, 0x07800000 },
112 /* 3840x2160p */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
113 /* 4096x2160p */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
114 /* 3840HFR */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
115 /* 4096HFR */{ 1122, 1125, 0, 0, 1125, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0x07800000 },
116 };
117 
118 
122 
123 bool CNTV2Card::AncSetFrameBufferSize (const ULWord inF1Size, const ULWord inF2Size)
124 {
126  return false;
127 
128  bool ok(true);
129  if (ok) ok = WriteRegister(kVRegAncField1Offset, inF1Size + inF2Size);
130  if (ok) ok = WriteRegister(kVRegAncField2Offset, inF2Size);
131  return ok;
132 }
133 
134 static bool GetAncOffsets (CNTV2Card & inDevice, ULWord & outF1Offset, ULWord & outF2Offset)
135 {
136  outF1Offset = outF2Offset = 0;
137  return inDevice.ReadRegister(kVRegAncField1Offset, outF1Offset)
138  && inDevice.ReadRegister(kVRegAncField2Offset, outF2Offset);
139 }
140 
141 static bool GetAncField1Size (CNTV2Card & inDevice, ULWord & outFieldBytes)
142 {
143  outFieldBytes = 0;
144  ULWord ancF1Offset(0), ancF2Offset(0);
145  if (!GetAncOffsets(inDevice, ancF1Offset, ancF2Offset))
146  return false;
147  outFieldBytes = ancF1Offset - ancF2Offset;
148  return true;
149 }
150 
151 static bool GetAncField2Size (CNTV2Card & inDevice, ULWord & outFieldBytes)
152 {
153  outFieldBytes = 0;
154  ULWord ancF1Offset(0), ancF2Offset(0);
155  if (!GetAncOffsets(inDevice, ancF1Offset, ancF2Offset))
156  return false;
157  outFieldBytes = ancF2Offset;
158  return true;
159 }
160 
161 
165 
166 static bool SetAncInsField1Bytes (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfBytes)
167 {
168  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsFieldBytes), numberOfBytes & 0xffff,
170  inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsFieldBytesHigh), numberOfBytes >> 16,
172 }
173 
174 static bool SetAncInsField2Bytes (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfBytes)
175 {
176  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsFieldBytes), numberOfBytes & 0xffff,
178  inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsFieldBytesHigh), numberOfBytes >> 16,
180 }
181 
182 static bool EnableAncInsHancY (CNTV2Card & inDevice, const UWord inSDIOutput, bool bEnable)
183 {
184  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), bEnable ? 1 : 0, maskInsEnableHancY, shiftInsEnableHancY);
185 }
186 
187 static bool EnableAncInsHancC (CNTV2Card & inDevice, const UWord inSDIOutput, bool bEnable)
188 {
189  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), bEnable ? 1 : 0, maskInsEnableHancC, shiftInsEnableHancC);
190 }
191 
192 static bool EnableAncInsVancY (CNTV2Card & inDevice, const UWord inSDIOutput, bool bEnable)
193 {
194  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), bEnable ? 1 : 0, maskInsEnableVancY, shiftInsEnableVancY);
195 }
196 
197 static bool EnableAncInsVancC (CNTV2Card & inDevice, const UWord inSDIOutput, bool bEnable)
198 {
199  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), bEnable ? 1 : 0, maskInsEnableVancC, shiftInsEnableVancC);
200 }
201 
202 static bool SetAncInsProgressive (CNTV2Card & inDevice, const UWord inSDIOutput, bool isProgressive)
203 {
204  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), isProgressive ? 1 : 0, maskInsSetProgressive, shiftInsSetProgressive);
205 }
206 
207 static bool SetAncInsSDPacketSplit (CNTV2Card & inDevice, const UWord inSDIOutput, bool inEnable)
208 {
209  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), inEnable ? 1 : 0, ULWord(maskInsEnablePktSplitSD), shiftInsEnablePktSplitSD);
210 }
211 
212 static bool GetAncInsStartAddrs (CNTV2Card & inDevice, const UWord inSDIOutput, uint64_t & outStartAddrF1, uint64_t & outStartAddrF2)
213 {
214  uint32_t startAddrF1(0), startAddrF2(0);
215  bool ok = inDevice.ReadRegister(AncInsRegNum(inSDIOutput, regAncInsField1StartAddr), startAddrF1)
216  && inDevice.ReadRegister(AncInsRegNum(inSDIOutput, regAncInsField2StartAddr), startAddrF2);
217  outStartAddrF1 = ok ? uint64_t(startAddrF1) : 0;
218  outStartAddrF2 = ok ? uint64_t(startAddrF2) : 0;
219  return ok;
220 }
221 
222 static bool SetAncInsField1StartAddr (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t startAddr)
223 {
224  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsField1StartAddr), startAddr);
225 }
226 
227 static bool SetAncInsField2StartAddr (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t startAddr)
228 {
229  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsField2StartAddr), startAddr);
230 }
231 
232 static bool SetAncInsHancPixelDelay (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfPixels)
233 {
234  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsPixelDelay), numberOfPixels, maskInsHancDelay, shiftINsHancDelay);
235 }
236 
237 static bool SetAncInsVancPixelDelay (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfPixels)
238 {
239  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsPixelDelay), numberOfPixels, maskInsVancDelay, shiftInsVancDelay);
240 }
241 
242 static bool SetAncInsField1ActiveLine (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t activeLineNumber)
243 {
244  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsActiveStart), activeLineNumber, maskInsField1FirstActive, shiftInsField1FirstActive);
245 }
246 
247 static bool SetAncInsField2ActiveLine (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t activeLineNumber)
248 {
249  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsActiveStart), activeLineNumber, maskInsField2FirstActive, shiftInsField2FirstActive);
250 }
251 
252 static bool SetAncInsHActivePixels (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfActiveLinePixels)
253 {
254  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsLinePixels), numberOfActiveLinePixels, maskInsActivePixelsInLine, shiftInsActivePixelsInLine);
255 }
256 
257 static bool SetAncInsHTotalPixels (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfLinePixels)
258 {
259  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsLinePixels), numberOfLinePixels, maskInsTotalPixelsInLine, shiftInsTotalPixelsInLine);
260 }
261 
262 static bool SetAncInsTotalLines (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t numberOfLines)
263 {
265 }
266 
267 static bool SetAncInsFidHi (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t lineNumber)
268 {
269  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsFieldIDLines), lineNumber, maskInsFieldIDHigh, shiftInsFieldIDHigh);
270 }
271 
272 static bool SetAncInsFidLow (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t lineNumber)
273 {
274  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsFieldIDLines), lineNumber, maskInsFieldIDLow, shiftInsFieldIDLow);
275 }
276 
277 static bool SetAncInsRtpPayloadID (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t payloadID)
278 {
279  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsRtpPayloadID), payloadID);
280 }
281 
282 static bool SetAncInsRtpSSRC (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t ssrc)
283 {
284  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsRtpSSRC), ssrc);
285 }
286 
287 static bool SetAncInsIPChannel (CNTV2Card & inDevice, const UWord inSDIOutput, uint32_t channel)
288 {
289  return inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsIpChannel), channel);
290 }
291 
292 static bool GetAncInsExtendedMode (CNTV2Card & inDevice, const UWord inSDIOutput, bool& extendedMode)
293 {
294  bool ok(true);
295  uint32_t regValue(0);
296  extendedMode = false;
297  if (ok) ok = inDevice.WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), 1, maskInsExtendedMode, shiftInsExtendedMode);
298  if (ok) ok = inDevice.ReadRegister(AncInsRegNum(inSDIOutput, regAncInsControl), regValue, maskInsExtendedMode, shiftInsExtendedMode);
299  if (ok) extendedMode = (regValue == 1);
300  return ok;
301 }
302 
303 bool CNTV2Card::AncInsertInit (const UWord inSDIOutput, const NTV2Channel inChannel, const NTV2Standard inStandard)
304 {
306  return false;
308  return false;
309  if (IS_OUTPUT_SPIGOT_INVALID(inSDIOutput))
310  return false;
311 
312  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIOutput));
313  NTV2Standard theStandard (inStandard);
314  if (!NTV2_IS_VALID_STANDARD(theStandard))
315  {
316  if (IS_CHANNEL_INVALID(theChannel))
317  return false;
318  if (!GetStandard(theStandard, theChannel))
319  return false;
320  if (!NTV2_IS_VALID_STANDARD(theStandard))
321  return false;
322  }
323 
324  const ANCInserterInitParams & initParams(inserterInitParamsTable[theStandard]);
325  bool ok(true);
326  bool extendedMode(false);
327  if (ok) ok = GetAncInsExtendedMode (*this, inSDIOutput, extendedMode);
328  if (ok) ok = SetAncInsField1ActiveLine (*this, inSDIOutput, initParams.field1ActiveLine);
329  if (ok) ok = SetAncInsField2ActiveLine (*this, inSDIOutput, initParams.field2ActiveLine);
330  if (ok) ok = SetAncInsHActivePixels (*this, inSDIOutput, initParams.hActivePixels);
331  if (ok) ok = SetAncInsHTotalPixels (*this, inSDIOutput, initParams.hTotalPixels);
332  if (ok) ok = SetAncInsTotalLines (*this, inSDIOutput, initParams.totalLines);
333  if (ok) ok = SetAncInsFidLow (*this, inSDIOutput, extendedMode? initParams.field1SwitchLine : initParams.fidLow);
334  if (ok) ok = SetAncInsFidHi (*this, inSDIOutput, extendedMode? initParams.field2SwitchLine : initParams.fidHigh);
335  if (ok) ok = SetAncInsProgressive (*this, inSDIOutput, NTV2_IS_PROGRESSIVE_STANDARD(theStandard));
336  if (ok) ok = SetAncInsSDPacketSplit (*this, inSDIOutput, NTV2_IS_SD_STANDARD(theStandard));
337  if (ok) ok = EnableAncInsHancC (*this, inSDIOutput, false);
338  if (ok) ok = EnableAncInsHancY (*this, inSDIOutput, false);
339  if (ok) ok = EnableAncInsVancC (*this, inSDIOutput, true);
340  if (ok) ok = EnableAncInsVancY (*this, inSDIOutput, true);
341  if (ok) ok = SetAncInsHancPixelDelay (*this, inSDIOutput, 0);
342  if (ok) ok = SetAncInsVancPixelDelay (*this, inSDIOutput, 0);
343  if (ok) ok = WriteRegister (AncInsRegNum(inSDIOutput, regAncInsBlankCStartLine), 0);
344  if (ok) ok = WriteRegister (AncInsRegNum(inSDIOutput, regAncInsBlankField1CLines), 0);
345  if (ok) ok = WriteRegister (AncInsRegNum(inSDIOutput, regAncInsBlankField2CLines), 0);
346  if (ok) ok = WriteRegister (AncInsRegNum(inSDIOutput, regAncInsPixelDelay), extendedMode? initParams.pixelDelay : 0);
347 
348  ULWord field1Bytes(0);
349  ULWord field2Bytes(0);
350  if (ok) ok = GetAncField1Size(*this, field1Bytes);
351  if (ok) ok = GetAncField2Size(*this, field2Bytes);
352  if (ok) ok = SetAncInsField1Bytes (*this, inSDIOutput, field1Bytes);
353  if (ok) ok = SetAncInsField2Bytes (*this, inSDIOutput, field2Bytes);
354  return ok;
355 }
356 
357 bool CNTV2Card::AncInsertSetComponents (const UWord inSDIOutput,
358  const bool inVancY, const bool inVancC,
359  const bool inHancY, const bool inHancC)
360 {
361  bool ok(true);
362  bool extendedMode(false);
363  if (ok) ok = EnableAncInsVancY(*this, inSDIOutput, inVancY);
364  if (ok) ok = EnableAncInsVancC(*this, inSDIOutput, inVancC);
365  if (ok) ok = GetAncInsExtendedMode (*this, inSDIOutput, extendedMode);
366  if (extendedMode)
367  {
368  if (ok) ok = EnableAncInsHancY(*this, inSDIOutput, inHancY);
369  if (ok) ok = EnableAncInsHancC(*this, inSDIOutput, inHancC);
370  }
371  return ok;
372 }
373 
374 bool CNTV2Card::AncInsertSetEnable (const UWord inSDIOutput, const bool inIsEnabled)
375 {
377  return false;
379  return false;
380  if (IS_OUTPUT_SPIGOT_INVALID(inSDIOutput))
381  return false;
382  bool ok(true);
383  if (!inIsEnabled)
384  {
385  if (ok) ok = EnableAncInsHancC(*this, inSDIOutput, false);
386  if (ok) ok = EnableAncInsHancY(*this, inSDIOutput, false);
387  if (ok) ok = EnableAncInsVancC(*this, inSDIOutput, false);
388  if (ok) ok = EnableAncInsVancY(*this, inSDIOutput, false);
389  }
390  if (ok) ok = WriteRegister(AncInsRegNum(inSDIOutput, regAncInsBlankCStartLine), 0);
391  if (ok) ok = WriteRegister(AncInsRegNum(inSDIOutput, regAncInsBlankField1CLines), 0);
392  if (ok) ok = WriteRegister(AncInsRegNum(inSDIOutput, regAncInsBlankField2CLines), 0);
393  if (ok) ok = WriteRegister(AncInsRegNum(inSDIOutput, regAncInsControl), inIsEnabled ? 0 : 1, maskInsDisableInserter, shiftInsDisableInserter);
394  return ok;
395 }
396 
397 bool CNTV2Card::AncInsertIsEnabled (const UWord inSDIOutput, bool & outIsRunning)
398 {
399  outIsRunning = false;
401  return false;
403  return false;
404  if (inSDIOutput >= ::NTV2DeviceGetNumVideoOutputs(_boardID))
405  return false;
406 
407  ULWord value(0);
408  if (!ReadRegister(AncInsRegNum(inSDIOutput, regAncInsControl), value))
409  return false;
410  outIsRunning = (value & BIT(28)) ? false : true;
411  return true;
412 }
413 
414 bool CNTV2Card::AncInsertSetReadParams (const UWord inSDIOutput, const ULWord inFrameNumber, const ULWord inF1Size,
415  const NTV2Channel inChannel, const NTV2Framesize inFrameSize)
416 {
418  return false;
420  return false;
421  if (IS_OUTPUT_SPIGOT_INVALID(inSDIOutput))
422  return false;
423 
424  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIOutput));
425  NTV2Framesize theFrameSize(inFrameSize);
426  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
427  {
428  if (IS_CHANNEL_INVALID(theChannel))
429  return false;
430  if (!GetFrameBufferSize(theChannel, theFrameSize))
431  return false;
432  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
433  return false;
434  }
435 
436  bool ok(true);
437  // Calculate where ANC Inserter will read the data
438  const ULWord frameNumber (inFrameNumber + 1); // Start at beginning of next frame (then subtract offset later)
439  ULWord frameLocation (::NTV2FramesizeToByteCount(theFrameSize) * frameNumber);
440  bool quadEnabled(false), quadQuadEnabled(false);
441  GetQuadFrameEnable(quadEnabled, inChannel);
442  GetQuadQuadFrameEnable(quadQuadEnabled, inChannel);
443  if (quadEnabled)
444  frameLocation *= 4;
445  if (quadQuadEnabled)
446  frameLocation *= 4;
447 
448  ULWord F1Offset(0);
449  if (ok) ok = ReadRegister (kVRegAncField1Offset, F1Offset);
450  const ULWord ANCStartMemory (frameLocation - F1Offset);
451  if (ok) ok = SetAncInsField1StartAddr (*this, inSDIOutput, ANCStartMemory);
452  if (ok) ok = SetAncInsField1Bytes (*this, inSDIOutput, inF1Size);
453  return ok;
454 }
455 
456 bool CNTV2Card::AncInsertSetField2ReadParams (const UWord inSDIOutput, const ULWord inFrameNumber, const ULWord inF2Size,
457  const NTV2Channel inChannel, const NTV2Framesize inFrameSize)
458 {
460  return false;
462  return false;
463  if (IS_OUTPUT_SPIGOT_INVALID(inSDIOutput))
464  return false;
465 
466  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIOutput));
467  NTV2Framesize theFrameSize(inFrameSize);
468  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
469  {
470  if (IS_CHANNEL_INVALID(theChannel))
471  return false;
472  if (!GetFrameBufferSize(theChannel, theFrameSize))
473  return false;
474  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
475  return false;
476  }
477 
478  bool ok(true);
479  // Calculate where ANC Inserter will read the data
480  const ULWord frameNumber (inFrameNumber + 1); // Start at beginning of next frame (then subtract offset later)
481  ULWord frameLocation (::NTV2FramesizeToByteCount(theFrameSize) * frameNumber);
482  bool quadEnabled(false), quadQuadEnabled(false);
483  GetQuadFrameEnable(quadEnabled, inChannel);
484  GetQuadQuadFrameEnable(quadQuadEnabled, inChannel);
485  if (quadEnabled)
486  frameLocation *= 4;
487  if (quadQuadEnabled)
488  frameLocation *= 4;
489 
490  ULWord F2Offset(0);
491  if (ok) ok = ReadRegister (kVRegAncField2Offset, F2Offset);
492  const ULWord ANCStartMemory (frameLocation - F2Offset);
493  if (ok) ok = SetAncInsField2StartAddr (*this, inSDIOutput, ANCStartMemory);
494  if (ok) ok = SetAncInsField2Bytes (*this, inSDIOutput, inF2Size);
495  return ok;
496 }
497 
498 bool CNTV2Card::AncInsertSetIPParams (const UWord inSDIOutput, const UWord ancChannel, const ULWord payloadID, const ULWord ssrc)
499 {
500  bool ok(false);
501 
503  {
504  ok = SetAncInsIPChannel (*this, inSDIOutput, ancChannel);
505  if (ok) ok = SetAncInsRtpPayloadID (*this, inSDIOutput, payloadID);
506  if (ok) ok = SetAncInsRtpSSRC (*this, inSDIOutput, ssrc);
507  }
508  return ok;
509 }
510 
511 bool CNTV2Card::AncInsertGetReadInfo (const UWord inSDIOutput, uint64_t & outF1StartAddr, uint64_t & outF2StartAddr)
512 {
513  outF1StartAddr = outF2StartAddr = 0;
515  return false;
517  return false;
518  if (IS_OUTPUT_SPIGOT_INVALID(inSDIOutput))
519  return false;
520  return GetAncInsStartAddrs (*this, inSDIOutput, outF1StartAddr, outF2StartAddr);
521 }
522 
523 
527 
528 static bool EnableAncExtHancY (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
529 {
530  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, maskEnableHancY, shiftEnableHancY);
531 }
532 
533 static bool EnableAncExtHancC (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
534 {
535  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, maskEnableHancC, shiftEnableHancC);
536 }
537 
538 static bool EnableAncExtVancY (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
539 {
540  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, maskEnableVancY, shiftEnableVancY);
541 }
542 
543 static bool EnableAncExtVancC (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
544 {
545  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, maskEnableVancC, shiftEnableVancC);
546 }
547 
548 static bool SetAncExtSDDemux (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
549 {
550  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, maskEnableSDMux, shiftEnableSDMux);
551 }
552 
553 static bool SetAncExtProgressive (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
554 {
555  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, maskSetProgressive, shiftSetProgressive);
556 }
557 
558 static bool SetAncExtSynchro (CNTV2Card & inDevice, const UWord inSDIInput)
559 {
560  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), 0x1, maskSyncro, shiftSyncro);
561 }
562 
563 /* currently unused
564 static bool SetAncExtLSBEnable (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
565 {
566  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, (ULWord)maskGrabLSBs, shiftGrabLSBs);
567 }
568 */
569 
570 static bool GetAncExtField1StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
571 {
572  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField1StartAddress), outAddr);
573 }
574 
575 static bool SetAncExtField1StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
576 {
577  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1StartAddress), addr);
578 }
579 
580 static bool GetAncExtField1EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
581 {
582  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField1EndAddress), outAddr);
583 }
584 
585 static bool SetAncExtField1EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
586 {
587  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1EndAddress), addr);
588 }
589 
590 static bool GetAncExtField2StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
591 {
592  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField2StartAddress), outAddr);
593 }
594 
595 static bool SetAncExtField2StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
596 {
597  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2StartAddress), addr);
598 }
599 
600 static bool GetAncExtField2EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
601 {
602  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField2EndAddress), outAddr);
603 }
604 
605 static bool SetAncExtField2EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
606 {
607  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2EndAddress), addr);
608 }
609 
610 static bool SetAncExtField1CutoffLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
611 {
613 }
614 
615 static bool SetAncExtField2CutoffLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
616 {
618 }
619 
620 static bool GetAncExtField1Status (CNTV2DriverInterface & inDevice, const UWord inSDIInput, ULWord & outF1Status)
621 {
622  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField1Status), outF1Status);
623 }
624 
625 static bool GetAncExtField2Status (CNTV2DriverInterface & inDevice, const UWord inSDIInput, ULWord & outF2Status)
626 {
627  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField2Status), outF2Status);
628 }
629 
630 static bool IsAncExtOverrun (CNTV2DriverInterface & inDevice, const UWord inSDIInput, bool & outIsOverrun)
631 {
632  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtTotalStatus), outIsOverrun, maskTotalOverrun, shiftTotalOverrun);
633 }
634 
635 static bool SetAncExtField1StartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
636 {
638 }
639 
640 static bool SetAncExtField2StartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
641 {
643 }
644 
645 static bool SetAncExtTotalFrameLines (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t totalFrameLines)
646 {
647  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtTotalFrameLines), totalFrameLines, maskTotalFrameLines, shiftTotalFrameLines);
648 }
649 
650 static bool SetAncExtFidLow (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
651 {
652  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtFID), lineNumber, maskFIDLow, shiftFIDLow);
653 }
654 
655 static bool SetAncExtFidHi (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
656 {
657  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtFID), lineNumber, maskFIDHi, shiftFIDHi);
658 }
659 
660 static bool SetAncExtField1AnalogStartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
661 {
663 }
664 
665 static bool SetAncExtField2AnalogStartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
666 {
668 }
669 
670 static bool SetAncExtField1AnalogYFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
671 {
672  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1AnalogYFilter), lineFilter);
673 }
674 
675 static bool SetAncExtField2AnalogYFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
676 {
677  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2AnalogYFilter), lineFilter);
678 }
679 
680 static bool SetAncExtField1AnalogCFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
681 {
682  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1AnalogCFilter), lineFilter);
683 }
684 
685 static bool SetAncExtField2AnalogCFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
686 {
687  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2AnalogCFilter), lineFilter);
688 }
689 
690 static bool GetAncExtExtendedMode (CNTV2Card & inDevice, const UWord inSDIInput, bool& extendedMode)
691 {
692  bool ok(true);
693  uint32_t regValue(0);
694  extendedMode = false;
696  if (ok) ok = inDevice.ReadRegister(AncInsRegNum(inSDIInput, regAncInsControl), regValue, maskInsExtendedMode, shiftInsExtendedMode);
697  if (ok) extendedMode = (regValue == 1);
698  return ok;
699 }
700 
701 bool CNTV2Card::AncExtractInit (const UWord inSDIInput, const NTV2Channel inChannel, const NTV2Standard inStandard)
702 {
704  return false;
706  return false;
707  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
708  return false;
709 
710  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIInput));
711  NTV2Standard theStandard (inStandard);
712  if (!NTV2_IS_VALID_STANDARD(theStandard))
713  {
714  if (IS_CHANNEL_INVALID(theChannel))
715  return false;
716  if (!GetStandard(theStandard, theChannel))
717  return false;
718  if (!NTV2_IS_VALID_STANDARD(theStandard))
719  return false;
720  }
721 
722  const ANCExtractorInitParams & extractorParams (extractorInitParamsTable[theStandard]);
723  bool ok(true);
724  bool extendedMode(false);
725  if (ok) ok = GetAncExtExtendedMode (*this, inSDIInput, extendedMode);
726  if (ok) ok = SetAncExtProgressive (*this, inSDIInput, NTV2_IS_PROGRESSIVE_STANDARD(theStandard));
727  if (ok) ok = SetAncExtField1StartLine (*this, inSDIInput, extractorParams.field1StartLine);
728  if (ok) ok = SetAncExtField1CutoffLine (*this, inSDIInput, extendedMode? extractorParams.field1SwitchLine : extractorParams.field1CutoffLine);
729  if (ok) ok = SetAncExtField2StartLine (*this, inSDIInput, extractorParams.field2StartLine);
730  if (ok) ok = SetAncExtField2CutoffLine (*this, inSDIInput, extendedMode? extractorParams.field2SwitchLine : extractorParams.field2CutoffLine);
731  if (ok) ok = SetAncExtTotalFrameLines (*this, inSDIInput, extractorParams.totalLines);
732  if (ok) ok = SetAncExtFidLow (*this, inSDIInput, extractorParams.fidLow);
733  if (ok) ok = SetAncExtFidHi (*this, inSDIInput, extractorParams.fidHigh);
734  if (ok) ok = SetAncExtField1AnalogStartLine (*this, inSDIInput, extractorParams.field1AnalogStartLine);
735  if (ok) ok = SetAncExtField2AnalogStartLine (*this, inSDIInput, extractorParams.field2AnalogStartLine);
736  if (ok) ok = SetAncExtField1AnalogYFilter (*this, inSDIInput, extractorParams.field1AnalogYFilter);
737  if (ok) ok = SetAncExtField2AnalogYFilter (*this, inSDIInput, extractorParams.field2AnalogYFilter);
738  if (ok) ok = SetAncExtField1AnalogCFilter (*this, inSDIInput, extractorParams.field1AnalogCFilter);
739  if (ok) ok = SetAncExtField2AnalogCFilter (*this, inSDIInput, extractorParams.field2AnalogCFilter);
740  if (ok) ok = AncExtractSetFilterDIDs (inSDIInput, AncExtractGetDefaultDIDs());
741  if (ok) ok = WriteRegister (AncExtRegNum(inSDIInput, regAncExtAnalogActiveLineLength), extractorParams.analogActiveLineLength);
742  if (ok) ok = SetAncExtSDDemux (*this, inSDIInput, NTV2_IS_SD_STANDARD(theStandard));
743  if (ok) ok = EnableAncExtHancC (*this, inSDIInput, true);
744  if (ok) ok = EnableAncExtHancY (*this, inSDIInput, true);
745  if (ok) ok = EnableAncExtVancC (*this, inSDIInput, true);
746  if (ok) ok = EnableAncExtVancY (*this, inSDIInput, true);
747  if (ok) ok = SetAncExtSynchro (*this, inSDIInput);
748  if (ok) ok = SetAncExtField1StartAddr (*this, inSDIInput, 0);
749  if (ok) ok = SetAncExtField1EndAddr (*this, inSDIInput, 0);
750  if (ok) ok = SetAncExtField2StartAddr (*this, inSDIInput, 0);
751  if (ok) ok = SetAncExtField2EndAddr (*this, inSDIInput, 0);
752  return ok;
753 }
754 
756  const bool inVancY, const bool inVancC,
757  const bool inHancY, const bool inHancC)
758 {
759  bool ok(true);
760  if (ok) ok = EnableAncExtVancY(*this, inSDIInput, inVancY);
761  if (ok) ok = EnableAncExtVancC(*this, inSDIInput, inVancC);
762  if (ok) ok = EnableAncExtHancY(*this, inSDIInput, inHancY);
763  if (ok) ok = EnableAncExtHancC(*this, inSDIInput, inHancC);
764  return ok;
765 }
766 
767 bool CNTV2Card::AncExtractSetEnable (const UWord inSDIInput, const bool inIsEnabled)
768 {
770  return false;
772  return false;
773  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
774  return false;
775 
776  bool ok(true);
777  if (!inIsEnabled)
778  {
779  if (ok) ok = EnableAncExtHancC (*this, inSDIInput, false);
780  if (ok) ok = EnableAncExtHancY (*this, inSDIInput, false);
781  if (ok) ok = EnableAncExtVancC (*this, inSDIInput, false);
782  if (ok) ok = EnableAncExtVancY (*this, inSDIInput, false);
783  }
784  if (ok) ok = WriteRegister (AncExtRegNum(inSDIInput, regAncExtControl), inIsEnabled ? 0 : 1, maskDisableExtractor, shiftDisableExtractor);
785  return ok;
786 }
787 
788 bool CNTV2Card::AncExtractIsEnabled (const UWord inSDIInput, bool & outIsRunning)
789 {
790  outIsRunning = false;
792  return false;
794  return false;
795  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
796  return false;
797 
798  ULWord value(0);
799  if (!ReadRegister(AncExtRegNum(inSDIInput, regAncExtControl), value))
800  return false;
801  outIsRunning = (value & BIT(28)) ? false : true;
802  return true;
803 }
804 
805 bool CNTV2Card::AncExtractSetWriteParams (const UWord inSDIInput, const ULWord inFrameNumber,
806  const NTV2Channel inChannel, const NTV2Framesize inFrameSize)
807 {
809  return false;
811  return false;
812  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
813  return false;
814 
815  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIInput));
816  NTV2Framesize theFrameSize(inFrameSize);
817  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
818  {
819  if (IS_CHANNEL_INVALID(theChannel))
820  return false;
821  if (!GetFrameBufferSize(theChannel, theFrameSize))
822  return false;
823  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
824  return false;
825  }
826  if (IS_CHANNEL_INVALID(theChannel))
827  return false;
828 
829  // Calculate where ANC Extractor will put the data...
830  bool ok (true);
831  const ULWord frameNumber (inFrameNumber + 1); // This is so the next calculation will point to the beginning of the next frame - subtract offset for memory start
832  ULWord frameLocation (::NTV2FramesizeToByteCount(theFrameSize) * frameNumber);
833  bool quadEnabled(false), quadQuadEnabled(false);
834  GetQuadFrameEnable(quadEnabled, inChannel);
835  GetQuadQuadFrameEnable(quadQuadEnabled, inChannel);
836  if (quadEnabled)
837  frameLocation *= 4;
838  if (quadQuadEnabled)
839  frameLocation *= 4;
840 
841  ULWord F1Offset(0), F2Offset(0);
842  if (ok) ok = GetAncOffsets (*this, F1Offset, F2Offset);
843 
844  const ULWord ANCStartMemory (frameLocation - F1Offset);
845  const ULWord ANCStopMemory (frameLocation - F2Offset - 1);
846  if (ok) ok = SetAncExtField1StartAddr (*this, inSDIInput, ANCStartMemory);
847  if (ok) ok = SetAncExtField1EndAddr (*this, inSDIInput, ANCStopMemory);
848  return ok;
849 }
850 
851 bool CNTV2Card::AncExtractSetField2WriteParams (const UWord inSDIInput, const ULWord inFrameNumber,
852  const NTV2Channel inChannel, const NTV2Framesize inFrameSize)
853 {
855  return false;
857  return false;
858  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
859  return false;
860 
861  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIInput));
862  NTV2Framesize theFrameSize(inFrameSize);
863  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
864  {
865  if (IS_CHANNEL_INVALID(theChannel))
866  return false;
867  if (!GetFrameBufferSize(theChannel, theFrameSize))
868  return false;
869  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
870  return false;
871  }
872  if (IS_CHANNEL_INVALID(theChannel))
873  return false;
874 
875  // Calculate where ANC Extractor will put the data...
876  bool ok (true);
877  const ULWord frameNumber (inFrameNumber + 1); // This is so the next calculation will point to the beginning of the next frame - subtract offset for memory start
878  ULWord frameLocation (::NTV2FramesizeToByteCount(theFrameSize) * frameNumber);
879  bool quadEnabled(false), quadQuadEnabled(false);
880  GetQuadFrameEnable(quadEnabled, inChannel);
881  GetQuadQuadFrameEnable(quadQuadEnabled, inChannel);
882  if (quadEnabled)
883  frameLocation *= 4;
884  if (quadQuadEnabled)
885  frameLocation *= 4;
886 
887  ULWord F2Offset(0);
888  if (ok) ok = ReadRegister(kVRegAncField2Offset, F2Offset);
889 
890  const ULWord ANCStartMemory (frameLocation - F2Offset);
891  const ULWord ANCStopMemory (frameLocation - 1);
892  if (ok) ok = SetAncExtField2StartAddr (*this, inSDIInput, ANCStartMemory);
893  if (ok) ok = SetAncExtField2EndAddr (*this, inSDIInput, ANCStopMemory);
894  return true;
895 }
896 
898  uint64_t & outF1StartAddr, uint64_t & outF1EndAddr,
899  uint64_t & outF2StartAddr, uint64_t & outF2EndAddr)
900 {
901  outF1StartAddr = outF1EndAddr = outF2StartAddr = outF2EndAddr = 0;
903  return false;
905  return false;
906  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
907  return false;
908 
909  ULWord startAddr(0), endAddr(0);
910  bool ok = GetAncExtField1StartAddr(*this, inSDIInput, startAddr) && GetAncExtField1EndAddr(*this, inSDIInput, endAddr);
911  outF1StartAddr = uint64_t(startAddr);
912  outF1EndAddr = uint64_t(endAddr);
913  ok = ok && GetAncExtField2StartAddr(*this, inSDIInput, startAddr) && GetAncExtField2EndAddr(*this, inSDIInput, endAddr);
914  outF2StartAddr = uint64_t(startAddr);
915  outF2EndAddr = uint64_t(endAddr);
916  return ok;
917 }
918 
919 bool CNTV2Card::AncExtractGetFilterDIDs (const UWord inSDIInput, NTV2DIDSet & outDIDs)
920 {
921  outDIDs.clear();
923  return false;
925  return false;
926  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
927  return false;
928 
929  const ULWord firstIgnoreRegNum (AncExtRegNum(inSDIInput, regAncExtIgnorePktsReg_First));
930  for (ULWord regNdx(0); regNdx < kNumDIDRegisters; regNdx++)
931  {
932  ULWord regValue (0);
933  ReadRegister (firstIgnoreRegNum + regNdx, regValue);
934  for (unsigned regByte(0); regByte < 4; regByte++)
935  {
936  const NTV2DID theDID ((regValue >> (regByte*8)) & 0x000000FF);
937  if (theDID)
938  outDIDs.insert(theDID);
939  }
940  }
941  return true;
942 }
943 
944 bool CNTV2Card::AncExtractSetFilterDIDs (const UWord inSDIInput, const NTV2DIDSet & inDIDs)
945 {
947  return false;
949  return false;
950  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
951  return false;
952 
953  const ULWord firstIgnoreRegNum (AncExtRegNum(inSDIInput, regAncExtIgnorePktsReg_First));
954  NTV2DIDSetConstIter iter (inDIDs.begin());
955 
956  for (ULWord regNdx(0); regNdx < kNumDIDRegisters; regNdx++)
957  {
958  ULWord regValue (0);
959  for (unsigned regByte(0); regByte < 4; regByte++)
960  {
961  const NTV2DID theDID (iter != inDIDs.end() ? *iter++ : 0);
962  regValue |= (ULWord(theDID) << (regByte*8));
963  }
964  WriteRegister (firstIgnoreRegNum + regNdx, regValue);
965  }
966  return true;
967 }
968 
969 bool CNTV2Card::AncExtractGetField1Size (const UWord inSDIInput, ULWord & outF1Size)
970 {
971  outF1Size = 0;
973  return false;
975  return false;
976  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
977  return false;
978 
979  bool ok (true);
980  ULWord regValue (0);
981 
982  ok = GetAncExtField1Status(*this, inSDIInput, regValue);
983  if (!ok || ((regValue & maskField1Overrun) != 0))
984  return false;
985  outF1Size = regValue & maskField1BytesIn;
986 
987  return ok;
988 }
989 
990 bool CNTV2Card::AncExtractGetField2Size (const UWord inSDIInput, ULWord & outF2Size)
991 {
992  outF2Size = 0;
994  return false;
996  return false;
997  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
998  return false;
999 
1000  bool ok (true);
1001  ULWord regValue (0);
1002 
1003  ok = GetAncExtField2Status(*this, inSDIInput, regValue);
1004  if (!ok || ((regValue & maskField2Overrun) != 0))
1005  return false;
1006  outF2Size = regValue & maskField2BytesIn;
1007 
1008  return ok;
1009 }
1010 
1011 bool CNTV2Card::AncExtractGetBufferOverrun (const UWord inSDIInput, bool & outIsOverrun, const UWord inField)
1012 {
1013  outIsOverrun = false;
1015  return false;
1017  return false;
1018  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
1019  return false;
1020  if (inField > 2)
1021  return false;
1022  ULWord status(0);
1023  switch (inField)
1024  {
1025  case 0: return IsAncExtOverrun (*this, inSDIInput, outIsOverrun);
1026  case 1: if (!GetAncExtField1Status(*this, inSDIInput, status))
1027  return false;
1028  outIsOverrun = (status & maskField1Overrun) ? true : false;
1029  return true;
1030  case 2: if (!GetAncExtField2Status(*this, inSDIInput, status))
1031  return false;
1032  outIsOverrun = (status & maskField2Overrun) ? true : false;
1033  return true;
1034  default: break;
1035  }
1036  return false;
1037 }
1038 
1039 
1040 
1044 
1046 {
1047  static const ULWord kNumDIDsPerRegister (4);
1048  return UWord(kNumDIDsPerRegister * kNumDIDRegisters);
1049 }
1050 
1051 
1053 {
1054  // SMPTE299 HD Aud Grp 1-4 SMPTE299 HD Aud Ctrl Grp 1-4
1055  static const NTV2DID sDefaultHDDIDs[] = { 0xE7,0xE6,0xE5,0xE4, 0xE3,0xE2,0xE1,0xE0,
1056  // SMPTE299 HD Aud Grp 5-8 SMPTE299 HD Aud Ctrl Grp 5-8
1057  0xA7,0xA6,0xA5,0xA4, 0xA3,0xA2,0xA1,0xA0, 0x00};
1058 
1059  // SMPTE272 SD Aud Grp 1-4 SMPTE272 SD Aud Ext Grp 1-4
1060  static const NTV2DID sDefaultSDDIDs[] = { 0xFF,0xFD,0xFB,0xF9, 0xFE,0xFC,0xFA,0xF8,
1061  // SMPTE272 SD Aud Ctrl Grp 1-4
1062  0xEF,0xEE,0xED,0xEC, 0x00};
1063  NTV2DIDSet result;
1064  const NTV2DID * pDIDArray (inHDAudio ? sDefaultHDDIDs : sDefaultSDDIDs);
1065  for (unsigned ndx(0); pDIDArray[ndx]; ndx++)
1066  result.insert(pDIDArray[ndx]);
1067 
1068  return result;
1069 }
ANCExtractorInitParams::field2CutoffLine
uint32_t field2CutoffLine
Definition: ntv2anc.cpp:85
regAncExtFID
@ regAncExtFID
Definition: ntv2publicinterface.h:5150
regAncExtField2AnalogCFilter
@ regAncExtField2AnalogCFilter
Definition: ntv2publicinterface.h:5162
NTV2DeviceCanDoCapture
bool NTV2DeviceCanDoCapture(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:1907
regAncExtTotalFrameLines
@ regAncExtTotalFrameLines
Definition: ntv2publicinterface.h:5149
shiftEnableHancY
@ shiftEnableHancY
Definition: ntv2publicinterface.h:5073
CNTV2Card::IS_INPUT_SPIGOT_INVALID
virtual bool IS_INPUT_SPIGOT_INVALID(const UWord inInputSpigot) const
Definition: ntv2card.cpp:197
maskInsTotalPixelsInLine
@ maskInsTotalPixelsInLine
Definition: ntv2publicinterface.h:5229
ANCExtractorInitParams
struct ANCExtractorInitParams ANCExtractorInitParams
SetAncExtField2StartAddr
static bool SetAncExtField2StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t addr)
Definition: ntv2anc.cpp:595
ANCInserterInitParams
struct ANCInserterInitParams ANCInserterInitParams
maskInsEnableVancY
@ maskInsEnableVancY
Definition: ntv2publicinterface.h:5205
SetAncExtFidHi
static bool SetAncExtFidHi(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:655
shiftInsEnablePktSplitSD
@ shiftInsEnablePktSplitSD
Definition: ntv2publicinterface.h:5218
maskInsDisableInserter
@ maskInsDisableInserter
Definition: ntv2publicinterface.h:5213
NTV2_NUM_STANDARDS
@ NTV2_NUM_STANDARDS
Definition: ntv2enums.h:171
regAncExtField1Status
@ regAncExtField1Status
Definition: ntv2publicinterface.h:5146
maskSetProgressive
@ maskSetProgressive
Definition: ntv2publicinterface.h:5080
regAncInsFrameLines
@ regAncInsFrameLines
Definition: ntv2publicinterface.h:5182
SetAncInsField2Bytes
static bool SetAncInsField2Bytes(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfBytes)
Definition: ntv2anc.cpp:174
CNTV2Card::AncInsertSetEnable
virtual bool AncInsertSetEnable(const UWord inSDIOutput, const bool inIsEnabled)
Enables or disables the given SDI output's Anc inserter frame buffer reads. (Call NTV2DeviceCanDoCust...
Definition: ntv2anc.cpp:374
regAncInsRtpSSRC
@ regAncInsRtpSSRC
Definition: ntv2publicinterface.h:5192
ANCExtractorInitParams::field2SwitchLine
uint32_t field2SwitchLine
Definition: ntv2anc.cpp:90
SetAncExtField1AnalogStartLine
static bool SetAncExtField1AnalogStartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:660
shiftFIDLow
@ shiftFIDLow
Definition: ntv2publicinterface.h:5121
EnableAncExtVancC
static bool EnableAncExtVancC(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:543
SetAncExtTotalFrameLines
static bool SetAncExtTotalFrameLines(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t totalFrameLines)
Definition: ntv2anc.cpp:645
ntv2devicefeatures.h
Declares device capability functions.
CNTV2Card::AncInsertInit
virtual bool AncInsertInit(const UWord inSDIOutput, const NTV2Channel inChannel=NTV2_CHANNEL_INVALID, const NTV2Standard inStandard=NTV2_STANDARD_INVALID)
Initializes the given SDI output's Anc inserter for custom Anc packet insertion. (Call NTV2DeviceCanD...
Definition: ntv2anc.cpp:303
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:709
CNTV2Card::AncExtractGetWriteInfo
virtual bool AncExtractGetWriteInfo(const UWord inSDIInput, uint64_t &outF1StartAddr, uint64_t &outF1EndAddr, uint64_t &outF2StartAddr, uint64_t &outF2EndAddr)
Answers with the given SDI input's current Anc extractor info. (Call NTV2DeviceCanDoCustomAnc to dete...
Definition: ntv2anc.cpp:897
extractorInitParamsTable
const static ANCExtractorInitParams extractorInitParamsTable[NTV2_NUM_STANDARDS]
Definition: ntv2anc.cpp:100
maskDisableExtractor
@ maskDisableExtractor
Definition: ntv2publicinterface.h:5084
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific Frame Store. They're also commonly used to i...
Definition: ntv2enums.h:1305
SetAncInsField1ActiveLine
static bool SetAncInsField1ActiveLine(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t activeLineNumber)
Definition: ntv2anc.cpp:242
AncExtRegNum
static ULWord AncExtRegNum(const UWord inSDIInput, const ANCExtRegisters inReg)
Definition: ntv2anc.cpp:31
ANCExtractorInitParams::field1AnalogStartLine
uint32_t field1AnalogStartLine
Definition: ntv2anc.cpp:91
maskInsActivePixelsInLine
@ maskInsActivePixelsInLine
Definition: ntv2publicinterface.h:5227
CNTV2Card::IS_CHANNEL_INVALID
virtual bool IS_CHANNEL_INVALID(const NTV2Channel inChannel) const
Definition: ntv2card.cpp:177
CNTV2Card::GetStandard
virtual bool GetStandard(NTV2Standard &outValue, NTV2Channel inChannel=NTV2_CHANNEL1)
Definition: ntv2register.cpp:830
shiftInsField1Bytes
@ shiftInsField1Bytes
Definition: ntv2publicinterface.h:5200
maskField2StartLine
@ maskField2StartLine
Definition: ntv2publicinterface.h:5114
maskInsField1FirstActive
@ maskInsField1FirstActive
Definition: ntv2publicinterface.h:5223
maskInsField2FirstActive
@ maskInsField2FirstActive
Definition: ntv2publicinterface.h:5225
maskEnableVancC
@ maskEnableVancC
Definition: ntv2publicinterface.h:5078
maskTotalFrameLines
@ maskTotalFrameLines
Definition: ntv2publicinterface.h:5116
shiftField2AnalogStartLine
@ shiftField2AnalogStartLine
Definition: ntv2publicinterface.h:5133
maskInsExtendedMode
@ maskInsExtendedMode
Definition: ntv2publicinterface.h:5215
CNTV2Card::GetQuadFrameEnable
virtual bool GetQuadFrameEnable(bool &outValue, const NTV2Channel inChannel=NTV2_CHANNEL1)
Returns the device's current quad-frame mode, whether it's enabled or not.
Definition: ntv2register.cpp:1211
shiftEnableVancY
@ shiftEnableVancY
Definition: ntv2publicinterface.h:5075
maskInsEnableHancC
@ maskInsEnableHancC
Definition: ntv2publicinterface.h:5207
SetAncExtField2AnalogYFilter
static bool SetAncExtField2AnalogYFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:675
regAncExtField1EndAddress
@ regAncExtField1EndAddress
Definition: ntv2publicinterface.h:5141
regAncExtTotalStatus
@ regAncExtTotalStatus
Definition: ntv2publicinterface.h:5145
maskInsFieldIDHigh
@ maskInsFieldIDHigh
Definition: ntv2publicinterface.h:5233
CNTV2Card::AncSetFrameBufferSize
virtual bool AncSetFrameBufferSize(const ULWord inF1Size, const ULWord inF2Size)
Sets the capacity of the ANC buffers in device frame memory. (Call NTV2DeviceCanDoCustomAnc to determ...
Definition: ntv2anc.cpp:123
SetAncExtField1AnalogCFilter
static bool SetAncExtField1AnalogCFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:680
ANCExtractorInitParams::field2AnalogYFilter
uint32_t field2AnalogYFilter
Definition: ntv2anc.cpp:94
SetAncExtSDDemux
static bool SetAncExtSDDemux(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:548
maskField1AnalogStartLine
@ maskField1AnalogStartLine
Definition: ntv2publicinterface.h:5130
GetAncField2Size
static bool GetAncField2Size(CNTV2Card &inDevice, ULWord &outFieldBytes)
Definition: ntv2anc.cpp:151
maskField1BytesIn
@ maskField1BytesIn
Definition: ntv2publicinterface.h:5100
SetAncExtField2StartLine
static bool SetAncExtField2StartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:640
regAncExtField1AnalogCFilter
@ regAncExtField1AnalogCFilter
Definition: ntv2publicinterface.h:5161
maskField2AnalogStartLine
@ maskField2AnalogStartLine
Definition: ntv2publicinterface.h:5132
maskEnableVancY
@ maskEnableVancY
Definition: ntv2publicinterface.h:5074
SetAncInsProgressive
static bool SetAncInsProgressive(CNTV2Card &inDevice, const UWord inSDIOutput, bool isProgressive)
Definition: ntv2anc.cpp:202
regAncExtFieldCutoffLine
@ regAncExtFieldCutoffLine
Definition: ntv2publicinterface.h:5144
CNTV2Card::AncExtractSetFilterDIDs
virtual bool AncExtractSetFilterDIDs(const UWord inSDIInput, const NTV2DIDSet &inDIDs)
Replaces the DIDs to be excluded (filtered) by the given SDI input's Anc extractor....
Definition: ntv2anc.cpp:944
shiftSyncro
@ shiftSyncro
Definition: ntv2publicinterface.h:5083
CNTV2Card::AncExtractGetFilterDIDs
virtual bool AncExtractGetFilterDIDs(const UWord inSDIInput, NTV2DIDSet &outDIDs)
Answers with the DIDs currently being excluded (filtered) by the SDI input's Anc extractor....
Definition: ntv2anc.cpp:919
GetAncInsExtendedMode
static bool GetAncInsExtendedMode(CNTV2Card &inDevice, const UWord inSDIOutput, bool &extendedMode)
Definition: ntv2anc.cpp:292
CNTV2Card::AncInsertGetReadInfo
virtual bool AncInsertGetReadInfo(const UWord inSDIOutput, uint64_t &outF1StartAddr, uint64_t &outF2StartAddr)
Answers where, in device SDRAM, the given SDI connector's Anc inserter is currently reading Anc data ...
Definition: ntv2anc.cpp:511
shiftInsTotalLinesPerFrame
@ shiftInsTotalLinesPerFrame
Definition: ntv2publicinterface.h:5232
maskField1CutoffLine
@ maskField1CutoffLine
Definition: ntv2publicinterface.h:5090
regAncInsPixelDelay
@ regAncInsPixelDelay
Definition: ntv2publicinterface.h:5179
CNTV2DriverInterface::_boardID
NTV2DeviceID _boardID
My cached device ID.
Definition: ntv2driverinterface.h:674
ANCExtractorInitParams::field1CutoffLine
uint32_t field1CutoffLine
Definition: ntv2anc.cpp:83
maskInsField2Bytes
@ maskInsField2Bytes
Definition: ntv2publicinterface.h:5201
CNTV2Card::AncExtractSetField2WriteParams
virtual bool AncExtractSetField2WriteParams(const UWord inSDIInput, const ULWord inFrameNumber, const NTV2Channel inChannel=NTV2_CHANNEL_INVALID, const NTV2Framesize inFrameSize=NTV2_FRAMESIZE_INVALID)
Configures the given SDI input's Anc extractor to receive the next frame's F2 Anc data....
Definition: ntv2anc.cpp:851
shiftInsDisableInserter
@ shiftInsDisableInserter
Definition: ntv2publicinterface.h:5214
NTV2FramesizeToByteCount
ULWord NTV2FramesizeToByteCount(const NTV2Framesize inFrameSize)
Converts the given NTV2Framesize value into an exact byte count.
Definition: ntv2utils.cpp:5319
regAncExtIgnorePktsReg_First
@ regAncExtIgnorePktsReg_First
Definition: ntv2publicinterface.h:5152
SetAncExtField1AnalogYFilter
static bool SetAncExtField1AnalogYFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:670
ANCInserterInitParams::totalLines
uint32_t totalLines
Definition: ntv2anc.cpp:48
kVRegAncField2Offset
@ kVRegAncField2Offset
Anc Field2 byte offset from end of frame buffer (GUMP on all boards except RTP for SMPTE2022/IP)
Definition: ntv2virtualregisters.h:336
ANCInserterInitParams::field1ActiveLine
uint32_t field1ActiveLine
Definition: ntv2anc.cpp:44
CNTV2Card::AncInsertSetComponents
virtual bool AncInsertSetComponents(const UWord inSDIOutput, const bool inVancY, const bool inVancC, const bool inHancY, const bool inHancC)
Enables or disables individual Anc insertion components for the given SDI output. (Call NTV2DeviceCan...
Definition: ntv2anc.cpp:357
CNTV2DriverInterface::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: ntv2driverinterface.cpp:393
sAncInsBaseRegNum
static const ULWord sAncInsBaseRegNum[]
Definition: ntv2anc.cpp:20
SetAncInsField2ActiveLine
static bool SetAncInsField2ActiveLine(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t activeLineNumber)
Definition: ntv2anc.cpp:247
inserterInitParamsTable
static const ANCInserterInitParams inserterInitParamsTable[NTV2_NUM_STANDARDS]
Definition: ntv2anc.cpp:56
maskInsTotalLinesPerFrame
@ maskInsTotalLinesPerFrame
Definition: ntv2publicinterface.h:5231
regAncInsField1StartAddr
@ regAncInsField1StartAddr
Definition: ntv2publicinterface.h:5177
shiftInsExtendedMode
@ shiftInsExtendedMode
Definition: ntv2publicinterface.h:5216
ANCInserterInitParams::field2SwitchLine
uint32_t field2SwitchLine
Definition: ntv2anc.cpp:52
SetAncExtField2AnalogStartLine
static bool SetAncExtField2AnalogStartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:665
CNTV2Card::AncExtractGetField1Size
virtual bool AncExtractGetField1Size(const UWord inSDIInput, ULWord &outF1Size)
Answers with the number of bytes of field 1 ANC extracted. (Call NTV2DeviceCanDoCustomAnc to determin...
Definition: ntv2anc.cpp:969
CNTV2Card::AncExtractSetWriteParams
virtual bool AncExtractSetWriteParams(const UWord inSDIInput, const ULWord inFrameNumber, const NTV2Channel inChannel=NTV2_CHANNEL_INVALID, const NTV2Framesize inFrameSize=NTV2_FRAMESIZE_INVALID)
Configures the given SDI input's Anc extractor to receive the next frame's F1 Anc data....
Definition: ntv2anc.cpp:805
NTV2DIDSet
std::set< UByte > NTV2DIDSet
A set of distinct NTV2DID values.
Definition: ntv2card.h:47
regAncInsIpChannel
@ regAncInsIpChannel
Definition: ntv2publicinterface.h:5193
regAncExtField1AnalogYFilter
@ regAncExtField1AnalogYFilter
Definition: ntv2publicinterface.h:5159
CNTV2Card::AncInsertSetField2ReadParams
virtual bool AncInsertSetField2ReadParams(const UWord inSDIOutput, const ULWord inFrameNumber, const ULWord inF2Size, const NTV2Channel inChannel=NTV2_CHANNEL_INVALID, const NTV2Framesize inFrameSize=NTV2_FRAMESIZE_INVALID)
Configures the Anc inserter for the next frame's F2 Anc data to embed/transmit. (Call NTV2DeviceCanDo...
Definition: ntv2anc.cpp:456
NTV2Standard
NTV2Standard
Identifies a particular video standard.
Definition: ntv2enums.h:153
AncInsRegNum
static ULWord AncInsRegNum(const UWord inSDIOutput, const ANCInsRegisters inReg)
Definition: ntv2anc.cpp:25
ANCExtractorInitParams::field2AnalogCFilter
uint32_t field2AnalogCFilter
Definition: ntv2anc.cpp:96
maskInsEnablePktSplitSD
@ maskInsEnablePktSplitSD
Definition: ntv2publicinterface.h:5217
ULWord
uint32_t ULWord
Definition: ajatypes.h:246
maskField1Overrun
@ maskField1Overrun
Definition: ntv2publicinterface.h:5104
regAncExtField2Status
@ regAncExtField2Status
Definition: ntv2publicinterface.h:5147
maskInsEnableVancC
@ maskInsEnableVancC
Definition: ntv2publicinterface.h:5209
CNTV2Card::GetQuadQuadFrameEnable
virtual bool GetQuadQuadFrameEnable(bool &outValue, const NTV2Channel inChannel=NTV2_CHANNEL1)
Returns the device's current "quad-quad" frame mode, whether it's enabled or not.
Definition: ntv2register.cpp:1226
NTV2_IS_VALID_8MB_FRAMESIZE
#define NTV2_IS_VALID_8MB_FRAMESIZE(__x__)
Definition: ntv2enums.h:2080
SetAncExtField1CutoffLine
static bool SetAncExtField1CutoffLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:610
CNTV2Card::AncExtractGetField2Size
virtual bool AncExtractGetField2Size(const UWord inSDIInput, ULWord &outF2Size)
Answers with the number of bytes of field 2 ANC extracted. (Call NTV2DeviceCanDoCustomAnc to determin...
Definition: ntv2anc.cpp:990
SetAncInsTotalLines
static bool SetAncInsTotalLines(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfLines)
Definition: ntv2anc.cpp:262
shiftField1CutoffLine
@ shiftField1CutoffLine
Definition: ntv2publicinterface.h:5091
kVRegAncField1Offset
@ kVRegAncField1Offset
Anc Field1 byte offset from end of frame buffer (GUMP on all boards except RTP for SMPTE2022/IP)
Definition: ntv2virtualregisters.h:335
SetAncInsVancPixelDelay
static bool SetAncInsVancPixelDelay(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfPixels)
Definition: ntv2anc.cpp:237
regAncExtAnalogActiveLineLength
@ regAncExtAnalogActiveLineLength
Definition: ntv2publicinterface.h:5168
EnableAncExtHancC
static bool EnableAncExtHancC(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:533
ANCInserterInitParams::pixelDelay
uint32_t pixelDelay
Definition: ntv2anc.cpp:53
NTV2_IS_VALID_STANDARD
#define NTV2_IS_VALID_STANDARD(__s__)
Definition: ntv2enums.h:176
maskField1StartLine
@ maskField1StartLine
Definition: ntv2publicinterface.h:5112
GetAncExtField2StartAddr
static bool GetAncExtField2StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t &outAddr)
Definition: ntv2anc.cpp:590
SetAncInsFidHi
static bool SetAncInsFidHi(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t lineNumber)
Definition: ntv2anc.cpp:267
ntv2card.h
Declares the CNTV2Card class.
shiftINsHancDelay
@ shiftINsHancDelay
Definition: ntv2publicinterface.h:5220
regAncInsRtpPayloadID
@ regAncInsRtpPayloadID
Definition: ntv2publicinterface.h:5191
shiftInsActivePixelsInLine
@ shiftInsActivePixelsInLine
Definition: ntv2publicinterface.h:5228
CNTV2Card::AncInsertSetIPParams
virtual bool AncInsertSetIPParams(const UWord inSDIOutput, const UWord ancChannel, const ULWord payloadID, const ULWord ssrc)
Configures the Anc inserter IP specific params.
Definition: ntv2anc.cpp:498
shiftEnableVancC
@ shiftEnableVancC
Definition: ntv2publicinterface.h:5079
maskEnableHancY
@ maskEnableHancY
Definition: ntv2publicinterface.h:5072
regAncInsBlankField1CLines
@ regAncInsBlankField1CLines
Definition: ntv2publicinterface.h:5187
GetAncInsStartAddrs
static bool GetAncInsStartAddrs(CNTV2Card &inDevice, const UWord inSDIOutput, uint64_t &outStartAddrF1, uint64_t &outStartAddrF2)
Definition: ntv2anc.cpp:212
regAncExtField2EndAddress
@ regAncExtField2EndAddress
Definition: ntv2publicinterface.h:5143
ANCExtractorInitParams::field1AnalogCFilter
uint32_t field1AnalogCFilter
Definition: ntv2anc.cpp:95
SetAncInsHActivePixels
static bool SetAncInsHActivePixels(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfActiveLinePixels)
Definition: ntv2anc.cpp:252
SetAncExtProgressive
static bool SetAncExtProgressive(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:553
EnableAncInsVancY
static bool EnableAncInsVancY(CNTV2Card &inDevice, const UWord inSDIOutput, bool bEnable)
Definition: ntv2anc.cpp:192
UWord
uint16_t UWord
Definition: ajatypes.h:244
ANCExtractorInitParams::totalLines
uint32_t totalLines
Definition: ntv2anc.cpp:86
ANCExtractorInitParams::field2AnalogStartLine
uint32_t field2AnalogStartLine
Definition: ntv2anc.cpp:92
ntv2utils.h
Declares numerous NTV2 utility functions.
GetAncField1Size
static bool GetAncField1Size(CNTV2Card &inDevice, ULWord &outFieldBytes)
Definition: ntv2anc.cpp:141
NTV2Framesize
NTV2Framesize
Kona2/Xena2 specific enums.
Definition: ntv2enums.h:2057
ANCInsRegisters
ANCInsRegisters
Definition: ntv2publicinterface.h:5172
maskFIDHi
@ maskFIDHi
Definition: ntv2publicinterface.h:5118
EnableAncExtHancY
static bool EnableAncExtHancY(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:528
CNTV2Card
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:262
EnableAncExtVancY
static bool EnableAncExtVancY(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:538
regAncInsFieldBytes
@ regAncInsFieldBytes
Definition: ntv2publicinterface.h:5175
maskField2Overrun
@ maskField2Overrun
Definition: ntv2publicinterface.h:5110
NTV2DeviceCanDoPlayback
bool NTV2DeviceCanDoPlayback(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:4438
regAncExtField1StartAddress
@ regAncExtField1StartAddress
Definition: ntv2publicinterface.h:5140
shiftTotalOverrun
@ shiftTotalOverrun
Definition: ntv2publicinterface.h:5099
CNTV2Card::AncExtractGetMaxNumFilterDIDs
static UWord AncExtractGetMaxNumFilterDIDs(void)
Definition: ntv2anc.cpp:1045
sAncExtBaseRegNum
static const ULWord sAncExtBaseRegNum[]
Definition: ntv2anc.cpp:21
ANCExtractorInitParams::analogActiveLineLength
uint32_t analogActiveLineLength
Definition: ntv2anc.cpp:97
ANCExtractorInitParams::fidHigh
uint32_t fidHigh
Definition: ntv2anc.cpp:88
maskInsEnableHancY
@ maskInsEnableHancY
Definition: ntv2publicinterface.h:5203
SetAncExtSynchro
static bool SetAncExtSynchro(CNTV2Card &inDevice, const UWord inSDIInput)
Definition: ntv2anc.cpp:558
shiftInsSetProgressive
@ shiftInsSetProgressive
Definition: ntv2publicinterface.h:5212
NTV2_IS_VALID_CHANNEL
#define NTV2_IS_VALID_CHANNEL(__x__)
Definition: ntv2enums.h:1319
SetAncInsField1Bytes
static bool SetAncInsField1Bytes(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfBytes)
Definition: ntv2anc.cpp:166
CNTV2Card::AncInsertSetReadParams
virtual bool AncInsertSetReadParams(const UWord inSDIOutput, const ULWord inFrameNumber, const ULWord inF1Size, const NTV2Channel inChannel=NTV2_CHANNEL_INVALID, const NTV2Framesize inFrameSize=NTV2_FRAMESIZE_INVALID)
Configures the Anc inserter for the next frame's F1 Anc data to embed/transmit. (Call NTV2DeviceCanDo...
Definition: ntv2anc.cpp:414
regAncExtField2AnalogYFilter
@ regAncExtField2AnalogYFilter
Definition: ntv2publicinterface.h:5160
ntv2formatdescriptor.h
Declares the NTV2FormatDescriptor class.
ANCExtractorInitParams::field1AnalogYFilter
uint32_t field1AnalogYFilter
Definition: ntv2anc.cpp:93
shiftInsEnableVancC
@ shiftInsEnableVancC
Definition: ntv2publicinterface.h:5210
SetAncExtField2AnalogCFilter
static bool SetAncExtField2AnalogCFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:685
SetAncInsField2StartAddr
static bool SetAncInsField2StartAddr(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t startAddr)
Definition: ntv2anc.cpp:227
regAncInsBlankCStartLine
@ regAncInsBlankCStartLine
Definition: ntv2publicinterface.h:5186
SetAncInsHTotalPixels
static bool SetAncInsHTotalPixels(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfLinePixels)
Definition: ntv2anc.cpp:257
GetAncOffsets
static bool GetAncOffsets(CNTV2Card &inDevice, ULWord &outF1Offset, ULWord &outF2Offset)
Definition: ntv2anc.cpp:134
shiftSetProgressive
@ shiftSetProgressive
Definition: ntv2publicinterface.h:5081
SetAncExtField1StartAddr
static bool SetAncExtField1StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t addr)
Definition: ntv2anc.cpp:575
ANCInserterInitParams::fidHigh
uint32_t fidHigh
Definition: ntv2anc.cpp:50
CNTV2Card::IS_OUTPUT_SPIGOT_INVALID
virtual bool IS_OUTPUT_SPIGOT_INVALID(const UWord inOutputSpigot) const
Definition: ntv2card.cpp:185
maskFIDLow
@ maskFIDLow
Definition: ntv2publicinterface.h:5120
shiftInsField2Bytes
@ shiftInsField2Bytes
Definition: ntv2publicinterface.h:5202
regAncInsField2StartAddr
@ regAncInsField2StartAddr
Definition: ntv2publicinterface.h:5178
EnableAncInsHancY
static bool EnableAncInsHancY(CNTV2Card &inDevice, const UWord inSDIOutput, bool bEnable)
Definition: ntv2anc.cpp:182
maskField2BytesIn
@ maskField2BytesIn
Definition: ntv2publicinterface.h:5106
NTV2DeviceCanDoIP
bool NTV2DeviceCanDoIP(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:3526
regAncInsLinePixels
@ regAncInsLinePixels
Definition: ntv2publicinterface.h:5181
NTV2_IS_SD_STANDARD
#define NTV2_IS_SD_STANDARD(__s__)
Definition: ntv2enums.h:186
ANCInserterInitParams::hTotalPixels
uint32_t hTotalPixels
Definition: ntv2anc.cpp:47
CNTV2Card::AncExtractInit
virtual bool AncExtractInit(const UWord inSDIInput, const NTV2Channel inChannel=NTV2_CHANNEL_INVALID, const NTV2Standard inStandard=NTV2_STANDARD_INVALID)
Initializes the given SDI input's Anc extractor for custom Anc packet detection and de-embedding....
Definition: ntv2anc.cpp:701
ANCExtractorInitParams::field1SwitchLine
uint32_t field1SwitchLine
Definition: ntv2anc.cpp:89
ANCInserterInitParams::hActivePixels
uint32_t hActivePixels
Definition: ntv2anc.cpp:46
SetAncExtField1EndAddr
static bool SetAncExtField1EndAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t addr)
Definition: ntv2anc.cpp:585
regAncExtAnalogStartLine
@ regAncExtAnalogStartLine
Definition: ntv2publicinterface.h:5158
SetAncInsRtpSSRC
static bool SetAncInsRtpSSRC(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t ssrc)
Definition: ntv2anc.cpp:282
shiftField2StartLine
@ shiftField2StartLine
Definition: ntv2publicinterface.h:5115
regAncInsBlankField2CLines
@ regAncInsBlankField2CLines
Definition: ntv2publicinterface.h:5188
SetAncInsField1StartAddr
static bool SetAncInsField1StartAddr(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t startAddr)
Definition: ntv2anc.cpp:222
SetAncExtField2EndAddr
static bool SetAncExtField2EndAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t addr)
Definition: ntv2anc.cpp:605
ANCExtractorInitParams::field1StartLine
uint32_t field1StartLine
Definition: ntv2anc.cpp:82
GetAncExtField1EndAddr
static bool GetAncExtField1EndAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t &outAddr)
Definition: ntv2anc.cpp:580
maskEnableHancC
@ maskEnableHancC
Definition: ntv2publicinterface.h:5076
regAncExtIgnorePktsReg_Last
@ regAncExtIgnorePktsReg_Last
Definition: ntv2publicinterface.h:5157
shiftInsVancDelay
@ shiftInsVancDelay
Definition: ntv2publicinterface.h:5222
CNTV2Card::AncInsertIsEnabled
virtual bool AncInsertIsEnabled(const UWord inSDIOutput, bool &outIsEnabled)
Answers with the run state of the given Anc inserter – i.e. if its "memory reader" is enabled or not....
Definition: ntv2anc.cpp:397
CNTV2Card::AncExtractIsEnabled
virtual bool AncExtractIsEnabled(const UWord inSDIInput, bool &outIsEnabled)
Answers whether the given SDI input's Anc extractor is enabled/active or not. (Call NTV2DeviceCanDoCu...
Definition: ntv2anc.cpp:788
maskInsSetProgressive
@ maskInsSetProgressive
Definition: ntv2publicinterface.h:5211
ANCInserterInitParams::field1SwitchLine
uint32_t field1SwitchLine
Definition: ntv2anc.cpp:51
SetAncInsRtpPayloadID
static bool SetAncInsRtpPayloadID(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t payloadID)
Definition: ntv2anc.cpp:277
ANCInserterInitParams
Definition: ntv2anc.cpp:42
regAncExtControl
@ regAncExtControl
Definition: ntv2publicinterface.h:5139
NTV2DID
UByte NTV2DID
An ancillary Data IDentifier.
Definition: ntv2card.h:46
shiftInsFieldIDHigh
@ shiftInsFieldIDHigh
Definition: ntv2publicinterface.h:5234
SetAncInsFidLow
static bool SetAncInsFidLow(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t lineNumber)
Definition: ntv2anc.cpp:272
shiftInsFieldIDLow
@ shiftInsFieldIDLow
Definition: ntv2publicinterface.h:5236
CNTV2DriverInterface::GetFrameBufferSize
virtual ULWord GetFrameBufferSize(void) const
Definition: ntv2driverinterface.h:388
SetAncExtField1StartLine
static bool SetAncExtField1StartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:635
EnableAncInsVancC
static bool EnableAncInsVancC(CNTV2Card &inDevice, const UWord inSDIOutput, bool bEnable)
Definition: ntv2anc.cpp:197
kNumDIDRegisters
static const ULWord kNumDIDRegisters(regAncExtIgnorePktsReg_Last - regAncExtIgnorePktsReg_First+1)
maskEnableSDMux
@ maskEnableSDMux
Definition: ntv2publicinterface.h:5086
SetAncExtFidLow
static bool SetAncExtFidLow(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:650
GetAncExtExtendedMode
static bool GetAncExtExtendedMode(CNTV2Card &inDevice, const UWord inSDIInput, bool &extendedMode)
Definition: ntv2anc.cpp:690
shiftInsField2FirstActive
@ shiftInsField2FirstActive
Definition: ntv2publicinterface.h:5226
ANCExtractorInitParams
Definition: ntv2anc.cpp:80
maskSyncro
@ maskSyncro
Definition: ntv2publicinterface.h:5082
shiftInsEnableVancY
@ shiftInsEnableVancY
Definition: ntv2publicinterface.h:5206
maskTotalOverrun
@ maskTotalOverrun
Definition: ntv2publicinterface.h:5098
NTV2DeviceGetNumVideoOutputs
UWord NTV2DeviceGetNumVideoOutputs(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:12012
regAncInsFieldIDLines
@ regAncInsFieldIDLines
Definition: ntv2publicinterface.h:5183
maskInsField1Bytes
@ maskInsField1Bytes
Definition: ntv2publicinterface.h:5199
NTV2DeviceCanDoCustomAnc
bool NTV2DeviceCanDoCustomAnc(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:2087
maskInsHancDelay
@ maskInsHancDelay
Definition: ntv2publicinterface.h:5219
regAncInsFieldBytesHigh
@ regAncInsFieldBytesHigh
Definition: ntv2publicinterface.h:5189
maskField2CutoffLine
@ maskField2CutoffLine
Definition: ntv2publicinterface.h:5092
SetAncExtField2CutoffLine
static bool SetAncExtField2CutoffLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:615
ANCExtractorInitParams::fidLow
uint32_t fidLow
Definition: ntv2anc.cpp:87
shiftField2CutoffLine
@ shiftField2CutoffLine
Definition: ntv2publicinterface.h:5093
maskInsFieldIDLow
@ maskInsFieldIDLow
Definition: ntv2publicinterface.h:5235
GetAncExtField1Status
static bool GetAncExtField1Status(CNTV2DriverInterface &inDevice, const UWord inSDIInput, ULWord &outF1Status)
Definition: ntv2anc.cpp:620
regAncInsActiveStart
@ regAncInsActiveStart
Definition: ntv2publicinterface.h:5180
shiftEnableSDMux
@ shiftEnableSDMux
Definition: ntv2publicinterface.h:5087
regAncExtField2StartAddress
@ regAncExtField2StartAddress
Definition: ntv2publicinterface.h:5142
regAncInsControl
@ regAncInsControl
Definition: ntv2publicinterface.h:5176
BIT
#define BIT(_x_)
Definition: ajatypes.h:654
shiftTotalFrameLines
@ shiftTotalFrameLines
Definition: ntv2publicinterface.h:5117
shiftInsTotalPixelsInLine
@ shiftInsTotalPixelsInLine
Definition: ntv2publicinterface.h:5230
CNTV2Card::AncExtractSetEnable
virtual bool AncExtractSetEnable(const UWord inSDIInput, const bool inIsEnabled)
Enables or disables the given SDI input's Anc extractor. (Call NTV2DeviceCanDoCustomAnc to determine ...
Definition: ntv2anc.cpp:767
CNTV2DriverInterface
I'm the base class that undergirds the platform-specific derived classes (from which CNTV2Card is ult...
Definition: ntv2driverinterface.h:64
SetAncInsIPChannel
static bool SetAncInsIPChannel(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t channel)
Definition: ntv2anc.cpp:287
GetAncExtField1StartAddr
static bool GetAncExtField1StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t &outAddr)
Definition: ntv2anc.cpp:570
EnableAncInsHancC
static bool EnableAncInsHancC(CNTV2Card &inDevice, const UWord inSDIOutput, bool bEnable)
Definition: ntv2anc.cpp:187
ANCInserterInitParams::field2ActiveLine
uint32_t field2ActiveLine
Definition: ntv2anc.cpp:45
ANCExtractorInitParams::field2StartLine
uint32_t field2StartLine
Definition: ntv2anc.cpp:84
ANCExtRegisters
ANCExtRegisters
Definition: ntv2publicinterface.h:5136
SetAncInsHancPixelDelay
static bool SetAncInsHancPixelDelay(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfPixels)
Definition: ntv2anc.cpp:232
GetAncExtField2EndAddr
static bool GetAncExtField2EndAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t &outAddr)
Definition: ntv2anc.cpp:600
CNTV2MacDriverInterface::WriteRegister
virtual bool WriteRegister(const ULWord inRegNum, const ULWord inValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Updates or replaces all or part of the 32-bit contents of a specific register (real or virtual) on th...
Definition: ntv2macdriverinterface.cpp:754
SetAncInsSDPacketSplit
static bool SetAncInsSDPacketSplit(CNTV2Card &inDevice, const UWord inSDIOutput, bool inEnable)
Definition: ntv2anc.cpp:207
shiftDisableExtractor
@ shiftDisableExtractor
Definition: ntv2publicinterface.h:5085
ANCInserterInitParams::fidLow
uint32_t fidLow
Definition: ntv2anc.cpp:49
NTV2DIDSetConstIter
NTV2DIDSet::const_iterator NTV2DIDSetConstIter
Handy const iterator to iterate over an NTV2DIDSet.
Definition: ntv2card.h:49
shiftInsField1FirstActive
@ shiftInsField1FirstActive
Definition: ntv2publicinterface.h:5224
shiftFIDHi
@ shiftFIDHi
Definition: ntv2publicinterface.h:5119
shiftInsEnableHancC
@ shiftInsEnableHancC
Definition: ntv2publicinterface.h:5208
IsAncExtOverrun
static bool IsAncExtOverrun(CNTV2DriverInterface &inDevice, const UWord inSDIInput, bool &outIsOverrun)
Definition: ntv2anc.cpp:630
NTV2_IS_PROGRESSIVE_STANDARD
#define NTV2_IS_PROGRESSIVE_STANDARD(__s__)
Definition: ntv2enums.h:177
shiftEnableHancC
@ shiftEnableHancC
Definition: ntv2publicinterface.h:5077
shiftInsEnableHancY
@ shiftInsEnableHancY
Definition: ntv2publicinterface.h:5204
maskInsVancDelay
@ maskInsVancDelay
Definition: ntv2publicinterface.h:5221
shiftField1AnalogStartLine
@ shiftField1AnalogStartLine
Definition: ntv2publicinterface.h:5131
CNTV2Card::AncExtractGetBufferOverrun
virtual bool AncExtractGetBufferOverrun(const UWord inSDIInput, bool &outIsOverrun, const UWord inField=0)
Answers whether or not the given SDI input's Anc extractor reached its buffer limits....
Definition: ntv2anc.cpp:1011
GetAncExtField2Status
static bool GetAncExtField2Status(CNTV2DriverInterface &inDevice, const UWord inSDIInput, ULWord &outF2Status)
Definition: ntv2anc.cpp:625
shiftField1StartLine
@ shiftField1StartLine
Definition: ntv2publicinterface.h:5113
CNTV2Card::AncExtractGetDefaultDIDs
static NTV2DIDSet AncExtractGetDefaultDIDs(const bool inHDAudio=true)
Definition: ntv2anc.cpp:1052
regAncExtFieldVBLStartLine
@ regAncExtFieldVBLStartLine
Definition: ntv2publicinterface.h:5148
CNTV2Card::AncExtractSetComponents
virtual bool AncExtractSetComponents(const UWord inSDIInput, const bool inVancY, const bool inVancC, const bool inHancY, const bool inHancC)
Enables or disables the Anc extraction components for the given SDI input. (Call NTV2DeviceCanDoCusto...
Definition: ntv2anc.cpp:755