AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
ntv2dolbyplayer.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #ifndef _NTV2DOLBYPLAYER_H
10 #define _NTV2DOLBYPLAYER_H
11 
12 
13 #include "ntv2democommon.h"
14 #include "ajabase/system/thread.h"
16 #include "ajabase/system/file_io.h"
17 
18 
19 #define DOLBY_FULL_PARSER // If defined, parse EC3 files with multiple sync frames per HDMI burst; otherwise parse with single sync frame per HDMI burst.
20 
21 
25 typedef struct DolbyPlayerConfig : public PlayerConfig
26 {
27  public:
28  bool fDoRamp;
29  std::string fDolbyFilePath;
30 
34  inline explicit DolbyPlayerConfig (const std::string & inDeviceSpecifier = "0")
35  : PlayerConfig (inDeviceSpecifier),
36  fDoRamp (false)
37  {
38  }
39 
40  AJALabelValuePairs Get (const bool inCompact = false) const;
41 
43 
44 // Takes DolbyPlayerConfig << operator overload takes precedence over the PlayConfig one declared in ntv2democommon.h
45 AJAExport std::ostream & operator << (std::ostream & ioStrm, const DolbyPlayerConfig & inObj);
46 
53 {
54  // Public Instance Methods
55  public:
56 
62  NTV2DolbyPlayer (const DolbyPlayerConfig & inConfigData);
63 
64  virtual ~NTV2DolbyPlayer (void);
65 
66  virtual AJAStatus Init (void);
67 
72  virtual AJAStatus Run (void);
73 
74  virtual void Quit (void);
75 
76  virtual bool IsRunning (void) const {return !mGlobalQuit;}
77 
82  virtual void GetACStatus (AUTOCIRCULATE_STATUS & outStatus);
83 
84 
85  // Protected Instance Methods
86  protected:
87  struct NTV2DolbyBSI
88  {
89  uint32_t strmtyp;
90  uint32_t substreamid;
91  uint32_t frmsiz;
92  uint32_t fscod;
93  uint32_t numblkscod;
94  uint32_t acmod;
95  uint32_t lfeon;
96  uint32_t bsid;
97  uint32_t dialnorm;
98  uint32_t compre;
99  uint32_t compr;
100  uint32_t dialnorm2;
101  uint32_t compr2e;
102  uint32_t compr2;
103  uint32_t chanmape;
104  uint32_t chanmap;
105  uint32_t mixmdate;
106  uint32_t dmixmod;
107  uint32_t ltrtcmixlev;
108  uint32_t lorocmixlev;
109  uint32_t ltrtsurmixlev;
110  uint32_t lorosurmixlev;
111  uint32_t lfemixlevcode;
112  uint32_t lfemixlevcod;
113  uint32_t pgmscle;
114  uint32_t pgmscl;
115  uint32_t pgmscl2e;
116  uint32_t pgmscl2;
117  uint32_t extpgmscle;
118  uint32_t extpgmscl;
119  uint32_t mixdef;
120  uint32_t premixcmpsel;
121  uint32_t drcsrc;
122  uint32_t premixcmpscl;
123  uint32_t mixdata;
124  uint32_t mixdeflen;
125  uint32_t mixdata2e;
126  uint32_t extpgmlscle;
127  uint32_t extpgmlscl;
128  uint32_t extpgmcscle;
129  uint32_t extpgmcscl;
130  uint32_t extpgmrscle;
131  uint32_t extpgmrscl;
132  uint32_t extpgmlsscle;
133  uint32_t extpgmlsscl;
134  uint32_t extpgmrsscle;
135  uint32_t extpgmrsscl;
136  uint32_t extpgmlfescle;
137  uint32_t extpgmlfescl;
138  uint32_t dmixscle;
139  uint32_t dmixscl;
140  uint32_t addche;
141  uint32_t extpgmaux1scle;
142  uint32_t extpgmaux1scl;
143  uint32_t extpgmaux2scle;
144  uint32_t extpgmaux2scl;
145  uint32_t mixdata3e;
146  uint32_t spchdat;
147  uint32_t addspchdate;
148  uint32_t spchdat1;
149  uint32_t spchan1att;
150  uint32_t addspchdat1e;
151  uint32_t addspdat1e;
152  uint32_t spchdat2;
153  uint32_t spchan2att;
154  uint8_t mixdatabuffer[64];
155  uint32_t paninfoe;
156  uint32_t panmean;
157  uint32_t paninfo;
158  uint32_t paninfo2e;
159  uint32_t panmean2;
160  uint32_t paninfo2;
161  uint32_t frmmixcfginfoe;
162  uint32_t blkmixcfginfo[6];
163  uint32_t blkmixcfginfoe;
164  uint32_t infomdate;
165  uint32_t bsmod;
166  uint32_t copyrightb;
167  uint32_t origbs;
168  uint32_t dsurmod;
169  uint32_t dheadphonmod;
170  uint32_t dsurexmod;
171  uint32_t audprodie;
172  uint32_t mixlevel;
173  uint32_t roomtyp;
174  uint32_t adconvtyp;
175  uint32_t audprodi2e;
176  uint32_t mixlevel2;
177  uint32_t roomtyp2;
178  uint32_t adconvtyp2;
179  uint32_t sourcefscod;
180  uint32_t convsync;
181  uint32_t blkid;
182  uint32_t frmsizecod;
183  uint32_t addbsie;
184  uint32_t addbsil;
185  uint8_t addbsibuffer[64];
186  };
187 
188  virtual AJAStatus SetUpVideo (void);
189  virtual AJAStatus SetUpAudio (void);
190  virtual bool RouteOutputSignal (void);
191  virtual AJAStatus SetUpHostBuffers (void);
192  virtual AJAStatus SetUpTestPatternBuffers (void);
193  virtual void StartConsumerThread (void);
194  virtual void ConsumeFrames (void);
195  virtual void StartProducerThread (void);
196  virtual void ProduceFrames (void);
197 
203  virtual uint32_t AddTone (NTV2FrameData & inFrameData);
204 
211  virtual uint32_t AddRamp (NTV2FrameData & inFrameData);
212 
219  virtual uint32_t AddDolby (NTV2FrameData & inFrameData);
220 
221 #ifdef DOLBY_FULL_PARSER
222 
229  virtual bool GetDolbyFrame (uint16_t * pInDolbyBuffer, uint32_t & numSamples);
230 
239  virtual bool ParseBSI (uint16_t * pInDolbyBuffer, uint32_t numSamples, NTV2DolbyBSI * pBsi);
240 
241 
247  virtual void SetBitBuffer (uint8_t * pBuffer, uint32_t size);
248 
255  virtual bool GetBits (uint32_t & data, uint32_t inBitCount);
256 #endif
257 
258  // Protected Class Methods
259  protected:
267  static void ConsumerThreadStatic (AJAThread * pThread, void * pContext);
268 
276  static void ProducerThreadStatic (AJAThread * pThread, void * pContext);
277 
278 
279  // Private Member Data
280  private:
281  //typedef AJACircularBuffer <AVDataBuffer *> MyCirculateBuffer;
282  typedef std::vector<NTV2Buffer> NTV2Buffers;
283 
284  DolbyPlayerConfig mConfig;
285  AJAThread mConsumerThread;
286  AJAThread mProducerThread;
287  CNTV2Card mDevice;
288  NTV2TaskMode mSavedTaskMode;
289  ULWord mCurrentFrame;
290  ULWord mCurrentSample;
291  double mToneFrequency;
292  NTV2AudioSystem mAudioSystem;
293  NTV2FormatDesc mFormatDesc;
294  NTV2TCIndexes mTCIndexes;
295  bool mGlobalQuit;
296  AJATimeCodeBurn mTCBurner;
297  NTV2FrameDataArray mHostBuffers;
298  FrameDataRingBuffer mFrameDataRing;
299  NTV2Buffers mTestPatRasters;
300  AJAFileIO mDolbyFileIO;
301  NTV2AudioRate mAudioRate;
302  uint16_t mRampSample;
303  uint32_t mBurstIndex;
304  uint32_t mBurstSamples;
305  uint16_t * mBurstBuffer;
306  uint32_t mBurstSize;
307  uint32_t mBurstOffset;
308  uint32_t mBurstMax;
309  uint16_t * mDolbyBuffer;
310  uint32_t mDolbySize;
311  uint32_t mDolbyBlocks;
312  uint8_t * mBitBuffer;
313  ULWord mBitSize;
314  ULWord mBitIndex;
315 }; // NTV2DolbyPlayer
316 
317 #endif // _NTV2DOLBY_H
virtual bool GetDolbyFrame(uint16_t *pInDolbyBuffer, uint32_t &numSamples)
Get a dolby audio frame from the input file.
static void ProducerThreadStatic(AJAThread *pThread, void *pContext)
This is the producer thread&#39;s static callback function that gets called when the producer thread star...
std::ostream & operator<<(std::ostream &ioStrm, const DolbyPlayerConfig &inObj)
NTV2AudioSystem
Used to identify an Audio System on an NTV2 device. See Audio System Operation for more information...
Definition: ntv2enums.h:3895
std::set< NTV2TCIndex > NTV2TCIndexes
DolbyPlayerConfig(const std::string &inDeviceSpecifier="0")
Constructs a default DolbyPlayer configuration.
virtual AJAStatus Run(void)
Runs me.
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:28
NTV2TaskMode
Describes the task mode state. See also: Sharing AJA Devices With Other Applications.
AJAStatus
Definition: types.h:380
AJALabelValuePairs Get(const bool inCompact=(0)) const
virtual AJAStatus SetUpHostBuffers(void)
Sets up my host video & audio buffers.
virtual AJAStatus SetUpAudio(void)
Performs all audio setup.
std::vector< AJALabelValuePair > AJALabelValuePairs
An ordered sequence of label/value pairs.
Definition: info.h:71
DolbyPlayerConfig DolbyPlayerConfig
Configures an NTV2DolbyPlayer instance.
virtual AJAStatus SetUpVideo(void)
Performs all video setup.
I am similar to NTV2Player, but I demonstrate how to play/output 8 channels of audio tone (or ramp da...
Declares the AJATimeCodeBurn class.
#define false
uint32_t ULWord
Definition: ajatypes.h:223
Declares the AJAThread class.
virtual void ConsumeFrames(void)
My consumer thread that repeatedly plays frames using AutoCirculate (until quit). ...
Declares the AJAFileIO class.
virtual void ProduceFrames(void)
My producer thread that repeatedly produces video frames.
virtual uint32_t AddDolby(NTV2FrameData &inFrameData)
Inserts dolby audio into the given NTV2FrameData&#39;s audio buffer.
Describes a video frame for a given video standard or format and pixel format, including the total nu...
NTV2DolbyPlayer(const DolbyPlayerConfig &inConfigData)
Constructs me using the given configuration settings.
Configures an NTV2DolbyPlayer instance.
virtual void Quit(void)
Gracefully stops me from running.
virtual uint32_t AddTone(NTV2FrameData &inFrameData)
Inserts audio tone (based on my current tone frequency) into the given NTV2FrameData&#39;s audio buffer...
virtual void StartProducerThread(void)
Starts my producer thread.
virtual AJAStatus SetUpTestPatternBuffers(void)
Creates my test pattern buffers.
std::string fDolbyFilePath
Optional path to Dolby audio source file.
std::vector< NTV2FrameData > NTV2FrameDataArray
A vector of NTV2FrameData elements.
bool fDoRamp
If true, use audio ramp pattern instead of tone.
#define AJAExport
Definition: export.h:33
virtual bool ParseBSI(uint16_t *pInDolbyBuffer, uint32_t numSamples, NTV2DolbyBSI *pBsi)
Parse the dolby audio bit stream information block.
virtual void StartConsumerThread(void)
Starts my consumer thread.
This is returned from the CNTV2Card::AutoCirculateGetStatus function.
virtual uint32_t AddRamp(NTV2FrameData &inFrameData)
Inserts audio test ramp into the given NTV2FrameData&#39;s audio buffer.
virtual bool RouteOutputSignal(void)
Performs all widget/signal routing for playout.
virtual bool IsRunning(void) const
static void ConsumerThreadStatic(AJAThread *pThread, void *pContext)
This is the consumer thread&#39;s static callback function that gets called when the consumer thread star...
virtual AJAStatus Init(void)
Initializes me and prepares me to Run.
I encapsulate the video, audio and anc host buffers used in the AutoCirculate demos. I&#39;m a more modern version of the AVDataBuffer.
virtual void GetACStatus(AUTOCIRCULATE_STATUS &outStatus)
Provides status information about my output (playout) process.
This file contains some structures, constants, classes and functions that are used in some of the dem...
Configures an NTV2Player instance.
NTV2AudioRate
Definition: ntv2enums.h:1928
virtual bool GetBits(uint32_t &data, uint32_t inBitCount)
Retreive the specified number of bits from the bitstream buffer.
I am a circular frame buffer that simplifies implementing a type-safe producer/consumer model for pro...
virtual ~NTV2DolbyPlayer(void)
virtual void SetBitBuffer(uint8_t *pBuffer, uint32_t size)
Set the bitstream buffer for bit retrieval.