16 #define NTV2_BUFFER_LOCK 18 #define NTV2_AUDIOSIZE_MAX (401 * 1024) 19 #define NTV2_ANCILLARYSIZE_MAX (256 * 1024) 55 while (mConsumerThread.
Active())
58 while (mProducerThread.
Active())
87 { cerr <<
"## ERROR: '" << mDevice.
GetDisplayName() <<
"' doesn't support '" 101 cerr <<
"## ERROR: Unable to acquire '" << mDevice.
GetDisplayName() <<
"' because another app (pid " <<
appPID <<
") owns it" << endl;
145 cerr <<
"Device Description: " << mDevice.
GetDescription() << endl;
147 #endif // defined(_DEBUG) 214 ULWord F1AncSize(0), F2AncSize(0);
215 ULWord F1OffsetFromEnd(0), F2OffsetFromEnd(0);
219 F1AncSize = F2OffsetFromEnd > F1OffsetFromEnd ? 0 : F1OffsetFromEnd - F2OffsetFromEnd;
220 F2AncSize = F2OffsetFromEnd > F1OffsetFromEnd ? F2OffsetFromEnd - F1OffsetFromEnd : F2OffsetFromEnd;
230 frameData.fAudioBuffer.Allocate(audioBufferSize);
231 frameData.fAncBuffer.Allocate(F1AncSize);
232 frameData.fAncBuffer2.Allocate(F2AncSize);
233 mAVCircularBuffer.
Add(&frameData);
235 #ifdef NTV2_BUFFER_LOCK 237 if (frameData.fVideoBuffer)
239 if (frameData.fAncBuffer)
241 if (frameData.fAncBuffer2)
283 mConsumerThread.
Start();
304 uint64_t ancTally(0);
305 uint64_t audioTally(0);
306 uint64_t dolbyTally(0);
324 for (i = 0; i < pFrameData->AncBufferSize(); i += 32)
326 if (pData[i] == 0xff)
329 uint32_t audioSize =
RecoverAudio(pFrameData->AncBuffer(), pFrameData->AncBufferSize() , pFrameData->AudioBuffer());
330 cout <<
"f1 size reg " <<
DEC(pFrameData->NumCapturedAncBytes()) <<
" ffs " <<
DEC(i) <<
" samples " <<
DEC(audioSize/4) << endl << flush;
335 uint8_t* pData = (uint8_t*)pFrameData->AncBuffer2().GetHostAddress(0);
337 for (i = 0; i < pFrameData->AncBuffer2Size(); i += 32)
339 if (pData[i] == 0xff)
342 uint32_t audioSize =
RecoverAudio(pFrameData->AncBuffer2(), pFrameData->AncBuffer2Size() , pFrameData->AudioBuffer());
343 cout <<
"f2 size reg " <<
DEC(pFrameData->NumCapturedAnc2Bytes()) <<
" ffs " <<
DEC(i) <<
" samples " <<
DEC(audioSize/4) << endl << flush;
346 if (pOFS && pFrameData->AncBuffer())
348 if (pOFS && !ancTally++)
350 pOFS->write(pFrameData->AncBuffer(), streamsize(pFrameData->NumCapturedAncBytes()));
352 if ( pFrameData->AncBuffer2())
354 if (pOFS && pFrameData->AncBuffer2())
355 pOFS->write(pFrameData->AncBuffer2(), streamsize(pFrameData->NumCapturedAnc2Bytes()));
359 if (pAFS && pFrameData->AncBuffer() && pFrameData->AudioBuffer())
361 if (pAFS && !audioTally++)
363 uint32_t audioSize =
RecoverAudio(pFrameData->AncBuffer(), pFrameData->NumCapturedAncBytes(), pFrameData->AudioBuffer());
364 pAFS->write(pFrameData->AudioBuffer(), streamsize(audioSize));
366 if ( pFrameData->AncBuffer2())
368 audioSize =
RecoverAudio(pFrameData->AncBuffer2(), pFrameData->NumCapturedAnc2Bytes(), pFrameData->AudioBuffer());
369 pAFS->write(pFrameData->AudioBuffer(), streamsize(audioSize));
373 if (pDFS && pFrameData->AncBuffer() && pFrameData->AudioBuffer())
375 if (pDFS && !dolbyTally++)
377 uint32_t audioSize =
RecoverAudio(pFrameData->AncBuffer(), pFrameData->NumCapturedAncBytes(), pFrameData->AudioBuffer());
378 uint32_t dolbySize =
RecoverDolby(pFrameData->AudioBuffer(), audioSize, pFrameData->AncBuffer());
379 pDFS->write(pFrameData->AncBuffer(), streamsize(dolbySize));
381 if ( pFrameData->AncBuffer2())
383 audioSize =
RecoverAudio(pFrameData->AncBuffer2(), pFrameData->NumCapturedAnc2Bytes(), pFrameData->AudioBuffer());
384 dolbySize =
RecoverDolby(pFrameData->AudioBuffer(), audioSize, pFrameData->AncBuffer2());
385 pDFS->write(pFrameData->AncBuffer2(), streamsize(dolbySize));
393 {
delete pOFS; cerr <<
"Wrote " <<
DEC(ancTally) <<
" frames of raw anc data" << endl; }
395 {
delete pAFS; cerr <<
"Wrote " <<
DEC(audioTally) <<
" frames of raw audio data" << endl; }
397 {
delete pDFS; cerr <<
"Wrote " <<
DEC(dolbyTally) <<
" frames of dolby data" << endl; }
398 CAPNOTE(
"Thread completed, will exit");
411 mProducerThread.
Start();
432 ULWord acOptions (0), overruns(0);
492 {
bool overrun(
false);
495 {overruns++;
CAPWARN(overruns <<
" aux overrun(s)");}
499 stale.
Fill(uint8_t(0));
506 stale.
Fill(uint8_t(0));
524 CAPNOTE(
"Thread completed, will exit");
540 const uint8_t * pInAncData(inAncBuffer);
541 uint8_t * pOutAudioData(outAudioBuffer);
542 uint32_t audioSize(0);
545 for (uint32_t num(0); num < ancSize / 32; num++)
548 if (pInAncData[0] == 0x02)
551 if ((pInAncData[1] & 0x01))
554 if ((pInAncData[2] & 0x01))
556 *pOutAudioData++ = 0;
557 *pOutAudioData++ = 0;
558 *pOutAudioData++ = 0;
559 *pOutAudioData++ = 0;
563 *pOutAudioData++ = pInAncData[4];
564 *pOutAudioData++ = pInAncData[5];
565 *pOutAudioData++ = pInAncData[7];
566 *pOutAudioData++ = pInAncData[8];
572 if ((pInAncData[1] & 0x10) == 0)
575 if ((pInAncData[1] & 0x02))
578 if ((pInAncData[2] & 0x02))
580 *pOutAudioData++ = 0;
581 *pOutAudioData++ = 0;
582 *pOutAudioData++ = 0;
583 *pOutAudioData++ = 0;
587 *pOutAudioData++ = pInAncData[11];
588 *pOutAudioData++ = pInAncData[12];
589 *pOutAudioData++ = pInAncData[14];
590 *pOutAudioData++ = pInAncData[15];
596 if ((pInAncData[1] & 0x04))
599 if ((pInAncData[2] & 0x04))
601 *pOutAudioData++ = 0;
602 *pOutAudioData++ = 0;
603 *pOutAudioData++ = 0;
604 *pOutAudioData++ = 0;
608 *pOutAudioData++ = pInAncData[18];
609 *pOutAudioData++ = pInAncData[19];
610 *pOutAudioData++ = pInAncData[21];
611 *pOutAudioData++ = pInAncData[22];
617 if ((pInAncData[1] & 0x08))
620 if ((pInAncData[2] & 0x08))
622 *pOutAudioData++ = 0;
623 *pOutAudioData++ = 0;
624 *pOutAudioData++ = 0;
625 *pOutAudioData++ = 0;
629 *pOutAudioData++ = pInAncData[25];
630 *pOutAudioData++ = pInAncData[26];
631 *pOutAudioData++ = pInAncData[28];
632 *pOutAudioData++ = pInAncData[29];
645 const uint16_t * pInAudioData(inAudioBuffer);
646 uint16_t * pOutDolbyData(outDolbyBuffer);
647 uint32_t dolbySize(0);
650 for (uint32_t cnt(0); cnt < inAudioSize / 2; cnt++)
655 case 0: mDolbyState = (*pInAudioData == 0xf872) ? 1 : 0;
658 case 1: mDolbyState = (*pInAudioData == 0x4e1f) ? 2 : 0;
662 case 2: mDolbyState = ((*pInAudioData & 0xff) == 0x15) ? 3 : 0;
666 case 3: mDolbyLength = uint32_t(*pInAudioData / 2);
671 case 4:
if (mDolbyLength)
676 *pOutDolbyData = (*pInAudioData >> 8) & 0xff;
677 *pOutDolbyData |= (*pInAudioData & 0xff) << 8;
687 default: mDolbyState = 0;
692 return dolbySize * 2;
NTV2Channel NTV2InputSourceToChannel(const NTV2InputSource inInputSource)
Converts a given NTV2InputSource to its equivalent NTV2Channel value.
Anc Field2 byte offset from end of frame buffer (GUMP on all boards except RTP for SMPTE2022/IP) ...
virtual bool SetTaskMode(const NTV2TaskMode inMode)
Sets the device's task mode.
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...
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...
virtual bool ReleaseStreamForApplication(ULWord inApplicationType, int32_t inProcessID)
Releases exclusive use of the AJA device for the given process, permitting other processes to acquire...
bool WithCustomAnc(void) const
AJAStatus Add(FrameDataPtr pInFrameData)
Appends a new frame buffer to me, increasing my frame storage capacity by one frame.
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...
ULWord AncBuffer2Size(void) const
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.
virtual void CaptureFrames(void)
Repeatedly captures frames using AutoCirculate (until global quit flag set).
ULWord VideoBufferSize(void) const
bool fDoMultiFormat
If true, use multi-format/multi-channel mode, if device supports it; otherwise normal mode...
virtual bool IsDeviceReady(const bool inCheckValid=(0))
Identifies the 1st HDMI video input.
ULWord GetBufferLevel(void) const
#define AJA_FAILURE(_status_)
#define NTV2_VIDEO_FORMAT_HAS_PROGRESSIVE_PICTURE(__f__)
NTV2InputSource NTV2ChannelToInputSource(const NTV2Channel inChannel, const NTV2IOKinds inKinds=NTV2_IOKINDS_SDI)
ULWord GetByteCount(void) const
std::vector< AJALabelValuePair > AJALabelValuePairs
An ordered sequence of label/value pairs.
virtual void SetupHostBuffers(void)
Sets up my circular buffers.
#define NTV2_IS_4K_VIDEO_FORMAT(__f__)
virtual AJAStatus SetPriority(AJAThreadPriority priority)
virtual void StartConsumerThread(void)
Starts my frame consumer thread.
Specifies HDMI input/output kinds.
NTV2DolbyCapture(const DolbyCaptureConfig &inConfig)
Constructs me using the given settings.
FrameDataPtr StartConsumeNextBuffer(void)
The thread that's responsible for processing incoming frames – the consumer – calls this function t...
UWord firstFrame(void) const
virtual AJAStatus Start()
virtual bool EnableInputInterrupt(const NTV2Channel channel=NTV2_CHANNEL1)
Allows the CNTV2Card instance to wait for and respond to input vertical blanking interrupts originati...
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...
void EndConsumeNextBuffer(void)
The consumer thread calls this function to signal that it has finished processing the frame it obtain...
virtual bool AutoCirculateGetStatus(const NTV2Channel inChannel, AUTOCIRCULATE_STATUS &outStatus)
Returns the current AutoCirculate status for the given channel.
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.
virtual class DeviceCapabilities & features(void)
bool fDoFrameStats
if true, output per frame statistics
bool CanDoInputSource(const NTV2InputSource inSrc)
virtual bool SetMultiFormatMode(const bool inEnable)
Enables or disables multi-format (per channel) device operation. If enabled, each device channel can ...
virtual void StartProducerThread(void)
Starts my capture thread.
virtual bool GetHDMIInputColor(NTV2LHIHDMIColorSpace &outValue, const NTV2Channel inHDMIInput=NTV2_CHANNEL1)
Answers with the current colorspace for the given HDMI input.
ULWord GetProcessedFrameCount(void) const
Anc Field1 byte offset from end of frame buffer (GUMP on all boards except RTP for SMPTE2022/IP) ...
NTV2Channel fInputChannel
The device channel to use.
virtual bool IsRemote(void) const
bool Fill(const T &inValue)
Fills me with the given scalar value.
virtual bool GetTaskMode(NTV2TaskMode &outMode)
Retrieves the device's current task mode.
std::string NTV2InputSourceToString(const NTV2InputSource inValue, const bool inForRetailDisplay=false)
0: Disabled (never recommended): device configured exclusively by client application(s).
virtual std::string GetDescription(void) const
std::string fAncDataFilePath
Optional path to Anc binary data file.
virtual AJAStatus SetupVideo(void)
Sets up everything I need for capturing video.
ULWord AncBufferSize(void) const
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...
#define NTV2_INPUT_SOURCE_IS_HDMI(_inpSrc_)
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 ...
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 ...
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.
std::ostream & operator<<(std::ostream &ioStrm, const DolbyCaptureConfig &inObj)
NTV2Buffer & AncBuffer2(void)
NTV2LHIHDMIColorSpace inputColorSpace(NTV2_LHIHDMIColorSpaceYCbCr)
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...
virtual std::string GetDisplayName(void)
Answers with this device's display name.
NTV2Buffer & AncBuffer(void)
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. ...
static void Sleep(const int32_t inMilliseconds)
Suspends execution of the current thread for a given number of milliseconds.
2: OEM (recommended): device configured by client application(s) with some driver involvement...
virtual AJAStatus SetupAudio(void)
Sets up everything I need for capturing audio.
bool CanDoHDMIAuxCapture(void)
virtual bool ApplySignalRoute(const CNTV2SignalRouter &inRouter, const bool inReplace=(0))
Applies the given routing table to the AJA device.
NTV2XptConnections connections
std::string NTV2VideoFormatToString(const NTV2VideoFormat inValue, const bool inUseFrameRate=false)
bool fDoAudioFilter
If true, capture only audio anc.
NTV2Buffer & VideoBuffer(void)
ULWord GetDroppedFrameCount(void) const
virtual bool SetTsiFrameEnable(const bool inIsEnabled, const NTV2Channel inChannel)
Enables or disables SMPTE 425 two-sample interleave (Tsi) frame mode on the device.
static void ConsumerThreadStatic(AJAThread *pThread, void *pContext)
This is the consumer thread's static callback function that gets called when the consumer thread runs...
NTV2Buffer fAncBuffer
Host ancillary data buffer.
#define AUTOCIRCULATE_WITH_ANC
Use this to AutoCirculate with ancillary data.
virtual NTV2DeviceID GetDeviceID(void)
ULWord fNumAnc2Bytes
Actual number of captured F2 anc bytes.
#define NTV2_ANCILLARYSIZE_MAX
std::string fDolbyDataFilePath
Optional path to Dolby binary data file.
Declares the CNTV2DeviceScanner class.
NTV2Buffer fAncBuffer2
Additional "F2" host anc buffer.
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...
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...
#define NTV2_IS_VALID_CHANNEL(__x__)
Declares the AJAProcess class.
Describes a user-space buffer on the host computer. I have an address and a length, plus some optional attributes (allocated by SDK?, page-aligned? etc.).
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...
ULWord fNumAncBytes
Actual number of captured F1 anc bytes.
virtual AJAStatus Run(void)
Runs me.
virtual uint32_t RecoverDolby(const NTV2Buffer &inAudioBuffer, const uint32_t inAudioSize, NTV2Buffer &outDolbyBuffer)
Recover Dolby data from the given audio data.
This object specifies the information that will be transferred to or from the AJA device in the CNTV2...
NTV2InputSource fInputSource
The device input connector to use.
virtual bool RouteInputSignal(void)
Sets up device routing for capture.
virtual bool AuxExtractSetPacketFilters(const UWord inHDMIInput, const NTV2DIDSet &inDIDs)
Replaces the HDMI packet types to be excluded (filtered) by the given HDMI input's Aux extractor...
static AJALabelValuePairs & append(AJALabelValuePairs &inOutTable, const std::string &inLabel, const std::string &inValue=std::string())
A convenience function that appends the given label and value strings to the provided AJALabelValuePa...
virtual AJAStatus Init(void)
Initializes me and prepares me to Run.
void EndProduceNextBuffer(void)
The producer thread calls this function to signal that it has finished populating the frame it obtain...
This identifies the first Audio System.
#define NTV2_IS_VALID_INPUT_SOURCE(_inpSrc_)
static const size_t CIRCULAR_BUFFER_SIZE(10)
Number of NTV2FrameData's in our ring.
static const ULWord kDemoAppSignature((((uint32_t)( 'D'))<< 24)|(((uint32_t)( 'E'))<< 16)|(((uint32_t)( 'M'))<< 8)|(((uint32_t)( 'O'))<< 0))
Declares the NTV2DolbyCapture class.
virtual AJAStatus Attach(AJAThreadFunction *pThreadFunction, void *pUserContext)
FrameDataPtr StartProduceNextBuffer(void)
The thread that's responsible for providing frames – the producer – calls this function to populate...
virtual bool AuxExtractGetBufferOverrun(const UWord inHDMIInput, bool &outIsOverrun, const UWord inField=0)
Answers whether or not the given HDMI input's Aux extractor reached its buffer limits.
virtual ~NTV2DolbyCapture()
This is returned from the CNTV2Card::AutoCirculateGetStatus function.
I capture HDMI Dolby audio from an HDMI input of an AJA device.
Specifies channel or FrameStore 1 (or the first item).
virtual bool AutoCirculateStart(const NTV2Channel inChannel, const ULWord64 inStartTime=0)
Starts AutoCirculating the specified channel that was previously initialized by CNTV2Card::AutoCircul...
bool CanDoFrameBufferFormat(const NTV2PixelFormat inPF)
NTV2ACFrameRange fFrames
AutoCirculate frame count or range.
NTV2PixelFormat fPixelFormat
Pixel format to use.
static bool GetInputRouting(NTV2XptConnections &outConnections, const CaptureConfig &inConfig, const bool isInputRGB=(0))
Answers with the crosspoint connections needed to implement the given capture configuration.
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.
std::string NTV2FrameBufferFormatToString(const NTV2FrameBufferFormat inValue, const bool inForRetailDisplay=false)
I encapsulate the video, audio and anc host buffers used in the AutoCirculate demos. I'm a more modern version of the AVDataBuffer.
NTV2Buffer fVideoBuffer
Host video buffer.
bool HasAvailableInputFrame(void) const
bool IsRunning(void) const
virtual void GetACStatus(ULWord &outGoodFrames, ULWord &outDroppedFrames, ULWord &outBufferLevel)
Provides status information about my input (capture) process.
AJALabelValuePairs Get(const bool inCompact=(0)) const
std::string fDeviceSpec
The AJA device to use.
std::map< NTV2InputXptID, NTV2OutputXptID > NTV2XptConnections
virtual void ConsumeFrames(void)
Repeatedly consumes frames from the circular buffer (until global quit flag set). ...
ULWord GetCapturedAncByteCount(const bool inField2=false) const
bool CanDoVideoFormat(const NTV2VideoFormat inVF)
UWord lastFrame(void) const
static NTV2DIDSet AuxExtractGetDefaultPacketFilters(void)
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 ...
virtual void Quit(void)
Gracefully stops me from running.
virtual bool AuxExtractSetFilterInclusionMode(const UWord inHDMIInput, const bool inEnable)
Enables or disables HDMI AUX packet filtering for the given HDMI input.
void * GetHostAddress(const ULWord inByteOffset, const bool inFromEnd=false) const
This class is used to configure an NTV2Capture instance.
std::string fAudioDataFilePath
Optional path to Audio binary data file.
#define AUTOCIRCULATE_WITH_HDMIAUX
Use this to AutoCirculate with HDMI auxiliary data.
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 ...
virtual void ToString(std::string &outAllLabelsAndValues) const
Answers with a multi-line string that contains the complete host system info table.
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 ...
static void ProducerThreadStatic(AJAThread *pThread, void *pContext)
This is the capture thread's static callback function that gets called when the capture thread runs...
bool CanDoMultiFormat(void)
std::set< UByte > NTV2DIDSet
A set of distinct NTV2DID values.
bool SetVideoBuffer(ULWord *pInVideoBuffer, const ULWord inVideoByteCount)
Sets my video buffer for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
AJALabelValuePairs Get(const bool inCompact=(0)) const
#define NTV2_AUDIOSIZE_MAX
NTV2ReferenceSource NTV2InputSourceToReferenceSource(const NTV2InputSource inInputSource)
Converts a given NTV2InputSource to its equivalent NTV2ReferenceSource value.
virtual uint32_t RecoverAudio(const NTV2Buffer &inAncBuffer, const uint32_t inAncSize, NTV2Buffer &outAudioBuffer)
Recover audio from ancillary data.
virtual bool EnableChannel(const NTV2Channel inChannel)
Enables the given FrameStore.