AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
ntv2dolbycapture.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #ifndef _NTV2DOLBYCAPTURE_H
10 #define _NTV2DOLBYCAPTURE_H
11 
12 #include "ntv2enums.h"
13 #include "ntv2devicefeatures.h"
14 #include "ntv2devicescanner.h"
15 #include "ntv2democommon.h"
16 #include "ntv2formatdescriptor.h"
19 #include "ajabase/system/thread.h"
20 #include "ajabase/system/info.h"
21 
22 
26 typedef struct DolbyConfig
27 {
28  public:
29  std::string fDeviceSpec;
30  std::string fAncDataFilePath;
31  std::string fAudioDataFilePath;
32  std::string fDolbyDataFilePath;
38  bool fDoFrameData;
40  bool fWithAnc;
41  bool fWithAudio;
42  bool fWithDolby;
43 
47  inline explicit DolbyConfig (const std::string & inDeviceSpec = "0")
48  : fDeviceSpec (inDeviceSpec),
53  fFrames (7),
58  fWithAnc (false),
59  fWithAudio (false),
61  {
62  }
63  AJALabelValuePairs Get (const bool inCompact = false) const;
64 } DolbyConfig;
65 
66 std::ostream & operator << (std::ostream & ioStrm, const DolbyConfig & inObj);
67 
68 
73 {
74  // Public Instance Methods
75  public:
81  NTV2DolbyCapture (const DolbyConfig & inConfig);
82 
83  virtual ~NTV2DolbyCapture ();
84 
88  virtual AJAStatus Init (void);
89 
94  virtual AJAStatus Run (void);
95 
99  virtual void Quit (void);
100 
107  virtual void GetACStatus (ULWord & outGoodFrames, ULWord & outDroppedFrames, ULWord & outBufferLevel);
108 
109 
110  // Protected Instance Methods
111  protected:
115  virtual AJAStatus SetupVideo (void);
116 
120  virtual AJAStatus SetupAudio (void);
121 
125  virtual void RouteInputSignal (void);
126 
130  virtual void SetupHostBuffers (void);
131 
135  virtual void StartProducerThread (void);
136 
140  virtual void CaptureFrames (void);
141 
145  virtual void StartConsumerThread (void);
146 
150  virtual void ConsumeFrames (void);
151 
155  virtual uint32_t RecoverAudio (NTV2Buffer & anc, uint32_t ancSize, NTV2Buffer & audio);
156 
160  virtual uint32_t RecoverDolby (NTV2Buffer & audio, uint32_t audioSize, NTV2Buffer & dolby);
161 
162  // Protected Class Methods
163  protected:
171  static void ConsumerThreadStatic (AJAThread * pThread, void * pContext);
172 
180  static void ProducerThreadStatic (AJAThread * pThread, void * pContext);
181 
182 
183  // Private Member Data
184  private:
186 
187  AJAThread mConsumerThread;
188  AJAThread mProducerThread;
189  CNTV2Card mDevice;
190  NTV2DeviceID mDeviceID;
191  DolbyConfig mConfig;
192  NTV2VideoFormat mVideoFormat;
193  NTV2FormatDesc mFormatDesc;
194  NTV2TaskMode mSavedTaskMode;
195  NTV2AudioSystem mAudioSystem;
196  bool mGlobalQuit;
197  NTV2FrameDataArray mHostBuffers;
198  MyCircularBuffer mAVCircularBuffer;
199  bool mProgressive;
200  uint32_t mDolbyState;
201  uint32_t mDolbyLength;
202 
203 }; // NTV2DolbyCapture
204 
205 #endif // _NTV2CAPTURE_H
NTV2DolbyCapture::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: ntv2dolbycapture.cpp:492
NTV2TaskMode
enum NTV2EveryFrameTaskMode NTV2TaskMode
info.h
Declares the AJASystemInfo class.
DolbyConfig::fDoAudioFilter
bool fDoAudioFilter
If true, capture only audio anc.
Definition: ntv2dolbycapture.h:37
ntv2devicefeatures.h
Declares device capability functions.
DolbyConfig::fDeviceSpec
std::string fDeviceSpec
The AJA device to use.
Definition: ntv2dolbycapture.h:29
NTV2FormatDescriptor
Describes a video frame for a given video standard or format and pixel format, including the total nu...
Definition: ntv2formatdescriptor.h:41
DolbyConfig::fDolbyDataFilePath
std::string fDolbyDataFilePath
Optional path to Dolby binary data file.
Definition: ntv2dolbycapture.h:32
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific Frame Store. They're also commonly used to i...
Definition: ntv2enums.h:1305
NTV2Buffer
A generic user-space buffer object that has an address and a length. Used most often to share an arbi...
Definition: ntv2publicinterface.h:5967
NTV2DolbyCapture::GetACStatus
virtual void GetACStatus(ULWord &outGoodFrames, ULWord &outDroppedFrames, ULWord &outBufferLevel)
Provides status information about my input (capture) process.
Definition: ntv2dolbycapture.cpp:587
NTV2DolbyCapture::Init
virtual AJAStatus Init(void)
Initializes me and prepares me to Run.
Definition: ntv2dolbycapture.cpp:74
DolbyConfig
struct DolbyConfig DolbyConfig
This class is used to configure an NTV2Capture instance.
DolbyConfig::fDoFrameData
bool fDoFrameData
if true, output per frame statistics
Definition: ntv2dolbycapture.h:38
NTV2DolbyCapture::CaptureFrames
virtual void CaptureFrames(void)
Repeatedly captures frames using AutoCirculate (until global quit flag set).
Definition: ntv2dolbycapture.cpp:504
DolbyConfig::fInputChannel
NTV2Channel fInputChannel
The device channel to use.
Definition: ntv2dolbycapture.h:33
DolbyConfig
This class is used to configure an NTV2Capture instance.
Definition: ntv2dolbycapture.h:26
NTV2DolbyCapture::~NTV2DolbyCapture
virtual ~NTV2DolbyCapture()
Definition: ntv2dolbycapture.cpp:43
DolbyConfig::fInputSource
NTV2InputSource fInputSource
The device input connector to use.
Definition: ntv2dolbycapture.h:34
NTV2DeviceID
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
DolbyConfig::fDoMultiFormat
bool fDoMultiFormat
If true, use multi-format/multi-channel mode, if device supports it; otherwise normal mode.
Definition: ntv2dolbycapture.h:39
NTV2FrameBufferFormat
NTV2FrameBufferFormat
Identifies a particular video frame buffer format. See Device Frame Buffer Formats for details.
Definition: ntv2enums.h:207
NTV2DolbyCapture::SetupHostBuffers
virtual void SetupHostBuffers(void)
Sets up my circular buffers.
Definition: ntv2dolbycapture.cpp:199
NTV2DolbyCapture::SetupVideo
virtual AJAStatus SetupVideo(void)
Sets up everything I need for capturing video.
Definition: ntv2dolbycapture.cpp:143
NTV2DolbyCapture::RouteInputSignal
virtual void RouteInputSignal(void)
Sets up device routing for capture.
Definition: ntv2dolbycapture.cpp:245
NTV2_CHANNEL_INVALID
@ NTV2_CHANNEL_INVALID
Definition: ntv2enums.h:1316
AJAThread
Definition: thread.h:69
AJAStatus
AJAStatus
Definition: types.h:365
NTV2DolbyCapture::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: ntv2dolbycapture.cpp:373
NTV2DolbyCapture::NTV2DolbyCapture
NTV2DolbyCapture(const DolbyConfig &inConfig)
Constructs me using the given settings.
Definition: ntv2dolbycapture.cpp:28
ULWord
uint32_t ULWord
Definition: ajatypes.h:246
ntv2devicescanner.h
Declares the CNTV2DeviceScanner class.
DolbyConfig::DolbyConfig
DolbyConfig(const std::string &inDeviceSpec="0")
Constructs a default NTV2Capture configuration.
Definition: ntv2dolbycapture.h:47
NTV2ACFrameRange
AutoCirculate Frame Range.
Definition: ntv2utils.h:961
NTV2_INPUTSOURCE_INVALID
@ NTV2_INPUTSOURCE_INVALID
The invalid video input.
Definition: ntv2enums.h:1236
NTV2DolbyCapture::StartConsumerThread
virtual void StartConsumerThread(void)
Starts my frame consumer thread.
Definition: ntv2dolbycapture.cpp:362
NTV2DolbyCapture::RecoverDolby
virtual uint32_t RecoverDolby(NTV2Buffer &audio, uint32_t audioSize, NTV2Buffer &dolby)
Recover dolby from audio data.
Definition: ntv2dolbycapture.cpp:699
ntv2enums.h
Enumerations for controlling NTV2 devices.
NTV2_FBF_8BIT_YCBCR
@ NTV2_FBF_8BIT_YCBCR
See 8-Bit YCbCr Format.
Definition: ntv2enums.h:211
NTV2DolbyCapture::SetupAudio
virtual AJAStatus SetupAudio(void)
Sets up everything I need for capturing audio.
Definition: ntv2dolbycapture.cpp:192
CNTV2Card
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:262
NTV2DolbyCapture::StartProducerThread
virtual void StartProducerThread(void)
Starts my capture thread.
Definition: ntv2dolbycapture.cpp:481
NTV2FrameDataArray
std::vector< NTV2FrameData > NTV2FrameDataArray
A vector of NTV2FrameData elements.
Definition: ntv2democommon.h:152
NTV2DolbyCapture::RecoverAudio
virtual uint32_t RecoverAudio(NTV2Buffer &anc, uint32_t ancSize, NTV2Buffer &audio)
Recover audio from ancillary data.
Definition: ntv2dolbycapture.cpp:596
DolbyConfig::fWithAnc
bool fWithAnc
If true, also capture Anc.
Definition: ntv2dolbycapture.h:40
NTV2InputSource
NTV2InputSource
Identifies a specific video input source.
Definition: ntv2enums.h:1221
ntv2formatdescriptor.h
Declares the NTV2FormatDescriptor class.
DolbyConfig::fFrames
CNTV2DemoCommon::ACFrameRange fFrames
AutoCirculate frame count or range.
Definition: ntv2dolbycapture.h:35
false
#define false
Definition: ntv2devicefeatures.h:25
ntv2democommon.h
This file contains some structures, constants, classes and functions that are used in some of the dem...
DolbyConfig::fWithDolby
bool fWithDolby
If true, also capture Dolby.
Definition: ntv2dolbycapture.h:42
videotypes.h
Declares the enumeration constants used in the ajabase library.
NTV2DolbyCapture::Run
virtual AJAStatus Run(void)
Runs me.
Definition: ntv2dolbycapture.cpp:349
NTV2VideoFormat
enum _NTV2VideoFormat NTV2VideoFormat
Identifies a particular video format.
NTV2DolbyCapture::Quit
virtual void Quit(void)
Gracefully stops me from running.
Definition: ntv2dolbycapture.cpp:54
DolbyConfig::Get
AJALabelValuePairs Get(const bool inCompact=(0)) const
Definition: ntv2dolbycapture.cpp:759
DolbyConfig::fWithAudio
bool fWithAudio
If true, also capture Audio.
Definition: ntv2dolbycapture.h:41
DolbyConfig::fPixelFormat
NTV2PixelFormat fPixelFormat
Pixel format to use.
Definition: ntv2dolbycapture.h:36
NTV2DolbyCapture
Instances of me capture frames in real time from a video signal provided to an input of an AJA device...
Definition: ntv2dolbycapture.h:72
circularbuffer.h
Declaration of AJACircularBuffer template class.
AJALabelValuePairs
std::vector< AJALabelValuePair > AJALabelValuePairs
An ordered sequence of label/value pairs.
Definition: info.h:69
NTV2AudioSystem
NTV2AudioSystem
Used to identify an Audio System on an NTV2 device. See Audio System Operation for more information.
Definition: ntv2enums.h:3809
DolbyConfig::fAudioDataFilePath
std::string fAudioDataFilePath
Optional path to Audio binary data file.
Definition: ntv2dolbycapture.h:31
thread.h
Declares the AJAThread class.
DolbyConfig::fAncDataFilePath
std::string fAncDataFilePath
Optional path to Anc binary data file.
Definition: ntv2dolbycapture.h:30
operator<<
std::ostream & operator<<(std::ostream &ioStrm, const DolbyConfig &inObj)
Definition: ntv2dolbycapture.cpp:776
AJACircularBuffer< NTV2FrameData * >
NTV2DolbyCapture::ConsumeFrames
virtual void ConsumeFrames(void)
Repeatedly consumes frames from the circular buffer (until global quit flag set).
Definition: ntv2dolbycapture.cpp:385