AJA NTV2 SDK  18.1.0.2149
NTV2 SDK 18.1.0.2149
ntv2signalrouter.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef NTV2SIGNALROUTER_H
9 #define NTV2SIGNALROUTER_H
10 
11 #include "ajaexport.h"
12 #include "ntv2publicinterface.h"
13 #include <stddef.h>
14 #include <set>
15 #include <map>
16 
17 typedef std::set <NTV2OutputXptID> NTV2OutputCrosspointIDSet, NTV2OutputXptIDSet;
18 typedef NTV2OutputXptIDSet::const_iterator NTV2OutputCrosspointIDSetConstIter, NTV2OutputXptIDSetConstIter;
19 typedef NTV2OutputXptIDSet::iterator NTV2OutputCrosspointIDSetIter, NTV2OutputXptIDSetIter;
20 
21 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2OutputXptIDSet & inObj);
22 
24 
25 typedef std::set <NTV2InputXptID> NTV2InputCrosspointIDSet, NTV2InputXptIDSet;
26 typedef NTV2InputXptIDSet::const_iterator NTV2InputCrosspointIDSetConstIter, NTV2InputXptIDSetConstIter;
27 typedef NTV2InputXptIDSet::iterator NTV2InputCrosspointIDSetIter, NTV2InputXptIDSetIter;
28 
29 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2InputXptIDSet & inObj);
30 
31 typedef std::set <NTV2WidgetID> NTV2WidgetIDSet;
32 typedef NTV2WidgetIDSet::const_iterator NTV2WidgetIDSetConstIter;
33 
34 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2WidgetIDSet & inObj);
35 
36 
37 typedef std::pair <NTV2InputXptID, NTV2OutputXptID> NTV2SignalConnection, NTV2XptConnection, NTV2Connection;
38 typedef std::map <NTV2InputXptID, NTV2OutputXptID> NTV2XptConnections, NTV2ActualConnections;
39 typedef NTV2XptConnections::const_iterator NTV2XptConnectionsConstIter, NTV2ActualConnectionsConstIter;
40 typedef std::multimap <NTV2InputXptID, NTV2OutputXptID> NTV2PossibleConnections;
41 typedef NTV2PossibleConnections::const_iterator NTV2PossibleConnectionsConstIter;
42 
43 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2XptConnection & inObj);
44 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2XptConnections & inObj);
45 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2PossibleConnections & inObj); // New in SDK 18.1
46 
57 {
58  // Instance Methods
59  public:
60  inline CNTV2SignalRouter () {Reset ();}
61  virtual inline ~CNTV2SignalRouter () {}
62 
70  virtual bool AddConnection (const NTV2InputXptID inSignalInput, const NTV2OutputXptID inSignalOutput = NTV2_XptBlack);
71 
79  virtual bool RemoveConnection (const NTV2InputXptID inSignalInput, const NTV2OutputXptID inSignalOutput);
80 
88  virtual bool HasConnection (const NTV2InputXptID inSignalInput, const NTV2OutputXptID inSignalOutput) const;
89 
96  virtual bool HasInput (const NTV2InputXptID inSignalInput) const;
97 
103  virtual NTV2OutputXptID GetConnectedOutput (const NTV2InputXptID inSignalInput) const;
104 
109  virtual inline void Reset (void) {mConnections.clear ();}
110 
118  virtual bool ResetFromRegisters (const NTV2InputXptIDSet & inInputXpts, const NTV2RegisterReads & inRegReads);
119 
126  virtual bool ResetFrom (const NTV2XptConnections & inConnections) {mConnections = inConnections; return true;} // New in SDK 16.0
127 
132  virtual inline ULWord GetNumberOfConnections (void) const {return ULWord (mConnections.size ());}
133 
138  virtual inline bool IsEmpty (void) const {return mConnections.empty();}
139 
143  virtual inline NTV2XptConnections GetConnections (void) const {return mConnections;}
144 
150  virtual bool GetRegisterWrites (NTV2RegisterWrites & outRegWrites) const;
151 
164  virtual bool Compare (const CNTV2SignalRouter & inRHS,
165  NTV2XptConnections & outNew,
166  NTV2XptConnections & outChanged,
167  NTV2XptConnections & outMissing) const;
168 
174  virtual inline bool operator == (const CNTV2SignalRouter & inRHS) const {NTV2XptConnections tmp; return Compare(inRHS, tmp,tmp,tmp);}
175 
181  virtual inline bool operator != (const CNTV2SignalRouter & inRHS) const {return !(inRHS == *this);}
182 
190  virtual std::ostream & Print (std::ostream & inOutStream, const bool inForRetailDisplay = false) const;
191 
193  {
194  bool mShowComments = true;
195  bool mShowDeclarations = true;
196  bool mUseRouter = false;
197  std::string mPreCommentText = "// ";
198  std::string mPostCommentText = "";
199  std::string mPreClassText = "";
200  std::string mPostClassText = "";
201  std::string mPreVariableText = "";
202  std::string mPostVariableText = "";
203  std::string mPreXptText = "";
204  std::string mPostXptText = "";
205  std::string mPreFunctionText = "";
206  std::string mPostFunctionText = "";
207  std::string mDeviceVarName = "device";
208  std::string mRouterVarName = "router";
209  std::string mLineBreakText = "\n";
210  std::string mFieldBreakText = "\t";
211  NTV2XptConnections mNew = {};
212  NTV2XptConnections mChanged = {};
213  NTV2XptConnections mMissing = {};
214 
222  };
223 
232  virtual bool PrintCode (std::string & outCode, const PrintCodeConfig & inConfig = PrintCodeConfig()) const;
233 
234  // Instance Data
235  private:
236  typedef NTV2XptConnections::iterator NTV2XptConnectionsIter;
237 
238  NTV2XptConnections mConnections;
239 
240 
241  public: // CLASS METHODS
252  static bool GetRouteROMInfoFromReg (const ULWord inROMRegNum, const ULWord inROMRegValue,
253  NTV2InputXptID & outInputXpt, NTV2OutputXptIDSet & outOutputXpts,
254  const bool inAppendOutputXpts = false); // New in SDK 16.0; moved into CNTV2SignalRouter in SDK 16.1
255 
262  static bool GetPossibleConnections (const NTV2RegReads & inROMRegisters,
263  NTV2PossibleConnections & outConnections); // New in SDK 16.0; moved into CNTV2SignalRouter in SDK 16.1
264 
270  static bool MakeRouteROMRegisters (NTV2RegReads & outROMRegisters); // New in SDK 16.0; moved into CNTV2SignalRouter in SDK 16.1
271 
278  static std::string NTV2InputCrosspointIDToString (const NTV2InputXptID inInputXpt);
279 
286  static std::string NTV2OutputCrosspointIDToString (const NTV2OutputXptID inOutputXpt);
287 
294  static NTV2InputXptID StringToNTV2InputCrosspointID (const std::string & inStr);
295 
302  static NTV2OutputXptID StringToNTV2OutputCrosspointID (const std::string & inStr);
303 
310  static bool GetWidgetIDs (const NTV2DeviceID inDeviceID, NTV2WidgetIDSet & outWidgets);
311 
319  static bool GetWidgetsForOutput (const NTV2OutputXptID inOutputXpt, NTV2WidgetIDSet & outWidgetIDs);
320 
332  static bool GetWidgetForOutput (const NTV2OutputXptID inOutputXpt, NTV2WidgetID & outWidgetID, const NTV2DeviceID inDeviceID = DEVICE_ID_NOTFOUND);
333 
341  static bool GetWidgetsForInput (const NTV2InputXptID inInputXpt, NTV2WidgetIDSet & outWidgetIDs);
342 
353  static bool GetWidgetForInput (const NTV2InputXptID inInputXpt, NTV2WidgetID & outWidgetID, const NTV2DeviceID inDeviceID = DEVICE_ID_NOTFOUND);
354 
362  static bool GetWidgetInputs (const NTV2WidgetID inWidgetID, NTV2InputXptIDSet & outInputs);
363 
370  static bool GetAllWidgetInputs (const NTV2DeviceID inDeviceID, NTV2InputXptIDSet & outInputs);
371 
378  static bool GetAllRoutingRegInfos (const NTV2InputXptIDSet & inInputs, NTV2RegisterWrites & outRegInfos);
379 
387  static bool GetWidgetOutputs (const NTV2WidgetID inWidgetID, NTV2OutputXptIDSet & outOutputs);
388 
395  static bool GetAllWidgetOutputs (const NTV2DeviceID inDeviceID, NTV2OutputXptIDSet & outOutputs); // New in SDK 17.5
396 
404  static bool GetConnectionsFromRegs (const NTV2InputXptIDSet & inInputXptIDs, const NTV2RegisterReads & inRegValues, NTV2XptConnections & outConnections); // New in SDK 16.0
405 
410  static bool IsRGBOnlyInputXpt (const NTV2InputXptID inInputXpt); // New in SDK 16.0
411 
416  static bool IsYUVOnlyInputXpt (const NTV2InputXptID inInputXpt); // New in SDK 16.0
417 
422  static bool IsKeyInputXpt (const NTV2InputXptID inInputXpt); // New in SDK 16.0
423 
428  static NTV2Channel WidgetIDToChannel (const NTV2WidgetID inWidgetID); // New in SDK 16.1
429 
435  static NTV2WidgetID WidgetIDFromTypeAndChannel(const NTV2WidgetType inWidgetType, const NTV2Channel inChannel); // New in SDK 16.1
436 
441  static NTV2WidgetType WidgetIDToType (const NTV2WidgetID inWidgetID); // New in SDK 16.1
442 
447  static bool IsSDIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
448 
453  static bool IsSDIInputWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
454 
459  static bool IsSDIOutputWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
460 
465  static bool Is3GSDIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
466 
471  static bool Is12GSDIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
472 
477  static bool IsDualLinkWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
478 
483  static bool IsDualLinkInWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
484 
489  static bool IsDualLinkOutWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
490 
495  static bool IsHDMIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
496 
501  static bool IsHDMIInWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
502 
507  static bool IsHDMIOutWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
508 
517  static bool CompareConnections (const NTV2XptConnections & inLHS,
518  const NTV2XptConnections & inRHS,
519  NTV2XptConnections & outNew,
520  NTV2XptConnections & outRemoved); // New in SDK 16.0
521 
531  static bool CreateFromString (const std::string & inString, NTV2XptConnections & outConnections); // New in SDK 16.0
532 
541  static bool CreateFromString (const std::string & inString, NTV2PossibleConnections & outConns); // New in SDK 18.1
542 
551  static bool CreateFromString (const std::string & inString, CNTV2SignalRouter & outRouter);
552 
562  static bool ToCodeString (std::string & outCode, const NTV2XptConnections & inConnections,
563  const PrintCodeConfig & inConfig = PrintCodeConfig()); // New in SDK 16.0
564 
565  static bool IsInitialized(void);
566 
574  static bool Initialize(void);
575 
583  static bool Deinitialize(void);
584 
585 }; // CNTV2SignalRouter
586 
587 
593 AJAExport NTV2InputXptID GetFrameStoreInputXptFromChannel (const NTV2Channel inFrameStore, const bool inIsBInput = false); // Renamed in SDK 17.5
594 
600 AJAExport NTV2InputXptID GetCSCInputXptFromChannel (const NTV2Channel inCSC, const bool inIsKeyInput = false);
601 
606 AJAExport NTV2InputXptID GetLUTInputXptFromChannel (const NTV2Channel inLUT); // New in SDK 16.0
607 
613 AJAExport NTV2InputXptID GetDLInInputXptFromChannel (const NTV2Channel inChannel, const bool inLinkB = false);
614 
620 
628 AJAExport NTV2OutputXptID GetCSCOutputXptFromChannel (const NTV2Channel inCSC, const bool inIsKey = false, const bool inIsRGB = false);
629 
634 AJAExport NTV2OutputXptID GetLUTOutputXptFromChannel (const NTV2Channel inLUT); // New in SDK 16.0
635 
642 AJAExport NTV2OutputXptID GetFrameStoreOutputXptFromChannel (const NTV2Channel inFrameStore, const bool inIsRGB = false, const bool inIs425 = false); // Renamed in SDK 17.5
643 
656 AJAExport NTV2OutputXptID GetInputSourceOutputXpt (const NTV2InputSource inInputSource, const bool inIsSDI_DS2 = false,
657  const bool inIsHDMI_RGB = false, const UWord inHDMI_Quadrant = 0);
658 
664 AJAExport NTV2OutputXptID GetSDIInputOutputXptFromChannel (const NTV2Channel inSDIInput, const bool inIsDS2 = false);
665 
671 AJAExport NTV2OutputXptID GetDLOutOutputXptFromChannel(const NTV2Channel inDLOutput, const bool inIsLinkB = false);
672 
678 
689 AJAExport NTV2InputXptID GetOutputDestInputXpt (const NTV2OutputDestination inOutputDest, const bool inIsSDI_DS2 = false, const UWord inHDMI_Quadrant = 99);
690 
696 AJAExport NTV2InputXptID GetSDIOutputInputXpt (const NTV2Channel inSDIOutput, const bool inIsDS2 = false);
697 
704 AJAExport NTV2OutputXptID GetMixerOutputXptFromChannel (const NTV2Channel inChannel, const bool inIsKey = false);
705 
712 AJAExport NTV2InputXptID GetMixerFGInputXpt (const NTV2Channel inChannel, const bool inIsKey = false);
713 
720 AJAExport NTV2InputXptID GetMixerBGInputXpt (const NTV2Channel inChannel, const bool inIsKey = false);
721 
727 AJAExport NTV2InputXptID GetTSIMuxInputXptFromChannel(const NTV2Channel inTSIMuxer, const bool inLinkB = false);
728 
735 AJAExport NTV2OutputXptID GetTSIMuxOutputXptFromChannel (const NTV2Channel inTSIMuxer, const bool inLinkB = false, const bool inIsRGB = false);
736 
737 
738 // Stream operators
739 AJAExport std::ostream & operator << (std::ostream & inOutStream, const CNTV2SignalRouter & inObj);
740 
741 #if !defined(NTV2_DEPRECATE_17_5)
742  #define GetFrameBufferOutputXptFromChannel GetFrameStoreOutputXptFromChannel
743  #define GetFrameBufferInputXptFromChannel GetFrameStoreInputXptFromChannel
744 #endif // !defined(NTV2_DEPRECATE_17_5)
745 
746 #endif // NTV2SIGNALROUTER_H
NTV2OutputCrosspointIDSet NTV2CrosspointIDSet
NTV2XptConnections::const_iterator NTV2XptConnectionsConstIter
NTV2InputXptIDSet::const_iterator NTV2InputXptIDSetConstIter
A const iterator for iterating over an NTV2InputXptIDSet.
virtual ULWord GetNumberOfConnections(void) const
NTV2OutputXptIDSet::iterator NTV2OutputCrosspointIDSetIter
virtual void Reset(void)
Resets me, erasing any/all existing connections.
NTV2OutputDestination
Identifies a specific video output destination.
Definition: ntv2enums.h:1326
virtual bool IsEmpty(void) const
std::map< NTV2InputXptID, NTV2OutputXptID > NTV2ActualConnections
A map of zero or more one-to-one actual NTV2InputXptID to NTV2OutputXptID connections.
NTV2InputXptID GetDLOutInputXptFromChannel(const NTV2Channel inDLOutWidget)
NTV2OutputXptID GetTSIMuxOutputXptFromChannel(const NTV2Channel inTSIMuxer, const bool inLinkB=false, const bool inIsRGB=false)
NTV2InputXptID GetDLInInputXptFromChannel(const NTV2Channel inChannel, const bool inLinkB=false)
std::ostream & operator<<(std::ostream &inOutStream, const NTV2OutputXptIDSet &inObj)
NTV2OutputXptIDSet::iterator NTV2OutputXptIDSetIter
A non-const iterator for iterating over an NTV2OutputXptIDSet.
std::set< NTV2OutputXptID > NTV2OutputCrosspointIDSet
virtual NTV2XptConnections GetConnections(void) const
bool operator!=(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
Definition: json.hpp:14762
std::pair< NTV2InputXptID, NTV2OutputXptID > NTV2Connection
This links an NTV2InputXptID and an NTV2OutputXptID.
uint32_t ULWord
Definition: ajatypes.h:236
NTV2OutputXptID GetDLOutOutputXptFromChannel(const NTV2Channel inDLOutput, const bool inIsLinkB=false)
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They&#39;re also commonly use...
Definition: ntv2enums.h:1359
NTV2OutputXptIDSet::const_iterator NTV2OutputXptIDSetConstIter
A const iterator for iterating over an NTV2OutputXptIDSet.
This class is a collection of widget input-to-output connections that can be applied all-at-once to a...
NTV2WidgetType
Definition: ntv2enums.h:3050
NTV2OutputXptID GetInputSourceOutputXpt(const NTV2InputSource inInputSource, const bool inIsSDI_DS2=false, const bool inIsHDMI_RGB=false, const UWord inHDMI_Quadrant=0)
NTV2OutputXptIDSet::const_iterator NTV2OutputCrosspointIDSetConstIter
std::string NTV2InputCrosspointIDToString(const NTV2InputCrosspointID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:5816
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
NTV2InputXptID GetOutputDestInputXpt(const NTV2OutputDestination inOutputDest, const bool inIsSDI_DS2=false, const UWord inHDMI_Quadrant=99)
Invalid or "not found".
Definition: ntv2enums.h:100
Defines the import/export macros for producing DLLs or LIBs.
NTV2InputXptID GetCSCInputXptFromChannel(const NTV2Channel inCSC, const bool inIsKeyInput=false)
std::set< NTV2WidgetID > NTV2WidgetIDSet
A collection of distinct NTV2WidgetID values.
NTV2InputXptID GetFrameStoreInputXptFromChannel(const NTV2Channel inFrameStore, const bool inIsBInput=false)
NTV2InputXptIDSet::iterator NTV2InputCrosspointIDSetIter
NTV2InputXptID GetMixerBGInputXpt(const NTV2Channel inChannel, const bool inIsKey=false)
NTV2RegWrites NTV2RegisterReads
NTV2InputXptID GetLUTInputXptFromChannel(const NTV2Channel inLUT)
std::pair< NTV2InputXptID, NTV2OutputXptID > NTV2SignalConnection
NTV2OutputXptID GetDLInOutputXptFromChannel(const NTV2Channel inDLInput)
NTV2PossibleConnections::const_iterator NTV2PossibleConnectionsConstIter
NTV2InputSource
Identifies a specific video input source.
Definition: ntv2enums.h:1264
NTV2InputXptIDSet::const_iterator NTV2InputCrosspointIDSetConstIter
NTV2WidgetIDSet::const_iterator NTV2WidgetIDSetConstIter
An iterator for iterating over a read-only NTV2WidgetIDSet.
bool operator==(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
Definition: json.hpp:14737
NTV2OutputXptID GetLUTOutputXptFromChannel(const NTV2Channel inLUT)
NTV2InputXptID GetTSIMuxInputXptFromChannel(const NTV2Channel inTSIMuxer, const bool inLinkB=false)
#define AJAExport
Definition: export.h:33
std::set< NTV2InputXptID > NTV2InputXptIDSet
A collection of distinct NTV2InputXptID values.
PrintCodeConfig()
Default constructor sets the following default settings:
NTV2OutputXptID GetFrameStoreOutputXptFromChannel(const NTV2Channel inFrameStore, const bool inIsRGB=false, const bool inIs425=false)
NTV2WidgetID
Definition: ntv2enums.h:2912
uint16_t UWord
Definition: ajatypes.h:234
NTV2InputXptIDSet::iterator NTV2InputXptIDSetIter
A non-const iterator for iterating over an NTV2InputXptIDSet.
NTV2InputXptID GetMixerFGInputXpt(const NTV2Channel inChannel, const bool inIsKey=false)
NTV2OutputXptID GetMixerOutputXptFromChannel(const NTV2Channel inChannel, const bool inIsKey=false)
std::pair< NTV2InputXptID, NTV2OutputXptID > NTV2XptConnection
enum NTV2InputCrosspointID NTV2InputXptID
std::multimap< NTV2InputXptID, NTV2OutputXptID > NTV2PossibleConnections
A map of zero or more one-to-many possible NTV2InputXptID to NTV2OutputXptID connections.
std::set< NTV2InputXptID > NTV2InputCrosspointIDSet
CNTV2SignalRouter()
My default constructor.
std::string NTV2OutputCrosspointIDToString(const NTV2OutputCrosspointID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:5959
std::map< NTV2InputXptID, NTV2OutputXptID > NTV2XptConnections
NTV2OutputXptID GetSDIInputOutputXptFromChannel(const NTV2Channel inSDIInput, const bool inIsDS2=false)
virtual bool ResetFrom(const NTV2XptConnections &inConnections)
Resets me, replacing any/all existing connections with the given connections.
NTV2XptConnections::const_iterator NTV2ActualConnectionsConstIter
std::vector< NTV2RegInfo > NTV2RegisterWrites
NTV2RegWrites NTV2RegReads
An ordered sequence of zero or more NTV2RegInfo structs intended for ReadRegister.
Declares enums and structs used by all platform drivers and the SDK.
NTV2InputXptID GetSDIOutputInputXpt(const NTV2Channel inSDIOutput, const bool inIsDS2=false)
std::set< NTV2OutputXptID > NTV2OutputXptIDSet
A collection of distinct NTV2OutputXptID values.
enum NTV2OutputCrosspointID NTV2OutputXptID
NTV2OutputXptID GetCSCOutputXptFromChannel(const NTV2Channel inCSC, const bool inIsKey=false, const bool inIsRGB=false)
virtual ~CNTV2SignalRouter()
My default destructor.