AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
ntv2capture8k.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #include "ntv2capture8k.h"
9 #include "ntv2devicescanner.h"
10 #include "ntv2utils.h"
11 #include "ntv2devicefeatures.h"
12 #include "ajabase/system/process.h"
13 
14 using namespace std;
15 
16 
18 
20  : mConsumerThread (AJAThread()),
21  mProducerThread (AJAThread()),
22  mDeviceID (DEVICE_ID_NOTFOUND),
23  mConfig (inConfig),
24  mVideoFormat (NTV2_FORMAT_UNKNOWN),
25  mSavedTaskMode (NTV2_DISABLE_TASKS),
26  mAudioSystem (inConfig.fWithAudio ? NTV2_AUDIOSYSTEM_1 : NTV2_AUDIOSYSTEM_INVALID),
27  mHostBuffers (),
28  mAVCircularBuffer (),
29  mGlobalQuit (false)
30 {
31 } // constructor
32 
33 
35 {
36  // Stop my capture and consumer threads, then destroy them...
37  Quit();
38 
39  // Unsubscribe from VBI events...
42 
43 } // destructor
44 
45 
47 {
48  // Set the global 'quit' flag, and wait for the threads to go inactive...
49  mGlobalQuit = true;
50 
51  while (mConsumerThread.Active())
52  AJATime::Sleep(10);
53 
54  while (mProducerThread.Active())
55  AJATime::Sleep(10);
56 
57  mDevice.DMABufferUnlockAll();
58 
59  // Restore some of the device's former state...
60  if (!mConfig.fDoMultiFormat)
61  {
63  mDevice.SetEveryFrameServices(mSavedTaskMode); // Restore prior task mode
64  }
65 
66 } // Quit
67 
68 
70 {
72 
73  // Open the device...
75  {cerr << "## ERROR: Device '" << mConfig.fDeviceSpec << "' not found" << endl; return AJA_STATUS_OPEN;}
76 
77  if (!mDevice.IsDeviceReady())
78  {cerr << "## ERROR: '" << mDevice.GetDisplayName() << "' not ready" << endl; return AJA_STATUS_INITIALIZE;}
79 
80  mDeviceID = mDevice.GetDeviceID(); // Keep the device ID handy, as it's used frequently
81  if (!mDevice.features().CanDoCapture())
82  {cerr << "## ERROR: '" << mDevice.GetDisplayName() << "' is playback-only" << endl; return AJA_STATUS_FEATURE;}
83  if (!mDevice.features().CanDo12gRouting())
84  {cerr << "## ERROR: '" << ::NTV2DeviceIDToString(mDeviceID,true) << "' lacks 12G SDI"; return AJA_STATUS_FEATURE;}
85 
86  if (!mDevice.features().CanDoFrameBufferFormat(mConfig.fPixelFormat))
87  { cerr << "## ERROR: '" << mDevice.GetDisplayName() << "' doesn't support '"
88  << ::NTV2FrameBufferFormatToString(mConfig.fPixelFormat, true) << "' ("
89  << ::NTV2FrameBufferFormatToString(mConfig.fPixelFormat, false) << ", " << DEC(mConfig.fPixelFormat) << ")" << endl;
91  }
92 
93  ULWord appSignature (0);
94  int32_t appPID (0);
95  mDevice.GetStreamingApplication (appSignature, appPID); // Who currently "owns" the device?
96  mDevice.GetEveryFrameServices(mSavedTaskMode); // Save the current device state
97  if (!mConfig.fDoMultiFormat)
98  {
100  {
101  cerr << "## ERROR: Unable to acquire '" << mDevice.GetDisplayName() << "' because another app (pid " << appPID << ") owns it" << endl;
102  return AJA_STATUS_BUSY; // Another app is using the device
103  }
104  mDevice.GetEveryFrameServices(mSavedTaskMode); // Save the current state before we change it
105  }
106  mDevice.SetEveryFrameServices(NTV2_OEM_TASKS); // Prevent interference from AJA retail services
107 
108  if (mDevice.features().CanDoMultiFormat())
109  mDevice.SetMultiFormatMode(mConfig.fDoMultiFormat);
110 
111  // This demo permits only the input channel/frameStore to be specified. Set the input source here...
112  const NTV2Channel origCh (mConfig.fInputChannel);
113  if (UWord(origCh) >= mDevice.features().GetNumFrameStores())
114  {
115  cerr << "## ERROR: No such Ch" << DEC(origCh+1) << " for '" << ::NTV2DeviceIDToString(mDeviceID,true) << "'" << endl;
116  return AJA_STATUS_BAD_PARAM;
117  }
118  // Must use Ch1/Ch3/Ch5/Ch7; Must use Ch1 for squares...
119  if ((origCh & 1) || (origCh && !mConfig.fDoTSIRouting))
120  {
121  cerr << "## ERROR: Cannot use Ch" << DEC(origCh+1) << " for '" << ::NTV2DeviceIDToString(mDeviceID,true) << "'" << endl;
122  return AJA_STATUS_BAD_PARAM;
123  }
124  mConfig.fInputSource = ::NTV2ChannelToInputSource(mConfig.fInputChannel); // Must use corresponding SDI inputs
125 
126  // Determine input connectors and frameStores to be used...
127  mActiveFrameStores = ::NTV2MakeChannelSet (mConfig.fInputChannel, mConfig.fDoTSIRouting ? 2 : 4);
128  mActiveSDIs = ::NTV2MakeChannelSet (mConfig.fInputChannel, mConfig.fDoTSIRouting ? (::IsRGBFormat(mConfig.fPixelFormat) ? 4 : 2) : 4);
129  // Note for TSI into YUV framestore: if input signal is QuadQuadHFR, we'll add 2 more SDIs (see below in SetupVideo)
130 
131  // Set up the video and audio...
132  status = SetupVideo();
133  if (AJA_FAILURE(status))
134  return status;
135 
136  if (mConfig.fWithAudio)
137  status = SetupAudio();
138  if (AJA_FAILURE(status))
139  return status;
140 
141  // Set up the circular buffers, the device signal routing, and both playout and capture AutoCirculate...
143  if (!RouteInputSignal())
144  return AJA_STATUS_FAIL;
145 
146  #if defined(_DEBUG)
147  cerr << mConfig << endl << "FrameStores: " << ::NTV2ChannelSetToStr(mActiveFrameStores) << endl
148  << "Inputs: " << ::NTV2ChannelSetToStr(mActiveSDIs) << endl;
149  if (mDevice.IsRemote())
150  cerr << "Device Description: " << mDevice.GetDescription() << endl << endl;
151  #endif // defined(_DEBUG)
152  return AJA_STATUS_SUCCESS;
153 
154 } // Init
155 
156 
158 {
159  // Enable the FrameStores we intend to use...
160  mDevice.EnableChannels (mActiveFrameStores, !mConfig.fDoMultiFormat); // Disable the rest if we own the device
161 
162  // Enable and subscribe to VBIs (critical on Windows)...
163  mDevice.EnableInputInterrupt(mConfig.fInputChannel);
166 
167  // If the device supports bi-directional SDI and the requested input is SDI,
168  // ensure the SDI connector(s) are configured to receive...
169  if (mDevice.features().HasBiDirectionalSDI() && NTV2_INPUT_SOURCE_IS_SDI(mConfig.fInputSource))
170  {
171  mDevice.SetSDITransmitEnable (mActiveSDIs, false); // Set SDI connector(s) to receive
172  mDevice.WaitForOutputVerticalInterrupt (NTV2_CHANNEL1, 10); // Wait 10 VBIs to allow reciever to lock
173  }
174 
175  // Determine the input video signal format...
176  mVideoFormat = mDevice.GetInputVideoFormat(mConfig.fInputSource);
177  if (mVideoFormat == NTV2_FORMAT_UNKNOWN)
178  {cerr << "## ERROR: No input signal or unknown format" << endl; return AJA_STATUS_NOINPUT;}
179  CNTV2DemoCommon::Get8KInputFormat(mVideoFormat); // Convert to 8K format
180  mFormatDesc = NTV2FormatDescriptor(mVideoFormat, mConfig.fPixelFormat);
181  if (mConfig.fDoTSIRouting && !::IsRGBFormat(mConfig.fPixelFormat) && NTV2_IS_QUAD_QUAD_HFR_VIDEO_FORMAT(mVideoFormat))
182  {
183  mActiveSDIs = ::NTV2MakeChannelSet (mConfig.fInputChannel, 4); // Add 2 more SDIs for TSI + YUV frameStores + QuadQuadHFR
184  mDevice.SetSDITransmitEnable (mActiveSDIs, false); // Set SDIs to receive
185  }
186 
187  // Setting SDI output clock timing/reference is unimportant for capture-only apps...
188  if (!mConfig.fDoMultiFormat) // ...if not sharing the device...
189  mDevice.SetReference(NTV2_REFERENCE_FREERUN); // ...let it free-run
190 
191  // Set the device video format to whatever was detected at the input(s)...
192  mDevice.SetVideoFormat (mVideoFormat, false, false, mConfig.fInputChannel);
193  mDevice.SetVANCMode (mActiveFrameStores, NTV2_VANCMODE_OFF); // Disable VANC
194  mDevice.SetQuadQuadFrameEnable (true, mConfig.fInputChannel); // UHD2/8K requires QuadQuad mode
195  mDevice.SetQuadQuadSquaresEnable (!mConfig.fDoTSIRouting, mConfig.fInputChannel); // Set QuadQuadSquares mode if not TSI
196 
197  // Set the frame buffer pixel format for the FrameStore(s) to be used on the device...
198  mDevice.SetFrameBufferFormat (mActiveFrameStores, mConfig.fPixelFormat);
199  return AJA_STATUS_SUCCESS;
200 
201 } // SetupVideo
202 
203 
205 {
206  // In multiformat mode, base the audio system on the channel...
207  if (mConfig.fDoMultiFormat)
208  if (mDevice.features().GetNumAudioSystems() > 1)
209  if (UWord(mConfig.fInputChannel) < mDevice.features().GetNumAudioSystems())
210  mAudioSystem = ::NTV2ChannelToAudioSystem(mConfig.fInputChannel);
211 
212  NTV2AudioSystemSet audSystems (::NTV2MakeAudioSystemSet (mAudioSystem, 1));
213  CNTV2DemoCommon::ConfigureAudioSystems (mDevice, mConfig, audSystems);
214  return AJA_STATUS_SUCCESS;
215 
216 } // SetupAudio
217 
218 
220 {
221  // Let my circular buffer know when it's time to quit...
222  mAVCircularBuffer.SetAbortFlag(&mGlobalQuit);
223 
224  ULWord F1AncSize(0), F2AncSize(0);
225  if (mConfig.fWithAnc)
226  { // Use the max anc size stipulated by the AncFieldOffset VReg values...
227  ULWord F1OffsetFromEnd(0), F2OffsetFromEnd(0);
228  mDevice.ReadRegister(kVRegAncField1Offset, F1OffsetFromEnd); // # bytes from end of 8MB/16MB frame
229  mDevice.ReadRegister(kVRegAncField2Offset, F2OffsetFromEnd); // # bytes from end of 8MB/16MB frame
230  // Based on the offsets, calculate the max anc capacity
231  F1AncSize = F2OffsetFromEnd > F1OffsetFromEnd ? 0 : F1OffsetFromEnd - F2OffsetFromEnd;
232  F2AncSize = F2OffsetFromEnd > F1OffsetFromEnd ? F2OffsetFromEnd - F1OffsetFromEnd : F2OffsetFromEnd;
233  }
234 
235  // Allocate and add each in-host NTV2FrameData to my circular buffer member variable...
236  const size_t audioBufferSize (NTV2_AUDIOSIZE_MAX);
237  mHostBuffers.reserve(size_t(CIRCULAR_BUFFER_SIZE));
238  cout << "## NOTE: Buffer size: vid=" << mFormatDesc.GetVideoWriteSize() << " aud=" << audioBufferSize << " anc=" << F1AncSize << endl;
239  while (mHostBuffers.size() < size_t(CIRCULAR_BUFFER_SIZE))
240  {
241  mHostBuffers.push_back(NTV2FrameData());
242  NTV2FrameData & frameData(mHostBuffers.back());
243  frameData.fVideoBuffer.Allocate(mFormatDesc.GetVideoWriteSize());
244  frameData.fAudioBuffer.Allocate(NTV2_IS_VALID_AUDIO_SYSTEM(mAudioSystem) ? audioBufferSize : 0);
245  frameData.fAncBuffer.Allocate(F1AncSize);
246  frameData.fAncBuffer2.Allocate(F2AncSize);
247  mAVCircularBuffer.Add(&frameData);
248 
249  // 8K requires page-locked buffers
250  if (frameData.fVideoBuffer)
251  mDevice.DMABufferLock(frameData.fVideoBuffer, true);
252  if (frameData.fAudioBuffer)
253  mDevice.DMABufferLock(frameData.fAudioBuffer, true);
254  if (frameData.fAncBuffer)
255  mDevice.DMABufferLock(frameData.fAncBuffer, true);
256  } // for each NTV2FrameData
257 
258 } // SetupHostBuffers
259 
260 
262 {
263  NTV2XptConnections connections;
264  return CNTV2DemoCommon::GetInputRouting8K (connections, mConfig, mVideoFormat)
265  && mDevice.ApplySignalRoute(connections, !mConfig.fDoMultiFormat);
266 
267 } // RouteInputSignal
268 
269 
271 {
272  // Start the playout and capture threads...
275  return AJA_STATUS_SUCCESS;
276 
277 } // Run
278 
279 
281 
282 // This starts the consumer thread
284 {
285  // Create and start the consumer thread...
286  mConsumerThread.Attach(ConsumerThreadStatic, this);
287  mConsumerThread.SetPriority(AJA_ThreadPriority_High);
288  mConsumerThread.Start();
289 
290 } // StartConsumerThread
291 
292 
293 // The consumer thread function
294 void NTV2Capture8K::ConsumerThreadStatic (AJAThread * pThread, void * pContext) // static
295 {
296  (void) pThread;
297 
298  // Grab the NTV2Capture instance pointer from the pContext parameter,
299  // then call its ConsumeFrames method...
300  NTV2Capture8K * pApp (reinterpret_cast<NTV2Capture8K*>(pContext));
301  pApp->ConsumeFrames();
302 
303 } // ConsumerThreadStatic
304 
305 
307 {
308  CAPNOTE("Thread started");
309  while (!mGlobalQuit)
310  {
311  // Wait for the next frame to become ready to "consume"...
312  NTV2FrameData * pFrameData(mAVCircularBuffer.StartConsumeNextBuffer());
313  if (pFrameData)
314  {
315  // Do something useful with the frame data...
316  // . . . . . . . . . . . .
317  // . . . . . . . . . . . .
318  // . . . . . . . . . . . .
319 
320  // Now release and recycle the buffer...
321  mAVCircularBuffer.EndConsumeNextBuffer();
322  } // if pFrameData
323  } // loop til quit signaled
324  CAPNOTE("Thread completed, will exit");
325 
326 } // ConsumeFrames
327 
328 
330 
331 // This starts the capture (producer) thread
333 {
334  // Create and start the capture thread...
335  mProducerThread.Attach(ProducerThreadStatic, this);
336  mProducerThread.SetPriority(AJA_ThreadPriority_High);
337  mProducerThread.Start();
338 
339 } // StartProducerThread
340 
341 
342 // The capture thread function
343 void NTV2Capture8K::ProducerThreadStatic (AJAThread * pThread, void * pContext) // static
344 {
345  (void) pThread;
346 
347  // Grab the NTV2Capture instance pointer from the pContext parameter,
348  // then call its CaptureFrames method...
349  NTV2Capture8K * pApp (reinterpret_cast<NTV2Capture8K*>(pContext));
350  pApp->CaptureFrames();
351 
352 } // ProducerThreadStatic
353 
354 
356 {
357  AUTOCIRCULATE_TRANSFER inputXfer; // AutoCirculate input transfer info
358  CAPNOTE("Thread started");
359 
360  // Tell capture AutoCirculate to use frame buffers 0 thru 6 (7 frames) on the device...
361  mConfig.fFrames.setExactRange (0, 6);
362  mDevice.AutoCirculateStop(mActiveFrameStores); // Just in case
363  if (!mDevice.AutoCirculateInitForInput (mConfig.fInputChannel, // primary channel
364  mConfig.fFrames.count(), // numFrames (zero if exact range)
365  mAudioSystem, // audio system (if any)
366  AUTOCIRCULATE_WITH_RP188 | AUTOCIRCULATE_WITH_ANC, // AutoCirculate options
367  1, // numChannels to gang
368  mConfig.fFrames.firstFrame(), mConfig.fFrames.lastFrame()))
369  mGlobalQuit = true;
370  if (!mGlobalQuit && !mDevice.AutoCirculateStart(mConfig.fInputChannel))
371  mGlobalQuit = true;
372 
373  // Ingest frames til Quit signaled...
374  while (!mGlobalQuit)
375  {
376  AUTOCIRCULATE_STATUS acStatus;
377  mDevice.AutoCirculateGetStatus (mConfig.fInputChannel, acStatus);
378 
379  if (acStatus.IsRunning() && acStatus.HasAvailableInputFrame())
380  {
381  // At this point, there's at least one fully-formed frame available in the device's
382  // frame buffer to transfer to the host. Reserve an NTV2FrameData to "produce", and
383  // use it in the next transfer from the device...
384  NTV2FrameData * pFrameData (mAVCircularBuffer.StartProduceNextBuffer());
385  if (!pFrameData)
386  continue;
387 
388  NTV2FrameData & frameData (*pFrameData);
389  inputXfer.SetVideoBuffer (frameData.VideoBuffer(), frameData.VideoBufferSize());
390  if (acStatus.WithAudio())
391  inputXfer.SetAudioBuffer (frameData.AudioBuffer(), frameData.AudioBufferSize());
392  if (acStatus.WithCustomAnc())
393  inputXfer.SetAncBuffers (frameData.AncBuffer(), frameData.AncBufferSize(),
394  frameData.AncBuffer2(), frameData.AncBuffer2Size());
395 
396  // Transfer video/audio/anc from the device into our host buffers...
397  mDevice.AutoCirculateTransfer (mConfig.fInputChannel, inputXfer);
398 
399  // Remember the actual amount of audio captured...
400  if (acStatus.WithAudio())
401  frameData.fNumAudioBytes = inputXfer.GetCapturedAudioByteCount();
402 
403  // Grab all valid timecodes that were captured...
404  inputXfer.GetInputTimeCodes (frameData.fTimecodes, mConfig.fInputChannel, /*ValidOnly*/ true);
405 
406  // Signal that we're done "producing" the frame, making it available for future "consumption"...
407  mAVCircularBuffer.EndProduceNextBuffer();
408  } // if A/C running and frame(s) are available for transfer
409  else
410  {
411  // Either AutoCirculate is not running, or there were no frames available on the device to transfer.
412  // Rather than waste CPU cycles spinning, waiting until a frame becomes available, it's far more
413  // efficient to wait for the next input vertical interrupt event to get signaled...
415  }
416  } // loop til quit signaled
417 
418  // Stop AutoCirculate...
419  mDevice.AutoCirculateStop (mConfig.fInputChannel);
420  CAPNOTE("Thread completed, will exit");
421 
422 } // CaptureFrames
423 
424 
425 void NTV2Capture8K::GetACStatus (ULWord & outGoodFrames, ULWord & outDroppedFrames, ULWord & outBufferLevel)
426 {
427  AUTOCIRCULATE_STATUS status;
428  mDevice.AutoCirculateGetStatus(mConfig.fInputChannel, status);
429  outGoodFrames = status.GetProcessedFrameCount();
430  outDroppedFrames = status.GetDroppedFrameCount();
431  outBufferLevel = status.GetBufferLevel();
432 }
CNTV2Card::SubscribeOutputVerticalEvent
virtual bool SubscribeOutputVerticalEvent(const NTV2Channel inChannel)
Causes me to be notified when an output vertical blanking interrupt is generated for the given output...
Definition: ntv2subscriptions.cpp:25
CNTV2Card::SetVANCMode
virtual bool SetVANCMode(const NTV2VANCMode inVancMode, const NTV2Channel inChannel=NTV2_CHANNEL1)
Sets the VANC mode for the given FrameStore.
Definition: ntv2register.cpp:2640
CaptureConfig::fDoMultiFormat
bool fDoMultiFormat
If true, use multi-format/multi-channel mode, if device supports it; otherwise normal mode.
Definition: ntv2democommon.h:285
NTV2ChannelSetToStr
std::string NTV2ChannelSetToStr(const NTV2ChannelSet &inObj, const bool inCompact=true)
Definition: ntv2publicinterface.cpp:3372
CNTV2Card::SetMultiFormatMode
virtual bool SetMultiFormatMode(const bool inEnable)
Enables or disables multi-format (per channel) device operation. If enabled, each device channel can ...
Definition: ntv2register.cpp:4379
NTV2ChannelToInputSource
NTV2InputSource NTV2ChannelToInputSource(const NTV2Channel inChannel, const NTV2IOKinds inKinds=NTV2_IOKINDS_SDI)
Definition: ntv2utils.cpp:5192
NTV2FormatDescriptor::GetVideoWriteSize
ULWord GetVideoWriteSize(ULWord inPageSize=4096UL) const
Definition: ntv2formatdescriptor.cpp:866
NTV2Capture8K::RouteInputSignal
virtual bool RouteInputSignal(void)
Sets up device routing for capture.
Definition: ntv2capture8k.cpp:261
AUTOCIRCULATE_TRANSFER::GetCapturedAudioByteCount
ULWord GetCapturedAudioByteCount(void) const
Definition: ntv2publicinterface.h:8369
NTV2Capture8K::GetACStatus
virtual void GetACStatus(ULWord &outGoodFrames, ULWord &outDroppedFrames, ULWord &outBufferLevel)
Provides status information about my input (capture) process.
Definition: ntv2capture8k.cpp:425
AJA_ThreadPriority_High
@ AJA_ThreadPriority_High
Definition: thread.h:44
NTV2ACFrameRange::firstFrame
UWord firstFrame(void) const
Definition: ntv2utils.h:983
CNTV2Card::SetVideoFormat
virtual bool SetVideoFormat(const NTV2VideoFormat inVideoFormat, const bool inIsAJARetail=(!(0)), const bool inKeepVancSettings=(0), const NTV2Channel inChannel=NTV2_CHANNEL1)
Configures the AJA device to handle a specific video format.
Definition: ntv2register.cpp:204
ntv2devicefeatures.h
Declares device capability functions.
CNTV2MacDriverInterface::ReadRegister
virtual bool ReadRegister(const ULWord inRegNum, ULWord &outValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Reads all or part of the 32-bit contents of a specific register (real or virtual) on the AJA device....
Definition: ntv2macdriverinterface.cpp:389
NTV2FormatDescriptor
Describes a video frame for a given video standard or format and pixel format, including the total nu...
Definition: ntv2formatdescriptor.h:41
NTV2FrameData
I encapsulate the video, audio and anc host buffers used in the AutoCirculate demos....
Definition: ntv2democommon.h:79
AUTOCIRCULATE_TRANSFER::SetAudioBuffer
bool SetAudioBuffer(ULWord *pInAudioBuffer, const ULWord inAudioByteCount)
Sets my audio buffer for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
Definition: ntv2publicinterface.cpp:2737
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
Definition: ntv2enums.h:1334
AJA_STATUS_SUCCESS
@ AJA_STATUS_SUCCESS
Definition: types.h:381
AJAThread::Attach
virtual AJAStatus Attach(AJAThreadFunction *pThreadFunction, void *pUserContext)
Definition: thread.cpp:169
NTV2_IS_QUAD_QUAD_HFR_VIDEO_FORMAT
#define NTV2_IS_QUAD_QUAD_HFR_VIDEO_FORMAT(__f__)
Definition: ntv2enums.h:808
CNTV2Card::WaitForInputVerticalInterrupt
virtual bool WaitForInputVerticalInterrupt(const NTV2Channel inChannel=NTV2_CHANNEL1, UWord inRepeatCount=1)
Efficiently sleeps the calling thread/process until the next one or more field (interlaced video) or ...
Definition: ntv2subscriptions.cpp:149
CNTV2Card::EnableInputInterrupt
virtual bool EnableInputInterrupt(const NTV2Channel channel=NTV2_CHANNEL1)
Allows the CNTV2Card instance to wait for and respond to input vertical blanking interrupts originati...
Definition: ntv2interrupts.cpp:23
NTV2FrameData::AncBuffer2
NTV2Buffer & AncBuffer2(void)
Definition: ntv2democommon.h:117
NTV2Capture8K::Quit
virtual void Quit(void)
Gracefully stops me from running.
Definition: ntv2capture8k.cpp:46
AJA_STATUS_BUSY
@ AJA_STATUS_BUSY
Definition: types.h:391
CNTV2DeviceScanner::GetFirstDeviceFromArgument
static bool GetFirstDeviceFromArgument(const std::string &inArgument, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the AJA device that matches a command li...
Definition: ntv2devicescanner.cpp:374
AUTOCIRCULATE_STATUS::GetProcessedFrameCount
ULWord GetProcessedFrameCount(void) const
Definition: ntv2publicinterface.h:7249
NTV2_AUDIOSYSTEM_1
@ NTV2_AUDIOSYSTEM_1
This identifies the first Audio System.
Definition: ntv2enums.h:3850
AJACircularBuffer::StartConsumeNextBuffer
FrameDataPtr StartConsumeNextBuffer(void)
The thread that's responsible for processing incoming frames – the consumer – calls this function to ...
Definition: circularbuffer.h:153
CaptureConfig::fPixelFormat
NTV2PixelFormat fPixelFormat
Pixel format to use.
Definition: ntv2democommon.h:282
NTV2ACFrameRange::count
UWord count(void) const
Definition: ntv2utils.h:982
NTV2Capture8K::NTV2Capture8K
NTV2Capture8K(const CaptureConfig &inConfig)
Constructs me using the given settings.
Definition: ntv2capture8k.cpp:19
AUTOCIRCULATE_STATUS::GetBufferLevel
ULWord GetBufferLevel(void) const
Definition: ntv2publicinterface.h:7254
CNTV2Card::AutoCirculateInitForInput
virtual bool AutoCirculateInitForInput(const NTV2Channel inChannel, const UWord inFrameCount=7, const NTV2AudioSystem inAudioSystem=NTV2_AUDIOSYSTEM_INVALID, const ULWord inOptionFlags=0, const UByte inNumChannels=1, const UWord inStartFrameNumber=0, const UWord inEndFrameNumber=0)
Prepares for subsequent AutoCirculate ingest, designating a contiguous block of frame buffers on the ...
Definition: ntv2autocirculate.cpp:221
CNTV2MacDriverInterface::ReleaseStreamForApplication
virtual bool ReleaseStreamForApplication(ULWord inApplicationType, int32_t inProcessID)
Releases exclusive use of the AJA device for the given process, permitting other processes to acquire...
Definition: ntv2macdriverinterface.cpp:516
NTV2FrameData::fAncBuffer2
NTV2Buffer fAncBuffer2
Additional "F2" host anc buffer.
Definition: ntv2democommon.h:86
AJACircularBuffer::EndProduceNextBuffer
void EndProduceNextBuffer(void)
The producer thread calls this function to signal that it has finished populating the frame it obtain...
Definition: circularbuffer.h:259
NTV2Buffer::Allocate
bool Allocate(const size_t inByteCount, const bool inPageAligned=false)
Allocates (or re-allocates) my user-space storage using the given byte count. I assume full responsib...
Definition: ntv2publicinterface.cpp:1647
NTV2Capture8K::Init
virtual AJAStatus Init(void)
Initializes me and prepares me to Run.
Definition: ntv2capture8k.cpp:69
CNTV2Card::ApplySignalRoute
virtual bool ApplySignalRoute(const CNTV2SignalRouter &inRouter, const bool inReplace=(0))
Applies the given routing table to the AJA device.
Definition: ntv2regroute.cpp:242
AUTOCIRCULATE_TRANSFER::SetAncBuffers
bool SetAncBuffers(ULWord *pInANCBuffer, const ULWord inANCByteCount, ULWord *pInANCF2Buffer=NULL, const ULWord inANCF2ByteCount=0)
Sets my ancillary data buffers for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
Definition: ntv2publicinterface.cpp:2745
NTV2FrameData::fAncBuffer
NTV2Buffer fAncBuffer
Host ancillary data buffer.
Definition: ntv2democommon.h:85
NTV2_CHANNEL1
@ NTV2_CHANNEL1
Specifies channel or Frame Store 1 (or the first item).
Definition: ntv2enums.h:1336
CNTV2Card::SetFrameBufferFormat
virtual bool SetFrameBufferFormat(NTV2Channel inChannel, NTV2FrameBufferFormat inNewFormat, bool inIsAJARetail=(!(0)), NTV2HDRXferChars inXferChars=NTV2_VPID_TC_SDR_TV, NTV2HDRColorimetry inColorimetry=NTV2_VPID_Color_Rec709, NTV2HDRLuminance inLuminance=NTV2_VPID_Luminance_YCbCr)
Sets the frame buffer format for the given FrameStore on the AJA device.
Definition: ntv2register.cpp:1812
CNTV2Card::SetSDITransmitEnable
virtual bool SetSDITransmitEnable(const NTV2Channel inChannel, const bool inEnable)
Sets the specified bidirectional SDI connector to act as an input or an output.
Definition: ntv2register.cpp:3796
AUTOCIRCULATE_STATUS::WithAudio
bool WithAudio(void) const
Definition: ntv2publicinterface.h:7324
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::void
j template void())
Definition: json.hpp:4893
CaptureConfig::fWithAnc
bool fWithAnc
If true, also capture Anc.
Definition: ntv2democommon.h:286
NTV2FrameData::VideoBuffer
NTV2Buffer & VideoBuffer(void)
Definition: ntv2democommon.h:106
kVRegAncField2Offset
@ kVRegAncField2Offset
Anc Field2 byte offset from end of frame buffer (GUMP on all boards except RTP for SMPTE2022/IP)
Definition: ntv2virtualregisters.h:336
CNTV2Card::DMABufferLock
virtual bool DMABufferLock(const NTV2Buffer &inBuffer, bool inMap=(0), bool inRDMA=(0))
Page-locks the given host buffer to reduce transfer time and CPU usage of DMA transfers.
Definition: ntv2dma.cpp:429
NTV2MakeAudioSystemSet
NTV2AudioSystemSet NTV2MakeAudioSystemSet(const NTV2AudioSystem inFirstAudioSystem, const UWord inCount=1)
Definition: ntv2publicinterface.cpp:3433
CNTV2Card::features
virtual class DeviceCapabilities & features(void)
Definition: ntv2card.h:141
AJAThread
Definition: thread.h:69
AUTOCIRCULATE_WITH_ANC
#define AUTOCIRCULATE_WITH_ANC
Use this to AutoCirculate with ancillary data.
Definition: ntv2publicinterface.h:5528
ntv2capture8k.h
Declares the NTV2Capture class.
AJAThread::Active
virtual bool Active()
Definition: thread.cpp:116
CNTV2Card::DMABufferUnlockAll
virtual bool DMABufferUnlockAll()
Unlocks all previously-locked buffers used for DMA transfers.
Definition: ntv2dma.cpp:457
CNTV2Card::GetDisplayName
virtual std::string GetDisplayName(void)
Answers with this device's display name.
Definition: ntv2card.cpp:86
AJA_STATUS_NOINPUT
@ AJA_STATUS_NOINPUT
Definition: types.h:400
AJAStatus
AJAStatus
Definition: types.h:378
process.h
Declares the AJAProcess class.
NTV2Capture8K::ConsumerThreadStatic
static void ConsumerThreadStatic(AJAThread *pThread, void *pContext)
This is the consumer thread's static callback function that gets called when the consumer thread runs...
Definition: ntv2capture8k.cpp:294
AJATime::Sleep
static void Sleep(const int32_t inMilliseconds)
Suspends execution of the current thread for a given number of milliseconds.
Definition: systemtime.cpp:284
AJACircularBuffer::Add
AJAStatus Add(FrameDataPtr pInFrameData)
Appends a new frame buffer to me, increasing my frame storage capacity by one frame.
Definition: circularbuffer.h:92
NTV2_VANCMODE_OFF
@ NTV2_VANCMODE_OFF
This identifies the mode in which there are no VANC lines in the frame buffer.
Definition: ntv2enums.h:3752
AJA_STATUS_FEATURE
@ AJA_STATUS_FEATURE
Definition: types.h:393
AJA_STATUS_FAIL
@ AJA_STATUS_FAIL
Definition: types.h:382
CNTV2DemoCommon::ConfigureAudioSystems
static bool ConfigureAudioSystems(CNTV2Card &inDevice, const CaptureConfig &inConfig, const NTV2AudioSystemSet inAudioSystems)
Configures capture audio systems.
Definition: ntv2democommon.cpp:1570
ULWord
uint32_t ULWord
Definition: ajatypes.h:255
CNTV2Card::EnableChannels
virtual bool EnableChannels(const NTV2ChannelSet &inChannels, const bool inDisableOthers=(0))
Enables the given FrameStore(s).
Definition: ntv2register.cpp:2107
CNTV2Card::GetDescription
virtual std::string GetDescription(void) const
Definition: ntv2card.cpp:124
NTV2FrameData::fVideoBuffer
NTV2Buffer fVideoBuffer
Host video buffer.
Definition: ntv2democommon.h:82
AUTOCIRCULATE_STATUS
This is returned from the CNTV2Card::AutoCirculateGetStatus function.
Definition: ntv2publicinterface.h:7193
ntv2devicescanner.h
Declares the CNTV2DeviceScanner class.
CaptureConfig
This class is used to configure an NTV2Capture instance.
Definition: ntv2democommon.h:274
NTV2FrameData::VideoBufferSize
ULWord VideoBufferSize(void) const
Definition: ntv2democommon.h:107
kVRegAncField1Offset
@ kVRegAncField1Offset
Anc Field1 byte offset from end of frame buffer (GUMP on all boards except RTP for SMPTE2022/IP)
Definition: ntv2virtualregisters.h:335
CNTV2MacDriverInterface::GetStreamingApplication
virtual bool GetStreamingApplication(ULWord &outAppType, int32_t &outProcessID)
Answers with the four-CC type and process ID of the application that currently "owns" the AJA device ...
Definition: ntv2macdriverinterface.cpp:651
NTV2DeviceIDToString
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:4673
NTV2AudioSystemSet
std::set< NTV2AudioSystem > NTV2AudioSystemSet
A set of distinct NTV2AudioSystem values. New in SDK 16.2.
Definition: ntv2publicinterface.h:3900
CNTV2Card::UnsubscribeInputVerticalEvent
virtual bool UnsubscribeInputVerticalEvent(const NTV2Channel inChannel=NTV2_CHANNEL1)
Unregisters me so I'm no longer notified when an input VBI is signaled on the given input channel.
Definition: ntv2subscriptions.cpp:75
NTV2Capture8K
Instances of me capture frames in real time from a video signal provided to an input of an AJA device...
Definition: ntv2capture8k.h:19
AJAProcess::GetPid
static uint64_t GetPid()
Definition: process.cpp:35
NTV2FrameData::AncBufferSize
ULWord AncBufferSize(void) const
Definition: ntv2democommon.h:114
NTV2Capture8K::ProducerThreadStatic
static void ProducerThreadStatic(AJAThread *pThread, void *pContext)
This is the capture thread's static callback function that gets called when the capture thread runs....
Definition: ntv2capture8k.cpp:343
CNTV2Card::UnsubscribeOutputVerticalEvent
virtual bool UnsubscribeOutputVerticalEvent(const NTV2Channel inChannel)
Unregisters me so I'm no longer notified when an output VBI is signaled on the given output channel.
Definition: ntv2subscriptions.cpp:61
UWord
uint16_t UWord
Definition: ajatypes.h:253
AJACircularBuffer::StartProduceNextBuffer
FrameDataPtr StartProduceNextBuffer(void)
The thread that's responsible for providing frames – the producer – calls this function to populate t...
Definition: circularbuffer.h:109
CNTV2Card::AutoCirculateGetStatus
virtual bool AutoCirculateGetStatus(const NTV2Channel inChannel, AUTOCIRCULATE_STATUS &outStatus)
Returns the current AutoCirculate status for the given channel.
Definition: ntv2autocirculate.cpp:646
NTV2FrameData::AudioBufferSize
ULWord AudioBufferSize(void) const
Definition: ntv2democommon.h:110
NTV2FrameData::AncBuffer2Size
ULWord AncBuffer2Size(void) const
Definition: ntv2democommon.h:118
NTV2FrameData::fNumAudioBytes
ULWord fNumAudioBytes
Actual number of captured audio bytes.
Definition: ntv2democommon.h:88
NTV2_REFERENCE_FREERUN
@ NTV2_REFERENCE_FREERUN
Specifies the device's internal clock.
Definition: ntv2enums.h:1434
AUTOCIRCULATE_TRANSFER
This object specifies the information that will be transferred to or from the AJA device in the CNTV2...
Definition: ntv2publicinterface.h:8002
CaptureConfig::fDeviceSpec
std::string fDeviceSpec
The AJA device to use.
Definition: ntv2democommon.h:277
ntv2utils.h
Declares numerous NTV2 utility functions.
NTV2FrameData::AudioBuffer
NTV2Buffer & AudioBuffer(void)
Definition: ntv2democommon.h:109
AUTOCIRCULATE_TRANSFER::SetVideoBuffer
bool SetVideoBuffer(ULWord *pInVideoBuffer, const ULWord inVideoByteCount)
Sets my video buffer for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
Definition: ntv2publicinterface.cpp:2729
NTV2Capture8K::Run
virtual AJAStatus Run(void)
Runs me.
Definition: ntv2capture8k.cpp:270
NTV2Capture8K::SetupAudio
virtual AJAStatus SetupAudio(void)
Sets up everything I need for capturing audio.
Definition: ntv2capture8k.cpp:204
CNTV2DriverInterface::IsDeviceReady
virtual bool IsDeviceReady(const bool inCheckValid=(0))
Definition: ntv2driverinterface.cpp:1312
kDemoAppSignature
static const ULWord kDemoAppSignature((((uint32_t)( 'D'))<< 24)|(((uint32_t)( 'E'))<< 16)|(((uint32_t)( 'M'))<< 8)|(((uint32_t)( 'O'))<< 0))
AJACircularBuffer::EndConsumeNextBuffer
void EndConsumeNextBuffer(void)
The consumer thread calls this function to signal that it has finished processing the frame it obtain...
Definition: circularbuffer.h:266
CNTV2Card::GetInputVideoFormat
virtual NTV2VideoFormat GetInputVideoFormat(const NTV2InputSource inVideoSource=NTV2_INPUTSOURCE_SDI1, const bool inIsProgressive=(0))
Returns the video format of the signal that is present on the given input source.
Definition: ntv2register.cpp:3365
NTV2_AUDIOSIZE_MAX
#define NTV2_AUDIOSIZE_MAX
Definition: ntv2democommon.h:46
CNTV2Card::SetEveryFrameServices
virtual bool SetEveryFrameServices(const NTV2EveryFrameTaskMode inMode)
Sets the device's task mode.
Definition: ntv2register.cpp:179
AJA_STATUS_UNSUPPORTED
@ AJA_STATUS_UNSUPPORTED
Definition: types.h:394
NTV2Capture8K::SetupHostBuffers
virtual void SetupHostBuffers(void)
Sets up my circular buffers.
Definition: ntv2capture8k.cpp:219
NTV2Capture8K::CaptureFrames
virtual void CaptureFrames(void)
Repeatedly captures frames using AutoCirculate (until global quit flag set).
Definition: ntv2capture8k.cpp:355
CaptureConfig::fFrames
NTV2ACFrameRange fFrames
AutoCirculate frame count or range.
Definition: ntv2democommon.h:281
NTV2_DISABLE_TASKS
@ NTV2_DISABLE_TASKS
0: Disabled: Device is completely configured by controlling application(s) – no driver involvement.
Definition: ntv2publicinterface.h:4290
CaptureConfig::fInputChannel
NTV2Channel fInputChannel
The device channel to use.
Definition: ntv2democommon.h:279
NTV2_FORMAT_UNKNOWN
@ NTV2_FORMAT_UNKNOWN
Definition: ntv2enums.h:521
NTV2FrameData::fAudioBuffer
NTV2Buffer fAudioBuffer
Host audio buffer.
Definition: ntv2democommon.h:84
CNTV2DemoCommon::GetInputRouting8K
static bool GetInputRouting8K(NTV2XptConnections &outConnections, const CaptureConfig &inConfig, const NTV2VideoFormat inVidFormat, const NTV2DeviceID inDevID=DEVICE_ID_INVALID, const bool isInputRGB=(0))
Answers with the crosspoint connections needed to implement the given 8K/UHD2 capture configuration.
Definition: ntv2democommon.cpp:1483
AJA_STATUS_INITIALIZE
@ AJA_STATUS_INITIALIZE
Definition: types.h:386
DEC
#define DEC(__x__)
Definition: ntv2publicinterface.h:5606
false
#define false
Definition: ntv2devicefeatures.h:25
AUTOCIRCULATE_WITH_RP188
#define AUTOCIRCULATE_WITH_RP188
Use this to AutoCirculate with RP188.
Definition: ntv2publicinterface.h:5522
NTV2ACFrameRange::lastFrame
UWord lastFrame(void) const
Definition: ntv2utils.h:984
AUTOCIRCULATE_STATUS::IsRunning
bool IsRunning(void) const
Definition: ntv2publicinterface.h:7299
NTV2FrameBufferFormatToString
std::string NTV2FrameBufferFormatToString(const NTV2FrameBufferFormat inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:6983
NTV2Capture8K::SetupVideo
virtual AJAStatus SetupVideo(void)
Sets up everything I need for capturing video.
Definition: ntv2capture8k.cpp:157
CaptureConfig::fDoTSIRouting
bool fDoTSIRouting
If true, do TSI routing; otherwise squares.
Definition: ntv2democommon.h:288
NTV2XptConnections
std::map< NTV2InputXptID, NTV2OutputXptID > NTV2XptConnections
Definition: ntv2signalrouter.h:39
AJA_STATUS_BAD_PARAM
@ AJA_STATUS_BAD_PARAM
Definition: types.h:392
CNTV2Card::WaitForOutputVerticalInterrupt
virtual bool WaitForOutputVerticalInterrupt(const NTV2Channel inChannel=NTV2_CHANNEL1, UWord inRepeatCount=1)
Efficiently sleeps the calling thread/process until the next one or more field (interlaced video) or ...
Definition: ntv2subscriptions.cpp:134
NTV2MakeChannelSet
NTV2ChannelSet NTV2MakeChannelSet(const NTV2Channel inFirstChannel, const UWord inNumChannels=1)
Definition: ntv2publicinterface.cpp:3378
std
Definition: json.hpp:5362
IsRGBFormat
bool IsRGBFormat(const NTV2FrameBufferFormat format)
Definition: ntv2utils.cpp:5470
CNTV2Card::AutoCirculateTransfer
virtual bool AutoCirculateTransfer(const NTV2Channel inChannel, AUTOCIRCULATE_TRANSFER &transferInfo)
Transfers all or part of a frame as specified in the given AUTOCIRCULATE_TRANSFER object to/from the ...
Definition: ntv2autocirculate.cpp:695
AUTOCIRCULATE_STATUS::GetDroppedFrameCount
ULWord GetDroppedFrameCount(void) const
Definition: ntv2publicinterface.h:7244
CIRCULAR_BUFFER_SIZE
static const size_t CIRCULAR_BUFFER_SIZE(10)
Number of NTV2FrameData's in our ring.
NTV2ACFrameRange::setExactRange
bool setExactRange(const UWord inFirstFrame, const UWord inLastFrame)
Definition: ntv2utils.h:997
CNTV2MacDriverInterface::AcquireStreamForApplication
virtual bool AcquireStreamForApplication(ULWord inApplicationType, int32_t inProcessID)
Reserves exclusive use of the AJA device for a given process, preventing other processes on the host ...
Definition: ntv2macdriverinterface.cpp:481
NTV2Capture8K::StartConsumerThread
virtual void StartConsumerThread(void)
Starts my frame consumer thread.
Definition: ntv2capture8k.cpp:283
CNTV2DriverInterface::GetDeviceID
virtual NTV2DeviceID GetDeviceID(void)
Definition: ntv2driverinterface.cpp:407
AUTOCIRCULATE_STATUS::HasAvailableInputFrame
bool HasAvailableInputFrame(void) const
Definition: ntv2publicinterface.h:7269
CNTV2Card::GetEveryFrameServices
virtual bool GetEveryFrameServices(NTV2EveryFrameTaskMode &outMode)
Retrieves the device's current "retail service" task mode.
Definition: ntv2register.cpp:184
AUTOCIRCULATE_STATUS::WithCustomAnc
bool WithCustomAnc(void) const
Definition: ntv2publicinterface.h:7334
AJACircularBuffer::SetAbortFlag
void SetAbortFlag(const bool *pAbortFlag)
Tells me the boolean variable I should monitor such that when it gets set to "true" will cause any th...
Definition: circularbuffer.h:51
NTV2Capture8K::StartProducerThread
virtual void StartProducerThread(void)
Starts my capture thread.
Definition: ntv2capture8k.cpp:332
CNTV2Card::SetQuadQuadFrameEnable
virtual bool SetQuadQuadFrameEnable(const bool inValue, const NTV2Channel inChannel=NTV2_CHANNEL1)
Enables or disables "quad-quad" 8K frame mode on the device.
Definition: ntv2register.cpp:1125
NTV2_INPUT_SOURCE_IS_SDI
#define NTV2_INPUT_SOURCE_IS_SDI(_inpSrc_)
Definition: ntv2enums.h:1265
CNTV2Card::SetQuadQuadSquaresEnable
virtual bool SetQuadQuadSquaresEnable(const bool inValue, const NTV2Channel inChannel=NTV2_CHANNEL1)
Enables or disables quad-quad-frame (8K) squares mode on the device.
Definition: ntv2register.cpp:1180
AJAThread::SetPriority
virtual AJAStatus SetPriority(AJAThreadPriority priority)
Definition: thread.cpp:133
CNTV2Card::AutoCirculateStart
virtual bool AutoCirculateStart(const NTV2Channel inChannel, const ULWord64 inStartTime=0)
Starts AutoCirculating the specified channel that was previously initialized by CNTV2Card::AutoCircul...
Definition: ntv2autocirculate.cpp:503
CNTV2Card::SetReference
virtual bool SetReference(const NTV2ReferenceSource inRefSource, const bool inKeepFramePulseSelect=(0))
Sets the device's clock reference source. See Video Output Clocking & Synchronization for more inform...
Definition: ntv2register.cpp:1484
NTV2Capture8K::~NTV2Capture8K
virtual ~NTV2Capture8K()
Definition: ntv2capture8k.cpp:34
AJA_STATUS_OPEN
@ AJA_STATUS_OPEN
Definition: types.h:388
AUTOCIRCULATE_TRANSFER::GetInputTimeCodes
bool GetInputTimeCodes(NTV2TimeCodeList &outValues) const
Intended for capture, answers with the timecodes captured in my acTransferStatus member's acFrameStam...
Definition: ntv2publicinterface.cpp:2855
AJAThread::Start
virtual AJAStatus Start()
Definition: thread.cpp:91
CNTV2Card::SubscribeInputVerticalEvent
virtual bool SubscribeInputVerticalEvent(const NTV2Channel inChannel=NTV2_CHANNEL1)
Causes me to be notified when an input vertical blanking interrupt occurs on the given input channel.
Definition: ntv2subscriptions.cpp:39
AJA_FAILURE
#define AJA_FAILURE(_status_)
Definition: types.h:371
NTV2_IS_VALID_AUDIO_SYSTEM
#define NTV2_IS_VALID_AUDIO_SYSTEM(__x__)
Definition: ntv2enums.h:3867
CNTV2DemoCommon::Get8KInputFormat
static bool Get8KInputFormat(NTV2VideoFormat &inOutVideoFormat)
Given a video format, if all 4 inputs are the same and promotable to 8K, this function does the promo...
Definition: ntv2democommon.cpp:1239
DeviceCapabilities::CanDoFrameBufferFormat
bool CanDoFrameBufferFormat(const NTV2PixelFormat inPF)
Definition: ntv2devicecapabilities.h:223
NTV2FrameData::AncBuffer
NTV2Buffer & AncBuffer(void)
Definition: ntv2democommon.h:113
NTV2ChannelToAudioSystem
NTV2AudioSystem NTV2ChannelToAudioSystem(const NTV2Channel inChannel)
Converts the given NTV2Channel value into its equivalent NTV2AudioSystem.
Definition: ntv2utils.cpp:4929
CNTV2Card::AutoCirculateStop
virtual bool AutoCirculateStop(const NTV2Channel inChannel, const bool inAbort=(0))
Stops AutoCirculate for the given channel, and releases the on-device frame buffers that were allocat...
Definition: ntv2autocirculate.cpp:519
DEVICE_ID_NOTFOUND
@ DEVICE_ID_NOTFOUND
Invalid or "not found".
Definition: ntv2enums.h:92
CaptureConfig::fInputSource
NTV2InputSource fInputSource
The device input connector to use.
Definition: ntv2democommon.h:280
CAPNOTE
#define CAPNOTE(_expr_)
Definition: ntv2democommon.h:31
NTV2_OEM_TASKS
@ NTV2_OEM_TASKS
2: OEM: Device is configured by controlling application(s), with minimal driver involvement.
Definition: ntv2publicinterface.h:4292
NTV2Capture8K::ConsumeFrames
virtual void ConsumeFrames(void)
Repeatedly consumes frames from the circular buffer (until global quit flag set).
Definition: ntv2capture8k.cpp:306
NTV2FrameData::fTimecodes
NTV2TimeCodes fTimecodes
Map of TC indexes to NTV2_RP188 values.
Definition: ntv2democommon.h:87
CaptureConfig::fWithAudio
bool fWithAudio
If true, also capture Audio.
Definition: ntv2democommon.h:287
NTV2_AUDIOSYSTEM_INVALID
@ NTV2_AUDIOSYSTEM_INVALID
Definition: ntv2enums.h:3860