AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
ntv2ccgrabber.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #ifndef _NTV2CCGRABBER_H
10 #define _NTV2CCGRABBER_H
11 
12 #include "ntv2enums.h"
13 #include "ntv2devicefeatures.h"
14 #include "ntv2devicescanner.h"
15 #include "ntv2democommon.h"
16 #include "ntv2task.h"
17 #include "ntv2utils.h"
18 #include "ntv2vpid.h"
19 #include "ajabase/common/types.h"
24 #include "ajabase/system/thread.h"
25 #include "ajabase/system/info.h"
27 #include "ajabase/system/process.h"
28 #include "ntv2captiondecoder608.h"
29 #include "ntv2captiondecoder708.h"
30 
31 
32 typedef enum _OutputMode
33 {
40 } OutputMode;
41 
42 #define IS_VALID_OutputMode(_x_) ((_x_) >= kOutputMode_CaptionStream && (_x_) < kOutputMode_INVALID)
43 
44 
45 typedef enum _CaptionDataSrc
46 {
47  kCaptionDataSrc_Default, // Best available
55 
56 #define IS_VALID_CaptionDataSrc(_x_) ((_x_) >= kCaptionDataSrc_Default && (_x_) < kCaptionDataSrc_INVALID)
57 
58 
62 typedef struct CCGrabberConfig : public CaptureConfig
63 {
64  public:
70  bool fUseVanc;
71 
75  inline explicit CCGrabberConfig (const std::string & inDeviceSpecifier = "0")
76  : CaptureConfig (inDeviceSpecifier),
82  fUseVanc (false)
83  {
84  fWithAnc = true;
85  fWithAudio = false;
86  }
87  unsigned GetNumSourceSpecs (void) const {return (NTV2_IS_VALID_CHANNEL(fInputChannel)?1:0)
89  AJALabelValuePairs Get (const bool inCompact = false) const;
90 
91  static std::string GetLegalOutputModes (void);
92  static std::string OutputModeToString (const OutputMode inMode);
93  static OutputMode StringToOutputMode (const std::string & inModeStr);
94  static std::string GetLegalCaptionDataSources (void);
95  static std::string CaptionDataSrcToString (const CaptionDataSrc inDataSrc);
96  static CaptionDataSrc StringToCaptionDataSrc (const std::string & inDataSrcStr);
98 
99 std::ostream & operator << (std::ostream & ioStrm, const CCGrabberConfig & inObj);
100 
101 
112 {
113  // Public Class Methods
114  public:
120  static std::string GetLine21ChannelNames (std::string inDelimiter = ", ");
121 
122 
123  // Public Instance Methods
124  public:
130  NTV2CCGrabber (const CCGrabberConfig & inConfigData);
131  virtual ~NTV2CCGrabber ();
132 
136  virtual AJAStatus Init (void);
137 
142  virtual AJAStatus Run (void);
143 
147  virtual void Quit (void);
148 
153  virtual void SetCaptionDisplayChannel (const NTV2Line21Channel inNewChannel);
154 
155 
159  virtual inline bool IsCaptureThreadRunning (void) const {return mCaptureThread.Active();}
160 
161 
165  virtual inline bool IsPlayThreadRunning (void) const {return mPlayoutThread.Active();}
166 
170  virtual AJAStatus StartPlayThread (void);
171 
176  virtual inline void ToggleHUD (void) {mHeadUpDisplayOn = !mHeadUpDisplayOn;}
177 
178  virtual void ToggleVANC (void);
179  virtual void SwitchOutput(void);
180  virtual void Switch608Source(void);
181  virtual void SwitchPixelFormat(void);
182 
183  // Protected Instance Methods
184  protected:
188  virtual AJAStatus SetupInputVideo (void);
189 
193  virtual AJAStatus SetupAudio (void);
194 
200  virtual bool RouteInputSignal (const NTV2VideoFormat inVideoFormat);
201 
206  virtual void SetOutputStandards (const NTV2VideoFormat inVideoFormat);
207 
211  virtual AJAStatus StartCaptureThread (void);
212 
216  virtual void CaptureFrames (void);
217 
223 
229  virtual AJAStatus SetupHostBuffers (const NTV2VideoFormat inVideoFormat);
230 
234  virtual void ReleaseHostBuffers (void);
235 
242  virtual void ExtractClosedCaptionData (const uint32_t inFrameCount, const NTV2VideoFormat inVideoFormat);
243 
244 
250  virtual AJAStatus SetupOutputVideo (const NTV2VideoFormat inVideoFormat);
251 
258  virtual void DoCCOutput (const uint32_t inFrameNum, const CaptionData & inCCData, const NTV2VideoFormat inVideoFormat);
259 
264  virtual bool RouteOutputSignal (const NTV2VideoFormat inVideoFormat);
265 
269  virtual void PlayFrames (void);
270 
271 
276  virtual void CaptioningChanged (const NTV2Caption608ChangeInfo & inChangeInfo);
277 
278 
279  // Protected Class Methods
280  protected:
288  static void CaptureThreadStatic (AJAThread * pThread, void * pContext);
289 
297  static void PlayThreadStatic (AJAThread * pThread, void * pContext);
298 
304  static void Caption608ChangedStatic (void * pInstance, const NTV2Caption608ChangeInfo & inChangeInfo);
305 
306 
307  // Instance Data
308  private:
309  CCGrabberConfig mConfig;
310  mutable AJAThread mCaptureThread;
311  CNTV2Card mDevice;
312  NTV2DeviceID mDeviceID;
313  NTV2EveryFrameTaskMode mSavedTaskMode;
314  NTV2AudioSystem mAudioSystem;
315  NTV2VANCMode mVancMode;
316  bool mGlobalQuit;
317  bool mSquares;
318  std::string mLastOutStr;
319  uint32_t mFirstOutFrame;
320  uint32_t mLastOutFrame;
321  ULWord mErrorTally;
322  ULWord mCaptionDataTally;
323  NTV2Line21Channel m608Channel;
324  NTV2Line21Mode m608Mode;
325  CNTV2CaptionDecoder608Ptr m608Decoder;
326  CNTV2CaptionDecoder708Ptr m708DecoderAnc;
327  CNTV2CaptionDecoder708Ptr m708DecoderVanc;
328  CNTV2VPID mVPIDInfoDS1;
329  CNTV2VPID mVPIDInfoDS2;
330  NTV2ChannelSet mInputFrameStores;
331  NTV2ChannelSet mActiveSDIInputs;
332  NTV2ChannelSet mActiveCSCs;
333  NTV2XptConnections mInputConnections;
334  NTV2FrameDataArray mHostBuffers;
335  FrameDataRingBuffer mCircularBuffer;
336  AUTOCIRCULATE_TRANSFER mInputXferInfo;
337 
338  // Instance data only used for caption burn-in:
339  bool mHeadUpDisplayOn;
340  NTV2Channel mOutputChannel;
341  NTV2FrameBufferFormat mPlayoutFBF;
342  mutable AJAThread mPlayoutThread;
343  NTV2ChannelSet mOutputFrameStores;
344  NTV2XptConnections mOutputConnections;
345 
346 }; // NTV2CCGrabber
347 
348 #endif // _NTV2CCGRABBER_H
CCGrabberConfig::fTimecodeSrc
NTV2TCIndex fTimecodeSrc
Timecode source to use (if any)
Definition: ntv2ccgrabber.h:67
CCGrabberConfig::StringToOutputMode
static OutputMode StringToOutputMode(const std::string &inModeStr)
Definition: ntv2ccgrabber.cpp:1613
NTV2CCGrabber::SetupAudio
virtual AJAStatus SetupAudio(void)
Sets up audio for capture (and playout, if burning captions).
Definition: ntv2ccgrabber.cpp:338
info.h
Declares the AJASystemInfo class.
CCGrabberConfig::fOutputMode
OutputMode fOutputMode
Desired output (captionStream, Screen etc)
Definition: ntv2ccgrabber.h:65
ntv2devicefeatures.h
Declares device capability functions.
CCGrabberConfig::fCaptionChannel
NTV2Line21Channel fCaptionChannel
Caption channel to monitor (defaults to CC1)
Definition: ntv2ccgrabber.h:68
kCaptionDataSrc_608FBVanc
@ kCaptionDataSrc_608FBVanc
Definition: ntv2ccgrabber.h:49
types.h
Declares common types used in the ajabase library.
NTV2CCGrabber::SetOutputStandards
virtual void SetOutputStandards(const NTV2VideoFormat inVideoFormat)
Sets the device output standard based on the given video format.
Definition: ntv2ccgrabber.cpp:584
_CaptionDataSrc
_CaptionDataSrc
Definition: ntv2ccgrabber.h:45
NTV2CCGrabber::ExtractClosedCaptionData
virtual void ExtractClosedCaptionData(const uint32_t inFrameCount, const NTV2VideoFormat inVideoFormat)
Extracts closed-caption data, if present, and emits it on a character-by-character basis to the stand...
Definition: ntv2ccgrabber.cpp:976
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
Definition: ntv2enums.h:1305
AJARefPtr< CNTV2CaptionDecoder608 >
ntv2task.h
Declares the CNTV2Task class (deprecated).
NTV2CCGrabber::IsCaptureThreadRunning
virtual bool IsCaptureThreadRunning(void) const
Returns true if my capture thread is currently running.
Definition: ntv2ccgrabber.h:159
systemtime.h
Declares the AJATime class.
NTV2CCGrabber::SwitchPixelFormat
virtual void SwitchPixelFormat(void)
Switches/rotates –pixelFormat.
Definition: ntv2ccgrabber.cpp:962
CCGrabberConfig::Get
AJALabelValuePairs Get(const bool inCompact=(0)) const
Definition: ntv2ccgrabber.cpp:1571
kOutputMode_CaptionFileMCC
@ kOutputMode_CaptionFileMCC
Definition: ntv2ccgrabber.h:37
NTV2CCGrabber::PlayFrames
virtual void PlayFrames(void)
Repeatedly updates captions (until global quit flag set).
Definition: ntv2ccgrabber.cpp:1413
NTV2DeviceID
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
NTV2CCGrabber::CaptioningChanged
virtual void CaptioningChanged(const NTV2Caption608ChangeInfo &inChangeInfo)
This function gets called whenever caption changes occur.
Definition: ntv2ccgrabber.cpp:1542
NTV2FrameBufferFormat
NTV2FrameBufferFormat
Identifies a particular video frame buffer format. See Device Frame Buffer Formats for details.
Definition: ntv2enums.h:207
timecode.h
Declares the AJATimeCode class.
kCaptionDataSrc_INVALID
@ kCaptionDataSrc_INVALID
Definition: ntv2ccgrabber.h:53
NTV2CCGrabber::Run
virtual AJAStatus Run(void)
Runs me.
Definition: ntv2ccgrabber.cpp:605
CCGrabberConfig::fCaptionSrc
CaptionDataSrc fCaptionSrc
Caption data source (Line21? 608 VANC? 608 Anc? etc)
Definition: ntv2ccgrabber.h:66
NTV2CCGrabber::StartCaptureThread
virtual AJAStatus StartCaptureThread(void)
Starts my capture thread.
Definition: ntv2ccgrabber.cpp:622
NTV2CCGrabber::ToggleHUD
virtual void ToggleHUD(void)
Toggles the Head-Up-Display.
Definition: ntv2ccgrabber.h:176
CaptionDataSrc
enum _CaptionDataSrc CaptionDataSrc
NTV2CCGrabber::Quit
virtual void Quit(void)
Gracefully stops me from running.
Definition: ntv2ccgrabber.cpp:102
CaptureConfig::fWithAnc
bool fWithAnc
If true, also capture Anc.
Definition: ntv2democommon.h:277
NTV2CCGrabber::DoCCOutput
virtual void DoCCOutput(const uint32_t inFrameNum, const CaptionData &inCCData, const NTV2VideoFormat inVideoFormat)
Outputs CC data.
Definition: ntv2ccgrabber.cpp:1182
kOutputMode_INVALID
@ kOutputMode_INVALID
Definition: ntv2ccgrabber.h:39
AJAThread
Definition: thread.h:69
NTV2CCGrabber::SwitchOutput
virtual void SwitchOutput(void)
Switches/rotates –output mode.
Definition: ntv2ccgrabber.cpp:940
AJAThread::Active
virtual bool Active()
Definition: thread.cpp:116
NTV2Caption608ChangeInfo
This class is used to respond to dynamic events that occur during CEA-608 caption decoding.
Definition: ntv2caption608types.h:779
timecodeburn.h
Declares the AJATimeCodeBurn class.
AJAStatus
AJAStatus
Definition: types.h:378
_OutputMode
_OutputMode
Definition: ntv2ccgrabber.h:32
process.h
Declares the AJAProcess class.
NTV2CCGrabber::SetupOutputVideo
virtual AJAStatus SetupOutputVideo(const NTV2VideoFormat inVideoFormat)
Sets up everything I need for capturing video.
Definition: ntv2ccgrabber.cpp:1285
ULWord
uint32_t ULWord
Definition: ajatypes.h:253
ntv2devicescanner.h
Declares the CNTV2DeviceScanner class.
CaptureConfig
This class is used to configure an NTV2Capture instance.
Definition: ntv2democommon.h:265
NTV2CCGrabber::GetLine21ChannelNames
static std::string GetLine21ChannelNames(std::string inDelimiter=", ")
Returns a string containing a concatenation of human-readable names of every available NTV2Line21Chan...
Definition: ntv2ccgrabber.cpp:1556
CCGrabberConfig
CCGrabberConfig CCGrabberConfig
This class is used to configure an NTV2CCGrabber instance.
kCaptionDataSrc_608Anc
@ kCaptionDataSrc_608Anc
Definition: ntv2ccgrabber.h:51
CNTV2VPID
A convenience class that simplifies encoding or decoding the 4-byte VPID payload that can be read or ...
Definition: ntv2vpid.h:23
kOutputMode_CaptionScreen
@ kOutputMode_CaptionScreen
Definition: ntv2ccgrabber.h:35
NTV2TCIndex
NTV2TCIndex
These enum values are indexes into the capture/playout AutoCirculate timecode arrays.
Definition: ntv2enums.h:3870
OutputMode
enum _OutputMode OutputMode
ntv2captiondecoder708.h
Declares the CNTV2CaptionDecoder708 class.
NTV2CCGrabber::SetupHostBuffers
virtual AJAStatus SetupHostBuffers(const NTV2VideoFormat inVideoFormat)
Sets up my circular buffers.
Definition: ntv2ccgrabber.cpp:200
CCGrabberConfig
This class is used to configure an NTV2CCGrabber instance.
Definition: ntv2ccgrabber.h:62
NTV2CCGrabber::Init
virtual AJAStatus Init(void)
Initializes me and prepares me to Run.
Definition: ntv2ccgrabber.cpp:119
operator<<
std::ostream & operator<<(std::ostream &ioStrm, const CCGrabberConfig &inObj)
Definition: ntv2ccgrabber.cpp:1688
ntv2enums.h
Enumerations for controlling NTV2 devices.
NTV2_IS_VALID_INPUT_SOURCE
#define NTV2_IS_VALID_INPUT_SOURCE(_inpSrc_)
Definition: ntv2enums.h:1243
AUTOCIRCULATE_TRANSFER
This object specifies the information that will be transferred to or from the AJA device in the CNTV2...
Definition: ntv2publicinterface.h:7969
ntv2utils.h
Declares numerous NTV2 utility functions.
NTV2CCGrabber::StartPlayThread
virtual AJAStatus StartPlayThread(void)
Starts my playout thread.
Definition: ntv2ccgrabber.cpp:1387
CCGrabberConfig::CaptionDataSrcToString
static std::string CaptionDataSrcToString(const CaptionDataSrc inDataSrc)
Definition: ntv2ccgrabber.cpp:1649
CNTV2Card
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:28
CCGrabberConfig::GetLegalCaptionDataSources
static std::string GetLegalCaptionDataSources(void)
Definition: ntv2ccgrabber.cpp:1636
CCGrabberConfig::GetLegalOutputModes
static std::string GetLegalOutputModes(void)
Definition: ntv2ccgrabber.cpp:1585
NTV2ChannelSet
std::set< NTV2Channel > NTV2ChannelSet
A set of distinct NTV2Channel values.
Definition: ntv2publicinterface.h:3854
kOutputMode_CaptionFileSCC
@ kOutputMode_CaptionFileSCC
Definition: ntv2ccgrabber.h:36
NTV2FrameDataArray
std::vector< NTV2FrameData > NTV2FrameDataArray
A vector of NTV2FrameData elements.
Definition: ntv2democommon.h:152
NTV2VANCMode
NTV2VANCMode
These enum values identify the available VANC modes.
Definition: ntv2enums.h:3716
NTV2_IS_VALID_CHANNEL
#define NTV2_IS_VALID_CHANNEL(__x__)
Definition: ntv2enums.h:1319
NTV2CCGrabber::PlayThreadStatic
static void PlayThreadStatic(AJAThread *pThread, void *pContext)
This is the playout thread's static callback function that gets called when the playout thread runs....
Definition: ntv2ccgrabber.cpp:1402
NTV2CCGrabber::SetupInputVideo
virtual AJAStatus SetupInputVideo(void)
Sets up everything I need for capturing video.
Definition: ntv2ccgrabber.cpp:257
CaptureConfig::fInputChannel
NTV2Channel fInputChannel
The device channel to use.
Definition: ntv2democommon.h:270
NTV2CCGrabber::ReleaseHostBuffers
virtual void ReleaseHostBuffers(void)
Releases my circular buffers.
Definition: ntv2ccgrabber.cpp:240
NTV2CCGrabber::CaptureFrames
virtual void CaptureFrames(void)
Repeatedly captures frames using AutoCirculate (until global quit flag set).
Definition: ntv2ccgrabber.cpp:648
ntv2vpid.h
Declares the CNTV2VPID class. See SMPTE 352 standard for details.
NTV2CCGrabber::Caption608ChangedStatic
static void Caption608ChangedStatic(void *pInstance, const NTV2Caption608ChangeInfo &inChangeInfo)
This static function gets called whenever 608 captioning changes.
Definition: ntv2ccgrabber.cpp:1548
NTV2CCGrabber::WaitForStableInputSignal
virtual NTV2VideoFormat WaitForStableInputSignal(void)
Wait for a stable input signal, and return it.
Definition: ntv2ccgrabber.cpp:824
NTV2Line21Mode
NTV2Line21Mode
The CEA-608 modes: pop-on, roll-up (2, 3 and 4-line), and paint-on.
Definition: ntv2caption608types.h:123
kCaptionDataSrc_708Anc
@ kCaptionDataSrc_708Anc
Definition: ntv2ccgrabber.h:52
kOutputMode_CaptionStream
@ kOutputMode_CaptionStream
Definition: ntv2ccgrabber.h:34
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...
NTV2CCGrabber::IsPlayThreadRunning
virtual bool IsPlayThreadRunning(void) const
Returns true if my play thread is currently running.
Definition: ntv2ccgrabber.h:165
NTV2_CC608_CC1
@ NTV2_CC608_CC1
Caption channel 1, the primary caption channel.
Definition: ntv2caption608types.h:84
NTV2CCGrabber::~NTV2CCGrabber
virtual ~NTV2CCGrabber()
Definition: ntv2ccgrabber.cpp:80
NTV2CCGrabber::SetCaptionDisplayChannel
virtual void SetCaptionDisplayChannel(const NTV2Line21Channel inNewChannel)
Changes the caption channel I'm displaying.
Definition: ntv2ccgrabber.cpp:1526
videotypes.h
Declares the enumeration constants used in the ajabase library.
NTV2CCGrabber
I can decode captions from frames captured from an AJA device in real time. I can optionally play the...
Definition: ntv2ccgrabber.h:111
NTV2XptConnections
std::map< NTV2InputXptID, NTV2OutputXptID > NTV2XptConnections
Definition: ntv2signalrouter.h:39
NTV2Line21Channel
NTV2Line21Channel
The CEA-608 caption channels: CC1 thru CC4, TX1 thru TX4, plus XDS.
Definition: ntv2caption608types.h:82
NTV2CCGrabber::Switch608Source
virtual void Switch608Source(void)
Switches/rotates –608src.
Definition: ntv2ccgrabber.cpp:951
NTV2VideoFormat
enum _NTV2VideoFormat NTV2VideoFormat
Identifies a particular video format.
kCaptionDataSrc_Default
@ kCaptionDataSrc_Default
Definition: ntv2ccgrabber.h:47
kCaptionDataSrc_Line21
@ kCaptionDataSrc_Line21
Definition: ntv2ccgrabber.h:48
NTV2EveryFrameTaskMode
NTV2EveryFrameTaskMode
Describes the task mode state. See also: Sharing AJA Devices With Other Applications.
Definition: ntv2publicinterface.h:4288
NTV2CCGrabber::RouteInputSignal
virtual bool RouteInputSignal(const NTV2VideoFormat inVideoFormat)
Definition: ntv2ccgrabber.cpp:386
NTV2_TCINDEX_INVALID
@ NTV2_TCINDEX_INVALID
Definition: ntv2enums.h:3900
CCGrabberConfig::CCGrabberConfig
CCGrabberConfig(const std::string &inDeviceSpecifier="0")
Constructs a default CCPlayer configuration.
Definition: ntv2ccgrabber.h:75
CCGrabberConfig::OutputModeToString
static std::string OutputModeToString(const OutputMode inMode)
Definition: ntv2ccgrabber.cpp:1598
kCaptionDataSrc_708FBVanc
@ kCaptionDataSrc_708FBVanc
Definition: ntv2ccgrabber.h:50
CCGrabberConfig::fUseVanc
bool fUseVanc
If true, use Vanc, even if the device supports Anc insertion.
Definition: ntv2ccgrabber.h:70
CaptionData
This structure encapsulates all possible CEA-608 caption data bytes that may be associated with a giv...
Definition: ntv2caption608types.h:655
circularbuffer.h
Declaration of AJACircularBuffer template class.
CCGrabberConfig::StringToCaptionDataSrc
static CaptionDataSrc StringToCaptionDataSrc(const std::string &inDataSrcStr)
Definition: ntv2ccgrabber.cpp:1664
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:3814
NTV2CCGrabber::CaptureThreadStatic
static void CaptureThreadStatic(AJAThread *pThread, void *pContext)
This is the capture thread's static callback function that gets called when the capture thread runs....
Definition: ntv2ccgrabber.cpp:636
thread.h
Declares the AJAThread class.
NTV2CCGrabber::NTV2CCGrabber
NTV2CCGrabber(const CCGrabberConfig &inConfigData)
Constructs me using the given configuration settings.
Definition: ntv2ccgrabber.cpp:40
NTV2CCGrabber::RouteOutputSignal
virtual bool RouteOutputSignal(const NTV2VideoFormat inVideoFormat)
Definition: ntv2ccgrabber.cpp:1311
CCGrabberConfig::fBurnCaptions
bool fBurnCaptions
If true, burn-in captions on 2nd channel.
Definition: ntv2ccgrabber.h:69
CCGrabberConfig::GetNumSourceSpecs
unsigned GetNumSourceSpecs(void) const
Definition: ntv2ccgrabber.h:87
CaptureConfig::fInputSource
NTV2InputSource fInputSource
The device input connector to use.
Definition: ntv2democommon.h:271
ntv2captiondecoder608.h
Declares the CNTV2CaptionDecoder608 class.
AJACircularBuffer< NTV2FrameData * >
NTV2CCGrabber::ToggleVANC
virtual void ToggleVANC(void)
Toggles the use of VANC. (Debug, experimental)
Definition: ntv2ccgrabber.cpp:933
kOutputMode_Stats
@ kOutputMode_Stats
Definition: ntv2ccgrabber.h:38
CaptureConfig::fWithAudio
bool fWithAudio
If true, also capture Audio.
Definition: ntv2democommon.h:278