AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
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 (IS_OUTPUT_SPIGOT_INVALID(inSDIOutput))
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 IsAncExtProgressive (CNTV2DriverInterface & inDevice, const UWord inSDIInput, bool & outIsProgressive)
559 {
560  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtControl), outIsProgressive, maskSetProgressive, shiftSetProgressive);
561 }
562 
563 static bool SetAncExtSynchro (CNTV2Card & inDevice, const UWord inSDIInput)
564 {
565  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), 0x1, maskSyncro, shiftSyncro);
566 }
567 
568 /* currently unused
569 static bool SetAncExtLSBEnable (CNTV2Card & inDevice, const UWord inSDIInput, bool bEnable)
570 {
571  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtControl), bEnable ? 1 : 0, (ULWord)maskGrabLSBs, shiftGrabLSBs);
572 }
573 */
574 
575 static bool GetAncExtField1StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
576 {
577  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField1StartAddress), outAddr);
578 }
579 
580 static bool SetAncExtField1StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
581 {
582  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1StartAddress), addr);
583 }
584 
585 static bool GetAncExtField1EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
586 {
587  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField1EndAddress), outAddr);
588 }
589 
590 static bool SetAncExtField1EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
591 {
592  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1EndAddress), addr);
593 }
594 
595 static bool GetAncExtField2StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
596 {
597  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField2StartAddress), outAddr);
598 }
599 
600 static bool SetAncExtField2StartAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
601 {
602  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2StartAddress), addr);
603 }
604 
605 static bool GetAncExtField2EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t & outAddr)
606 {
607  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField2EndAddress), outAddr);
608 }
609 
610 static bool SetAncExtField2EndAddr (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t addr)
611 {
612  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2EndAddress), addr);
613 }
614 
615 static bool SetAncExtField1CutoffLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
616 {
618 }
619 
620 static bool SetAncExtField2CutoffLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
621 {
623 }
624 
625 static bool GetAncExtField1Status (CNTV2DriverInterface & inDevice, const UWord inSDIInput, ULWord & outF1Status)
626 {
627  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField1Status), outF1Status);
628 }
629 
630 static bool GetAncExtField2Status (CNTV2DriverInterface & inDevice, const UWord inSDIInput, ULWord & outF2Status)
631 {
632  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtField2Status), outF2Status);
633 }
634 
635 static bool IsAncExtOverrun (CNTV2DriverInterface & inDevice, const UWord inSDIInput, bool & outIsOverrun)
636 {
637  return inDevice.ReadRegister(AncExtRegNum(inSDIInput, regAncExtTotalStatus), outIsOverrun, maskTotalOverrun, shiftTotalOverrun);
638 }
639 
640 static bool SetAncExtField1StartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
641 {
643 }
644 
645 static bool SetAncExtField2StartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
646 {
648 }
649 
650 static bool SetAncExtTotalFrameLines (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t totalFrameLines)
651 {
652  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtTotalFrameLines), totalFrameLines, maskTotalFrameLines, shiftTotalFrameLines);
653 }
654 
655 static bool SetAncExtFidLow (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
656 {
657  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtFID), lineNumber, maskFIDLow, shiftFIDLow);
658 }
659 
660 static bool SetAncExtFidHi (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
661 {
662  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtFID), lineNumber, maskFIDHi, shiftFIDHi);
663 }
664 
665 static bool SetAncExtField1AnalogStartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
666 {
668 }
669 
670 static bool SetAncExtField2AnalogStartLine (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineNumber)
671 {
673 }
674 
675 static bool SetAncExtField1AnalogYFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
676 {
677  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1AnalogYFilter), lineFilter);
678 }
679 
680 static bool SetAncExtField2AnalogYFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
681 {
682  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2AnalogYFilter), lineFilter);
683 }
684 
685 static bool SetAncExtField1AnalogCFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
686 {
687  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField1AnalogCFilter), lineFilter);
688 }
689 
690 static bool SetAncExtField2AnalogCFilter (CNTV2Card & inDevice, const UWord inSDIInput, uint32_t lineFilter)
691 {
692  return inDevice.WriteRegister(AncExtRegNum(inSDIInput, regAncExtField2AnalogCFilter), lineFilter);
693 }
694 
695 static bool GetAncExtExtendedMode (CNTV2Card & inDevice, const UWord inSDIInput, bool& extendedMode)
696 {
697  bool ok(true);
698  uint32_t regValue(0);
699  extendedMode = false;
701  if (ok) ok = inDevice.ReadRegister(AncInsRegNum(inSDIInput, regAncInsControl), regValue, maskInsExtendedMode, shiftInsExtendedMode);
702  if (ok) extendedMode = (regValue == 1);
703  return ok;
704 }
705 
706 bool CNTV2Card::AncExtractInit (const UWord inSDIInput, const NTV2Channel inChannel, const NTV2Standard inStandard)
707 {
709  return false;
711  return false;
712  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
713  return false;
714 
715  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIInput));
716  NTV2Standard theStandard (inStandard);
717  if (!NTV2_IS_VALID_STANDARD(theStandard))
718  {
719  if (IS_CHANNEL_INVALID(theChannel))
720  return false;
721  if (!GetStandard(theStandard, theChannel))
722  return false;
723  if (!NTV2_IS_VALID_STANDARD(theStandard))
724  return false;
725  }
726 
727  const ANCExtractorInitParams & extractorParams (extractorInitParamsTable[theStandard]);
728  bool ok(true);
729  bool extendedMode(false);
730  if (ok) ok = GetAncExtExtendedMode (*this, inSDIInput, extendedMode);
731  if (ok) ok = SetAncExtProgressive (*this, inSDIInput, NTV2_IS_PROGRESSIVE_STANDARD(theStandard));
732  if (ok) ok = SetAncExtField1StartLine (*this, inSDIInput, extractorParams.field1StartLine);
733  if (ok) ok = SetAncExtField1CutoffLine (*this, inSDIInput, extendedMode? extractorParams.field1SwitchLine : extractorParams.field1CutoffLine);
734  if (ok) ok = SetAncExtField2StartLine (*this, inSDIInput, extractorParams.field2StartLine);
735  if (ok) ok = SetAncExtField2CutoffLine (*this, inSDIInput, extendedMode? extractorParams.field2SwitchLine : extractorParams.field2CutoffLine);
736  if (ok) ok = SetAncExtTotalFrameLines (*this, inSDIInput, extractorParams.totalLines);
737  if (ok) ok = SetAncExtFidLow (*this, inSDIInput, extractorParams.fidLow);
738  if (ok) ok = SetAncExtFidHi (*this, inSDIInput, extractorParams.fidHigh);
739  if (ok) ok = SetAncExtField1AnalogStartLine (*this, inSDIInput, extractorParams.field1AnalogStartLine);
740  if (ok) ok = SetAncExtField2AnalogStartLine (*this, inSDIInput, extractorParams.field2AnalogStartLine);
741  if (ok) ok = SetAncExtField1AnalogYFilter (*this, inSDIInput, extractorParams.field1AnalogYFilter);
742  if (ok) ok = SetAncExtField2AnalogYFilter (*this, inSDIInput, extractorParams.field2AnalogYFilter);
743  if (ok) ok = SetAncExtField1AnalogCFilter (*this, inSDIInput, extractorParams.field1AnalogCFilter);
744  if (ok) ok = SetAncExtField2AnalogCFilter (*this, inSDIInput, extractorParams.field2AnalogCFilter);
745  if (ok) ok = AncExtractSetFilterDIDs (inSDIInput, AncExtractGetDefaultDIDs());
746  if (ok) ok = WriteRegister (AncExtRegNum(inSDIInput, regAncExtAnalogActiveLineLength), extractorParams.analogActiveLineLength);
747  if (ok) ok = SetAncExtSDDemux (*this, inSDIInput, NTV2_IS_SD_STANDARD(theStandard));
748  if (ok) ok = EnableAncExtHancC (*this, inSDIInput, true);
749  if (ok) ok = EnableAncExtHancY (*this, inSDIInput, true);
750  if (ok) ok = EnableAncExtVancC (*this, inSDIInput, true);
751  if (ok) ok = EnableAncExtVancY (*this, inSDIInput, true);
752  if (ok) ok = SetAncExtSynchro (*this, inSDIInput);
753  if (ok) ok = SetAncExtField1StartAddr (*this, inSDIInput, 0);
754  if (ok) ok = SetAncExtField1EndAddr (*this, inSDIInput, 0);
755  if (ok) ok = SetAncExtField2StartAddr (*this, inSDIInput, 0);
756  if (ok) ok = SetAncExtField2EndAddr (*this, inSDIInput, 0);
757  return ok;
758 }
759 
761  const bool inVancY, const bool inVancC,
762  const bool inHancY, const bool inHancC)
763 {
764  bool ok(true);
765  if (ok) ok = EnableAncExtVancY(*this, inSDIInput, inVancY);
766  if (ok) ok = EnableAncExtVancC(*this, inSDIInput, inVancC);
767  if (ok) ok = EnableAncExtHancY(*this, inSDIInput, inHancY);
768  if (ok) ok = EnableAncExtHancC(*this, inSDIInput, inHancC);
769  return ok;
770 }
771 
772 bool CNTV2Card::AncExtractSetEnable (const UWord inSDIInput, const bool inIsEnabled)
773 {
775  return false;
777  return false;
778  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
779  return false;
780 
781  bool ok(true);
782  if (!inIsEnabled)
783  {
784  if (ok) ok = EnableAncExtHancC (*this, inSDIInput, false);
785  if (ok) ok = EnableAncExtHancY (*this, inSDIInput, false);
786  if (ok) ok = EnableAncExtVancC (*this, inSDIInput, false);
787  if (ok) ok = EnableAncExtVancY (*this, inSDIInput, false);
788  }
789  if (ok) ok = WriteRegister (AncExtRegNum(inSDIInput, regAncExtControl), inIsEnabled ? 0 : 1, maskDisableExtractor, shiftDisableExtractor);
790  return ok;
791 }
792 
793 bool CNTV2Card::AncExtractIsEnabled (const UWord inSDIInput, bool & outIsRunning)
794 {
795  outIsRunning = false;
797  return false;
799  return false;
800  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
801  return false;
802 
803  ULWord value(0);
804  if (!ReadRegister(AncExtRegNum(inSDIInput, regAncExtControl), value))
805  return false;
806  outIsRunning = (value & BIT(28)) ? false : true;
807  return true;
808 }
809 
810 bool CNTV2Card::AncExtractSetWriteParams (const UWord inSDIInput, const ULWord inFrameNumber,
811  const NTV2Channel inChannel, const NTV2Framesize inFrameSize)
812 {
814  return false;
816  return false;
817  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
818  return false;
819 
820  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIInput));
821  NTV2Framesize theFrameSize(inFrameSize);
822  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
823  {
824  if (IS_CHANNEL_INVALID(theChannel))
825  return false;
826  if (!GetFrameBufferSize(theChannel, theFrameSize))
827  return false;
828  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
829  return false;
830  }
831  if (IS_CHANNEL_INVALID(theChannel))
832  return false;
833 
834  // Calculate where ANC Extractor will put the data...
835  bool ok (true);
836  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
837  ULWord frameLocation (::NTV2FramesizeToByteCount(theFrameSize) * frameNumber);
838  bool quadEnabled(false), quadQuadEnabled(false);
839  GetQuadFrameEnable(quadEnabled, inChannel);
840  GetQuadQuadFrameEnable(quadQuadEnabled, inChannel);
841  if (quadEnabled)
842  frameLocation *= 4;
843  if (quadQuadEnabled)
844  frameLocation *= 4;
845 
846  ULWord F1Offset(0), F2Offset(0);
847  if (ok) ok = GetAncOffsets (*this, F1Offset, F2Offset);
848 
849  const ULWord ANCStartMemory (frameLocation - F1Offset);
850  const ULWord ANCStopMemory (frameLocation - F2Offset - 1);
851  if (ok) ok = SetAncExtField1StartAddr (*this, inSDIInput, ANCStartMemory);
852  if (ok) ok = SetAncExtField1EndAddr (*this, inSDIInput, ANCStopMemory);
853  return ok;
854 }
855 
856 bool CNTV2Card::AncExtractSetField2WriteParams (const UWord inSDIInput, const ULWord inFrameNumber,
857  const NTV2Channel inChannel, const NTV2Framesize inFrameSize)
858 {
860  return false;
862  return false;
863  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
864  return false;
865 
866  NTV2Channel theChannel (NTV2_IS_VALID_CHANNEL(inChannel) ? inChannel : NTV2Channel(inSDIInput));
867  NTV2Framesize theFrameSize(inFrameSize);
868  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
869  {
870  if (IS_CHANNEL_INVALID(theChannel))
871  return false;
872  if (!GetFrameBufferSize(theChannel, theFrameSize))
873  return false;
874  if (!NTV2_IS_VALID_8MB_FRAMESIZE(theFrameSize))
875  return false;
876  }
877  if (IS_CHANNEL_INVALID(theChannel))
878  return false;
879 
880  // Calculate where ANC Extractor will put the data...
881  bool ok (true);
882  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
883  ULWord frameLocation (::NTV2FramesizeToByteCount(theFrameSize) * frameNumber);
884  bool quadEnabled(false), quadQuadEnabled(false);
885  GetQuadFrameEnable(quadEnabled, inChannel);
886  GetQuadQuadFrameEnable(quadQuadEnabled, inChannel);
887  if (quadEnabled)
888  frameLocation *= 4;
889  if (quadQuadEnabled)
890  frameLocation *= 4;
891 
892  ULWord F2Offset(0);
893  if (ok) ok = ReadRegister(kVRegAncField2Offset, F2Offset);
894 
895  const ULWord ANCStartMemory (frameLocation - F2Offset);
896  const ULWord ANCStopMemory (frameLocation - 1);
897  if (ok) ok = SetAncExtField2StartAddr (*this, inSDIInput, ANCStartMemory);
898  if (ok) ok = SetAncExtField2EndAddr (*this, inSDIInput, ANCStopMemory);
899  return true;
900 }
901 
903  uint64_t & outF1StartAddr, uint64_t & outF1EndAddr,
904  uint64_t & outF2StartAddr, uint64_t & outF2EndAddr)
905 {
906  outF1StartAddr = outF1EndAddr = outF2StartAddr = outF2EndAddr = 0;
908  return false;
910  return false;
911  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
912  return false;
913 
914  ULWord startAddr(0), endAddr(0);
915  bool ok = GetAncExtField1StartAddr(*this, inSDIInput, startAddr) && GetAncExtField1EndAddr(*this, inSDIInput, endAddr);
916  outF1StartAddr = uint64_t(startAddr);
917  outF1EndAddr = uint64_t(endAddr);
918  ok = ok && GetAncExtField2StartAddr(*this, inSDIInput, startAddr) && GetAncExtField2EndAddr(*this, inSDIInput, endAddr);
919  outF2StartAddr = uint64_t(startAddr);
920  outF2EndAddr = uint64_t(endAddr);
921  return ok;
922 }
923 
924 bool CNTV2Card::AncExtractGetFilterDIDs (const UWord inSDIInput, NTV2DIDSet & outDIDs)
925 {
926  outDIDs.clear();
928  return false;
930  return false;
931  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
932  return false;
933 
934  const ULWord firstIgnoreRegNum (AncExtRegNum(inSDIInput, regAncExtIgnorePktsReg_First));
935  for (ULWord regNdx(0); regNdx < kNumDIDRegisters; regNdx++)
936  {
937  ULWord regValue (0);
938  ReadRegister (firstIgnoreRegNum + regNdx, regValue);
939  for (unsigned regByte(0); regByte < 4; regByte++)
940  {
941  const NTV2DID theDID ((regValue >> (regByte*8)) & 0x000000FF);
942  if (theDID)
943  outDIDs.insert(theDID);
944  }
945  }
946  return true;
947 }
948 
949 bool CNTV2Card::AncExtractSetFilterDIDs (const UWord inSDIInput, const NTV2DIDSet & inDIDs)
950 {
952  return false;
954  return false;
955  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
956  return false;
957 
958  const ULWord firstIgnoreRegNum (AncExtRegNum(inSDIInput, regAncExtIgnorePktsReg_First));
959  NTV2DIDSetConstIter iter (inDIDs.begin());
960 
961  for (ULWord regNdx(0); regNdx < kNumDIDRegisters; regNdx++)
962  {
963  ULWord regValue (0);
964  for (unsigned regByte(0); regByte < 4; regByte++)
965  {
966  const NTV2DID theDID (iter != inDIDs.end() ? *iter++ : 0);
967  regValue |= (ULWord(theDID) << (regByte*8));
968  }
969  WriteRegister (firstIgnoreRegNum + regNdx, regValue);
970  }
971  return true;
972 }
973 
974 bool CNTV2Card::AncExtractGetField1Size (const UWord inSDIInput, ULWord & outF1Size)
975 {
976  outF1Size = 0;
978  return false;
980  return false;
981  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
982  return false;
983 
984  bool ok (true);
985  ULWord regValue (0);
986 
987  ok = GetAncExtField1Status(*this, inSDIInput, regValue);
988  if (!ok || ((regValue & maskField1Overrun) != 0))
989  return false;
990  outF1Size = regValue & maskField1BytesIn;
991 
992  return ok;
993 }
994 
995 bool CNTV2Card::AncExtractGetField2Size (const UWord inSDIInput, ULWord & outF2Size)
996 {
997  outF2Size = 0;
999  return false;
1001  return false;
1002  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
1003  return false;
1004 
1005  bool ok (true);
1006  ULWord regValue (0);
1007 
1008  ok = GetAncExtField2Status(*this, inSDIInput, regValue);
1009  if (!ok || ((regValue & maskField2Overrun) != 0))
1010  return false;
1011  outF2Size = regValue & maskField2BytesIn;
1012 
1013  return ok;
1014 }
1015 
1016 bool CNTV2Card::AncExtractGetBufferOverrun (const UWord inSDIInput, bool & outIsOverrun, const UWord inField)
1017 {
1018  outIsOverrun = false;
1020  return false;
1022  return false;
1023  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
1024  return false;
1025  if (inField > 2)
1026  return false;
1027  ULWord status(0);
1028  switch (inField)
1029  {
1030  case 0: return IsAncExtOverrun (*this, inSDIInput, outIsOverrun);
1031  case 1: if (!GetAncExtField1Status(*this, inSDIInput, status))
1032  return false;
1033  outIsOverrun = (status & maskField1Overrun) ? true : false;
1034  return true;
1035  case 2: if (!GetAncExtField2Status(*this, inSDIInput, status))
1036  return false;
1037  outIsOverrun = (status & maskField2Overrun) ? true : false;
1038  return true;
1039  default: break;
1040  }
1041  return false;
1042 }
1043 
1044 bool CNTV2Card::AncExtractIsProgressive (const UWord inSDIInput, bool & outIsProgressive)
1045 {
1047  return false;
1049  return false;
1050  if (IS_INPUT_SPIGOT_INVALID(inSDIInput))
1051  return false;
1052 
1053  return IsAncExtProgressive (*this, inSDIInput, outIsProgressive);
1054 }
1055 
1056 
1060 
1062 {
1063  static const ULWord kNumDIDsPerRegister (4);
1064  return UWord(kNumDIDsPerRegister * kNumDIDRegisters);
1065 }
1066 
1067 
1069 {
1070  // SMPTE299 HD Aud Grp 1-4 SMPTE299 HD Aud Ctrl Grp 1-4
1071  static const NTV2DID sDefaultHDDIDs[] = { 0xE7,0xE6,0xE5,0xE4, 0xE3,0xE2,0xE1,0xE0,
1072  // SMPTE299 HD Aud Grp 5-8 SMPTE299 HD Aud Ctrl Grp 5-8
1073  0xA7,0xA6,0xA5,0xA4, 0xA3,0xA2,0xA1,0xA0, 0x00};
1074 
1075  // SMPTE272 SD Aud Grp 1-4 SMPTE272 SD Aud Ext Grp 1-4
1076  static const NTV2DID sDefaultSDDIDs[] = { 0xFF,0xFD,0xFB,0xF9, 0xFE,0xFC,0xFA,0xF8,
1077  // SMPTE272 SD Aud Ctrl Grp 1-4
1078  0xEF,0xEE,0xED,0xEC, 0x00};
1079  NTV2DIDSet result;
1080  const NTV2DID * pDIDArray (inHDAudio ? sDefaultHDDIDs : sDefaultSDDIDs);
1081  for (unsigned ndx(0); pDIDArray[ndx]; ndx++)
1082  result.insert(pDIDArray[ndx]);
1083 
1084  return result;
1085 }
ANCExtractorInitParams::field2CutoffLine
uint32_t field2CutoffLine
Definition: ntv2anc.cpp:85
regAncExtFID
@ regAncExtFID
Definition: ntv2publicinterface.h:5181
regAncExtField2AnalogCFilter
@ regAncExtField2AnalogCFilter
Definition: ntv2publicinterface.h:5193
regAncExtTotalFrameLines
@ regAncExtTotalFrameLines
Definition: ntv2publicinterface.h:5180
shiftEnableHancY
@ shiftEnableHancY
Definition: ntv2publicinterface.h:5104
maskInsTotalPixelsInLine
@ maskInsTotalPixelsInLine
Definition: ntv2publicinterface.h:5260
ANCExtractorInitParams
struct ANCExtractorInitParams ANCExtractorInitParams
SetAncExtField2StartAddr
static bool SetAncExtField2StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t addr)
Definition: ntv2anc.cpp:600
ANCInserterInitParams
struct ANCInserterInitParams ANCInserterInitParams
maskInsEnableVancY
@ maskInsEnableVancY
Definition: ntv2publicinterface.h:5236
SetAncExtFidHi
static bool SetAncExtFidHi(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:660
shiftInsEnablePktSplitSD
@ shiftInsEnablePktSplitSD
Definition: ntv2publicinterface.h:5249
maskInsDisableInserter
@ maskInsDisableInserter
Definition: ntv2publicinterface.h:5244
NTV2_NUM_STANDARDS
@ NTV2_NUM_STANDARDS
Definition: ntv2enums.h:171
regAncExtField1Status
@ regAncExtField1Status
Definition: ntv2publicinterface.h:5177
maskSetProgressive
@ maskSetProgressive
Definition: ntv2publicinterface.h:5111
regAncInsFrameLines
@ regAncInsFrameLines
Definition: ntv2publicinterface.h:5213
SetAncInsField2Bytes
static bool SetAncInsField2Bytes(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfBytes)
Definition: ntv2anc.cpp:174
kDeviceCanDoIP
@ kDeviceCanDoIP
True if device has SFP connectors.
Definition: ntv2devicefeatures.h:127
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:5223
ANCExtractorInitParams::field2SwitchLine
uint32_t field2SwitchLine
Definition: ntv2anc.cpp:90
SetAncExtField1AnalogStartLine
static bool SetAncExtField1AnalogStartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:665
shiftFIDLow
@ shiftFIDLow
Definition: ntv2publicinterface.h:5152
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:650
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:389
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:902
IsAncExtProgressive
static bool IsAncExtProgressive(CNTV2DriverInterface &inDevice, const UWord inSDIInput, bool &outIsProgressive)
Definition: ntv2anc.cpp:558
extractorInitParamsTable
const static ANCExtractorInitParams extractorInitParamsTable[NTV2_NUM_STANDARDS]
Definition: ntv2anc.cpp:100
maskDisableExtractor
@ maskDisableExtractor
Definition: ntv2publicinterface.h:5115
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
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:5258
CNTV2Card::IS_CHANNEL_INVALID
virtual bool IS_CHANNEL_INVALID(const NTV2Channel inChannel) const
Definition: ntv2card.cpp:256
CNTV2Card::GetStandard
virtual bool GetStandard(NTV2Standard &outValue, NTV2Channel inChannel=NTV2_CHANNEL1)
Definition: ntv2register.cpp:828
shiftInsField1Bytes
@ shiftInsField1Bytes
Definition: ntv2publicinterface.h:5231
maskField2StartLine
@ maskField2StartLine
Definition: ntv2publicinterface.h:5145
maskInsField1FirstActive
@ maskInsField1FirstActive
Definition: ntv2publicinterface.h:5254
maskInsField2FirstActive
@ maskInsField2FirstActive
Definition: ntv2publicinterface.h:5256
maskEnableVancC
@ maskEnableVancC
Definition: ntv2publicinterface.h:5109
maskTotalFrameLines
@ maskTotalFrameLines
Definition: ntv2publicinterface.h:5147
shiftField2AnalogStartLine
@ shiftField2AnalogStartLine
Definition: ntv2publicinterface.h:5164
maskInsExtendedMode
@ maskInsExtendedMode
Definition: ntv2publicinterface.h:5246
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:1209
shiftEnableVancY
@ shiftEnableVancY
Definition: ntv2publicinterface.h:5106
maskInsEnableHancC
@ maskInsEnableHancC
Definition: ntv2publicinterface.h:5238
kDeviceCanDoPlayback
@ kDeviceCanDoPlayback
Definition: ntv2devicefeatures.h:74
SetAncExtField2AnalogYFilter
static bool SetAncExtField2AnalogYFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:680
regAncExtField1EndAddress
@ regAncExtField1EndAddress
Definition: ntv2publicinterface.h:5172
regAncExtTotalStatus
@ regAncExtTotalStatus
Definition: ntv2publicinterface.h:5176
maskInsFieldIDHigh
@ maskInsFieldIDHigh
Definition: ntv2publicinterface.h:5264
CNTV2Card::AncSetFrameBufferSize
virtual bool AncSetFrameBufferSize(const ULWord inF1Size, const ULWord inF2Size)
Sets the capacity of the SDI ANC or HDMI AUX buffers in device frame memory. (Call NTV2DeviceCanDoCus...
Definition: ntv2anc.cpp:123
SetAncExtField1AnalogCFilter
static bool SetAncExtField1AnalogCFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:685
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:5161
GetAncField2Size
static bool GetAncField2Size(CNTV2Card &inDevice, ULWord &outFieldBytes)
Definition: ntv2anc.cpp:151
maskField1BytesIn
@ maskField1BytesIn
Definition: ntv2publicinterface.h:5131
SetAncExtField2StartLine
static bool SetAncExtField2StartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:645
regAncExtField1AnalogCFilter
@ regAncExtField1AnalogCFilter
Definition: ntv2publicinterface.h:5192
maskField2AnalogStartLine
@ maskField2AnalogStartLine
Definition: ntv2publicinterface.h:5163
maskEnableVancY
@ maskEnableVancY
Definition: ntv2publicinterface.h:5105
SetAncInsProgressive
static bool SetAncInsProgressive(CNTV2Card &inDevice, const UWord inSDIOutput, bool isProgressive)
Definition: ntv2anc.cpp:202
regAncExtFieldCutoffLine
@ regAncExtFieldCutoffLine
Definition: ntv2publicinterface.h:5175
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:949
shiftSyncro
@ shiftSyncro
Definition: ntv2publicinterface.h:5114
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:924
GetAncInsExtendedMode
static bool GetAncInsExtendedMode(CNTV2Card &inDevice, const UWord inSDIOutput, bool &extendedMode)
Definition: ntv2anc.cpp:292
NTV2DID
UByte NTV2DID
An ancillary Data IDentifier.
Definition: ntv2publicinterface.h:75
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:5263
maskField1CutoffLine
@ maskField1CutoffLine
Definition: ntv2publicinterface.h:5121
regAncInsPixelDelay
@ regAncInsPixelDelay
Definition: ntv2publicinterface.h:5210
ANCExtractorInitParams::field1CutoffLine
uint32_t field1CutoffLine
Definition: ntv2anc.cpp:83
maskInsField2Bytes
@ maskInsField2Bytes
Definition: ntv2publicinterface.h:5232
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:856
shiftInsDisableInserter
@ shiftInsDisableInserter
Definition: ntv2publicinterface.h:5245
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:5183
SetAncExtField1AnalogYFilter
static bool SetAncExtField1AnalogYFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:675
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::IsSupported
virtual bool IsSupported(const NTV2BoolParamID inParamID)
Definition: ntv2driverinterface.h:422
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:403
sAncInsBaseRegNum
static const ULWord sAncInsBaseRegNum[]
Definition: ntv2anc.cpp:20
CNTV2Card::IS_INPUT_SPIGOT_INVALID
virtual bool IS_INPUT_SPIGOT_INVALID(const UWord inInputSpigot)
Definition: ntv2card.cpp:277
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:5262
regAncInsField1StartAddr
@ regAncInsField1StartAddr
Definition: ntv2publicinterface.h:5208
shiftInsExtendedMode
@ shiftInsExtendedMode
Definition: ntv2publicinterface.h:5247
ANCInserterInitParams::field2SwitchLine
uint32_t field2SwitchLine
Definition: ntv2anc.cpp:52
SetAncExtField2AnalogStartLine
static bool SetAncExtField2AnalogStartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:670
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:974
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:810
regAncInsIpChannel
@ regAncInsIpChannel
Definition: ntv2publicinterface.h:5224
regAncExtField1AnalogYFilter
@ regAncExtField1AnalogYFilter
Definition: ntv2publicinterface.h:5190
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
CNTV2Card::IS_OUTPUT_SPIGOT_INVALID
virtual bool IS_OUTPUT_SPIGOT_INVALID(const UWord inOutputSpigot)
Definition: ntv2card.cpp:264
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:5248
ULWord
uint32_t ULWord
Definition: ajatypes.h:253
maskField1Overrun
@ maskField1Overrun
Definition: ntv2publicinterface.h:5135
regAncExtField2Status
@ regAncExtField2Status
Definition: ntv2publicinterface.h:5178
maskInsEnableVancC
@ maskInsEnableVancC
Definition: ntv2publicinterface.h:5240
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:1224
NTV2_IS_VALID_8MB_FRAMESIZE
#define NTV2_IS_VALID_8MB_FRAMESIZE(__x__)
Definition: ntv2enums.h:2084
SetAncExtField1CutoffLine
static bool SetAncExtField1CutoffLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:615
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:995
SetAncInsTotalLines
static bool SetAncInsTotalLines(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t numberOfLines)
Definition: ntv2anc.cpp:262
shiftField1CutoffLine
@ shiftField1CutoffLine
Definition: ntv2publicinterface.h:5122
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:5199
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:5143
GetAncExtField2StartAddr
static bool GetAncExtField2StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t &outAddr)
Definition: ntv2anc.cpp:595
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:5251
regAncInsRtpPayloadID
@ regAncInsRtpPayloadID
Definition: ntv2publicinterface.h:5222
shiftInsActivePixelsInLine
@ shiftInsActivePixelsInLine
Definition: ntv2publicinterface.h:5259
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:5110
maskEnableHancY
@ maskEnableHancY
Definition: ntv2publicinterface.h:5103
regAncInsBlankField1CLines
@ regAncInsBlankField1CLines
Definition: ntv2publicinterface.h:5218
GetAncInsStartAddrs
static bool GetAncInsStartAddrs(CNTV2Card &inDevice, const UWord inSDIOutput, uint64_t &outStartAddrF1, uint64_t &outStartAddrF2)
Definition: ntv2anc.cpp:212
regAncExtField2EndAddress
@ regAncExtField2EndAddress
Definition: ntv2publicinterface.h:5174
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:251
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:2061
ANCInsRegisters
ANCInsRegisters
Definition: ntv2publicinterface.h:5203
maskFIDHi
@ maskFIDHi
Definition: ntv2publicinterface.h:5149
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:28
EnableAncExtVancY
static bool EnableAncExtVancY(CNTV2Card &inDevice, const UWord inSDIInput, bool bEnable)
Definition: ntv2anc.cpp:538
regAncInsFieldBytes
@ regAncInsFieldBytes
Definition: ntv2publicinterface.h:5206
maskField2Overrun
@ maskField2Overrun
Definition: ntv2publicinterface.h:5141
regAncExtField1StartAddress
@ regAncExtField1StartAddress
Definition: ntv2publicinterface.h:5171
shiftTotalOverrun
@ shiftTotalOverrun
Definition: ntv2publicinterface.h:5130
CNTV2Card::AncExtractGetMaxNumFilterDIDs
static UWord AncExtractGetMaxNumFilterDIDs(void)
Definition: ntv2anc.cpp:1061
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:5234
SetAncExtSynchro
static bool SetAncExtSynchro(CNTV2Card &inDevice, const UWord inSDIInput)
Definition: ntv2anc.cpp:563
shiftInsSetProgressive
@ shiftInsSetProgressive
Definition: ntv2publicinterface.h:5243
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:5191
ntv2formatdescriptor.h
Declares the NTV2FormatDescriptor class.
ANCExtractorInitParams::field1AnalogYFilter
uint32_t field1AnalogYFilter
Definition: ntv2anc.cpp:93
shiftInsEnableVancC
@ shiftInsEnableVancC
Definition: ntv2publicinterface.h:5241
SetAncExtField2AnalogCFilter
static bool SetAncExtField2AnalogCFilter(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineFilter)
Definition: ntv2anc.cpp:690
NTV2DIDSetConstIter
NTV2DIDSet::const_iterator NTV2DIDSetConstIter
Handy const iterator to iterate over an NTV2DIDSet.
Definition: ntv2publicinterface.h:78
CNTV2Card::AncExtractIsProgressive
virtual bool AncExtractIsProgressive(const UWord inSDIInput, bool &outIsProgressive)
Answers whether or not the given SDI input's Anc extractor was configured with a progressive video fo...
Definition: ntv2anc.cpp:1044
SetAncInsField2StartAddr
static bool SetAncInsField2StartAddr(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t startAddr)
Definition: ntv2anc.cpp:227
regAncInsBlankCStartLine
@ regAncInsBlankCStartLine
Definition: ntv2publicinterface.h:5217
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:5112
SetAncExtField1StartAddr
static bool SetAncExtField1StartAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t addr)
Definition: ntv2anc.cpp:580
ANCInserterInitParams::fidHigh
uint32_t fidHigh
Definition: ntv2anc.cpp:50
kDeviceCanDoCapture
@ kDeviceCanDoCapture
True if device has any SDI, HDMI or analog video inputs.
Definition: ntv2devicefeatures.h:54
maskFIDLow
@ maskFIDLow
Definition: ntv2publicinterface.h:5151
shiftInsField2Bytes
@ shiftInsField2Bytes
Definition: ntv2publicinterface.h:5233
regAncInsField2StartAddr
@ regAncInsField2StartAddr
Definition: ntv2publicinterface.h:5209
EnableAncInsHancY
static bool EnableAncInsHancY(CNTV2Card &inDevice, const UWord inSDIOutput, bool bEnable)
Definition: ntv2anc.cpp:182
maskField2BytesIn
@ maskField2BytesIn
Definition: ntv2publicinterface.h:5137
regAncInsLinePixels
@ regAncInsLinePixels
Definition: ntv2publicinterface.h:5212
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:706
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:590
regAncExtAnalogStartLine
@ regAncExtAnalogStartLine
Definition: ntv2publicinterface.h:5189
SetAncInsRtpSSRC
static bool SetAncInsRtpSSRC(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t ssrc)
Definition: ntv2anc.cpp:282
shiftField2StartLine
@ shiftField2StartLine
Definition: ntv2publicinterface.h:5146
regAncInsBlankField2CLines
@ regAncInsBlankField2CLines
Definition: ntv2publicinterface.h:5219
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:610
ANCExtractorInitParams::field1StartLine
uint32_t field1StartLine
Definition: ntv2anc.cpp:82
GetAncExtField1EndAddr
static bool GetAncExtField1EndAddr(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t &outAddr)
Definition: ntv2anc.cpp:585
maskEnableHancC
@ maskEnableHancC
Definition: ntv2publicinterface.h:5107
regAncExtIgnorePktsReg_Last
@ regAncExtIgnorePktsReg_Last
Definition: ntv2publicinterface.h:5188
shiftInsVancDelay
@ shiftInsVancDelay
Definition: ntv2publicinterface.h:5253
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:793
maskInsSetProgressive
@ maskInsSetProgressive
Definition: ntv2publicinterface.h:5242
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:5170
shiftInsFieldIDHigh
@ shiftInsFieldIDHigh
Definition: ntv2publicinterface.h:5265
SetAncInsFidLow
static bool SetAncInsFidLow(CNTV2Card &inDevice, const UWord inSDIOutput, uint32_t lineNumber)
Definition: ntv2anc.cpp:272
shiftInsFieldIDLow
@ shiftInsFieldIDLow
Definition: ntv2publicinterface.h:5267
CNTV2DriverInterface::GetFrameBufferSize
virtual ULWord GetFrameBufferSize(void) const
Definition: ntv2driverinterface.h:384
SetAncExtField1StartLine
static bool SetAncExtField1StartLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:640
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:5117
SetAncExtFidLow
static bool SetAncExtFidLow(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:655
kDeviceCanDoCustomAnc
@ kDeviceCanDoCustomAnc
True if device has SDI ANC inserter/extractor firmware.
Definition: ntv2devicefeatures.h:56
GetAncExtExtendedMode
static bool GetAncExtExtendedMode(CNTV2Card &inDevice, const UWord inSDIInput, bool &extendedMode)
Definition: ntv2anc.cpp:695
shiftInsField2FirstActive
@ shiftInsField2FirstActive
Definition: ntv2publicinterface.h:5257
ANCExtractorInitParams
Definition: ntv2anc.cpp:80
maskSyncro
@ maskSyncro
Definition: ntv2publicinterface.h:5113
shiftInsEnableVancY
@ shiftInsEnableVancY
Definition: ntv2publicinterface.h:5237
maskTotalOverrun
@ maskTotalOverrun
Definition: ntv2publicinterface.h:5129
regAncInsFieldIDLines
@ regAncInsFieldIDLines
Definition: ntv2publicinterface.h:5214
maskInsField1Bytes
@ maskInsField1Bytes
Definition: ntv2publicinterface.h:5230
maskInsHancDelay
@ maskInsHancDelay
Definition: ntv2publicinterface.h:5250
regAncInsFieldBytesHigh
@ regAncInsFieldBytesHigh
Definition: ntv2publicinterface.h:5220
maskField2CutoffLine
@ maskField2CutoffLine
Definition: ntv2publicinterface.h:5123
SetAncExtField2CutoffLine
static bool SetAncExtField2CutoffLine(CNTV2Card &inDevice, const UWord inSDIInput, uint32_t lineNumber)
Definition: ntv2anc.cpp:620
ANCExtractorInitParams::fidLow
uint32_t fidLow
Definition: ntv2anc.cpp:87
shiftField2CutoffLine
@ shiftField2CutoffLine
Definition: ntv2publicinterface.h:5124
maskInsFieldIDLow
@ maskInsFieldIDLow
Definition: ntv2publicinterface.h:5266
GetAncExtField1Status
static bool GetAncExtField1Status(CNTV2DriverInterface &inDevice, const UWord inSDIInput, ULWord &outF1Status)
Definition: ntv2anc.cpp:625
regAncInsActiveStart
@ regAncInsActiveStart
Definition: ntv2publicinterface.h:5211
shiftEnableSDMux
@ shiftEnableSDMux
Definition: ntv2publicinterface.h:5118
NTV2DIDSet
std::set< UByte > NTV2DIDSet
A set of distinct NTV2DID values.
Definition: ntv2publicinterface.h:76
regAncExtField2StartAddress
@ regAncExtField2StartAddress
Definition: ntv2publicinterface.h:5173
regAncInsControl
@ regAncInsControl
Definition: ntv2publicinterface.h:5207
BIT
#define BIT(_x_)
Definition: ajatypes.h:561
shiftTotalFrameLines
@ shiftTotalFrameLines
Definition: ntv2publicinterface.h:5148
shiftInsTotalPixelsInLine
@ shiftInsTotalPixelsInLine
Definition: ntv2publicinterface.h:5261
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:772
CNTV2DriverInterface
I'm the base class that undergirds the platform-specific derived classes (from which CNTV2Card is ult...
Definition: ntv2driverinterface.h:60
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:575
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:5167
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:605
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:430
SetAncInsSDPacketSplit
static bool SetAncInsSDPacketSplit(CNTV2Card &inDevice, const UWord inSDIOutput, bool inEnable)
Definition: ntv2anc.cpp:207
shiftDisableExtractor
@ shiftDisableExtractor
Definition: ntv2publicinterface.h:5116
ANCInserterInitParams::fidLow
uint32_t fidLow
Definition: ntv2anc.cpp:49
shiftInsField1FirstActive
@ shiftInsField1FirstActive
Definition: ntv2publicinterface.h:5255
CNTV2Card::AncExtractGetDefaultDIDs
static NTV2DIDSet AncExtractGetDefaultDIDs(const bool inHDAudio=(!(0)))
Definition: ntv2anc.cpp:1068
shiftFIDHi
@ shiftFIDHi
Definition: ntv2publicinterface.h:5150
shiftInsEnableHancC
@ shiftInsEnableHancC
Definition: ntv2publicinterface.h:5239
IsAncExtOverrun
static bool IsAncExtOverrun(CNTV2DriverInterface &inDevice, const UWord inSDIInput, bool &outIsOverrun)
Definition: ntv2anc.cpp:635
NTV2_IS_PROGRESSIVE_STANDARD
#define NTV2_IS_PROGRESSIVE_STANDARD(__s__)
Definition: ntv2enums.h:177
shiftEnableHancC
@ shiftEnableHancC
Definition: ntv2publicinterface.h:5108
shiftInsEnableHancY
@ shiftInsEnableHancY
Definition: ntv2publicinterface.h:5235
maskInsVancDelay
@ maskInsVancDelay
Definition: ntv2publicinterface.h:5252
shiftField1AnalogStartLine
@ shiftField1AnalogStartLine
Definition: ntv2publicinterface.h:5162
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:1016
GetAncExtField2Status
static bool GetAncExtField2Status(CNTV2DriverInterface &inDevice, const UWord inSDIInput, ULWord &outF2Status)
Definition: ntv2anc.cpp:630
shiftField1StartLine
@ shiftField1StartLine
Definition: ntv2publicinterface.h:5144
regAncExtFieldVBLStartLine
@ regAncExtFieldVBLStartLine
Definition: ntv2publicinterface.h:5179
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:760