AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
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 <sstream>
15 #include <set>
16 #include <map>
17 
18 typedef std::set <NTV2OutputXptID> NTV2OutputCrosspointIDSet, NTV2OutputXptIDSet;
19 typedef NTV2OutputXptIDSet::const_iterator NTV2OutputCrosspointIDSetConstIter, NTV2OutputXptIDSetConstIter;
20 typedef NTV2OutputXptIDSet::iterator NTV2OutputCrosspointIDSetIter, NTV2OutputXptIDSetIter;
21 
22 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2OutputXptIDSet & inObj);
23 
25 
26 typedef std::set <NTV2InputXptID> NTV2InputCrosspointIDSet, NTV2InputXptIDSet;
27 typedef NTV2InputXptIDSet::const_iterator NTV2InputCrosspointIDSetConstIter, NTV2InputXptIDSetConstIter;
28 typedef NTV2InputXptIDSet::iterator NTV2InputCrosspointIDSetIter, NTV2InputXptIDSetIter;
29 
30 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2InputXptIDSet & inObj);
31 
32 typedef std::set <NTV2WidgetID> NTV2WidgetIDSet;
33 typedef NTV2WidgetIDSet::const_iterator NTV2WidgetIDSetConstIter;
34 
35 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2WidgetIDSet & inObj);
36 
37 
38 typedef std::pair <NTV2InputXptID, NTV2OutputXptID> NTV2SignalConnection, NTV2XptConnection, NTV2Connection;
39 typedef std::map <NTV2InputXptID, NTV2OutputXptID> NTV2XptConnections, NTV2ActualConnections;
40 typedef NTV2XptConnections::const_iterator NTV2XptConnectionsConstIter, NTV2ActualConnectionsConstIter;
41 typedef std::multimap <NTV2InputXptID, NTV2OutputXptID> NTV2PossibleConnections;
42 typedef NTV2PossibleConnections::const_iterator NTV2PossibleConnectionsConstIter;
43 
44 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2XptConnection & inObj);
45 AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2XptConnections & inObj);
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  {
196  bool mUseRouter;
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;
208  std::string mRouterVarName;
209  std::string mLineBreakText;
210  std::string mFieldBreakText;
214 
220  PrintCodeConfig ();
221  };
222 
231  virtual bool PrintCode (std::string & outCode, const PrintCodeConfig & inConfig = PrintCodeConfig()) const;
232 
233  // Instance Data
234  private:
235  typedef NTV2XptConnections::iterator NTV2XptConnectionsIter;
236 
237  NTV2XptConnections mConnections;
238 
239 
240  public: // CLASS METHODS
251  static bool GetRouteROMInfoFromReg (const ULWord inROMRegNum, const ULWord inROMRegValue,
252  NTV2InputXptID & outInputXpt, NTV2OutputXptIDSet & outOutputXpts,
253  const bool inAppendOutputXpts = false); // New in SDK 16.0; moved into CNTV2SignalRouter in SDK 16.1
254 
261  static bool GetPossibleConnections (const NTV2RegReads & inROMRegisters,
262  NTV2PossibleConnections & outConnections); // New in SDK 16.0; moved into CNTV2SignalRouter in SDK 16.1
263 
269  static bool MakeRouteROMRegisters (NTV2RegReads & outROMRegisters); // New in SDK 16.0; moved into CNTV2SignalRouter in SDK 16.1
270 
277  static std::string NTV2InputCrosspointIDToString (const NTV2InputXptID inInputXpt);
278 
285  static std::string NTV2OutputCrosspointIDToString (const NTV2OutputXptID inOutputXpt);
286 
293  static NTV2InputXptID StringToNTV2InputCrosspointID (const std::string & inStr);
294 
301  static NTV2OutputXptID StringToNTV2OutputCrosspointID (const std::string & inStr);
302 
309  static bool GetWidgetIDs (const NTV2DeviceID inDeviceID, NTV2WidgetIDSet & outWidgets);
310 
318  static bool GetWidgetsForOutput (const NTV2OutputXptID inOutputXpt, NTV2WidgetIDSet & outWidgetIDs);
319 
331  static bool GetWidgetForOutput (const NTV2OutputXptID inOutputXpt, NTV2WidgetID & outWidgetID, const NTV2DeviceID inDeviceID = DEVICE_ID_NOTFOUND);
332 
340  static bool GetWidgetsForInput (const NTV2InputXptID inInputXpt, NTV2WidgetIDSet & outWidgetIDs);
341 
352  static bool GetWidgetForInput (const NTV2InputXptID inInputXpt, NTV2WidgetID & outWidgetID, const NTV2DeviceID inDeviceID = DEVICE_ID_NOTFOUND);
353 
361  static bool GetWidgetInputs (const NTV2WidgetID inWidgetID, NTV2InputXptIDSet & outInputs);
362 
369  static bool GetAllWidgetInputs (const NTV2DeviceID inDeviceID, NTV2InputXptIDSet & outInputs);
370 
377  static bool GetAllRoutingRegInfos (const NTV2InputXptIDSet & inInputs, NTV2RegisterWrites & outRegInfos);
378 
386  static bool GetWidgetOutputs (const NTV2WidgetID inWidgetID, NTV2OutputXptIDSet & outOutputs);
387 
394  static bool GetAllWidgetOutputs (const NTV2DeviceID inDeviceID, NTV2OutputXptIDSet & outOutputs); // New in SDK 17.5
395 
403  static bool GetConnectionsFromRegs (const NTV2InputXptIDSet & inInputXptIDs, const NTV2RegisterReads & inRegValues, NTV2XptConnections & outConnections); // New in SDK 16.0
404 
409  static bool IsRGBOnlyInputXpt (const NTV2InputXptID inInputXpt); // New in SDK 16.0
410 
415  static bool IsYUVOnlyInputXpt (const NTV2InputXptID inInputXpt); // New in SDK 16.0
416 
421  static bool IsKeyInputXpt (const NTV2InputXptID inInputXpt); // New in SDK 16.0
422 
427  static NTV2Channel WidgetIDToChannel (const NTV2WidgetID inWidgetID); // New in SDK 16.1
428 
434  static NTV2WidgetID WidgetIDFromTypeAndChannel(const NTV2WidgetType inWidgetType, const NTV2Channel inChannel); // New in SDK 16.1
435 
440  static NTV2WidgetType WidgetIDToType (const NTV2WidgetID inWidgetID); // New in SDK 16.1
441 
446  static bool IsSDIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
447 
452  static bool IsSDIInputWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
453 
458  static bool IsSDIOutputWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
459 
464  static bool Is3GSDIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
465 
470  static bool Is12GSDIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
471 
476  static bool IsDualLinkWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
477 
482  static bool IsDualLinkInWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
483 
488  static bool IsDualLinkOutWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
489 
494  static bool IsHDMIWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
495 
500  static bool IsHDMIInWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
501 
506  static bool IsHDMIOutWidgetType (const NTV2WidgetType inWidgetType); // New in SDK 16.1
507 
516  static bool CompareConnections (const NTV2XptConnections & inLHS,
517  const NTV2XptConnections & inRHS,
518  NTV2XptConnections & outNew,
519  NTV2XptConnections & outRemoved); // New in SDK 16.0
520 
530  static bool CreateFromString (const std::string & inString, NTV2XptConnections & outConnections); // New in SDK 16.0
531 
540  static bool CreateFromString (const std::string & inString, CNTV2SignalRouter & outRouter);
541 
551  static bool ToCodeString (std::string & outCode, const NTV2XptConnections & inConnections,
552  const PrintCodeConfig & inConfig = PrintCodeConfig()); // New in SDK 16.0
553 
554  static bool IsInitialized(void);
555 
563  static bool Initialize(void);
564 
572  static bool Deinitialize(void);
573 
574 }; // CNTV2SignalRouter
575 
576 
582 AJAExport NTV2InputXptID GetFrameStoreInputXptFromChannel (const NTV2Channel inFrameStore, const bool inIsBInput = false); // Renamed in SDK 17.5
583 
589 AJAExport NTV2InputXptID GetCSCInputXptFromChannel (const NTV2Channel inCSC, const bool inIsKeyInput = false);
590 
595 AJAExport NTV2InputXptID GetLUTInputXptFromChannel (const NTV2Channel inLUT); // New in SDK 16.0
596 
602 AJAExport NTV2InputXptID GetDLInInputXptFromChannel (const NTV2Channel inChannel, const bool inLinkB = false);
603 
609 
617 AJAExport NTV2OutputXptID GetCSCOutputXptFromChannel (const NTV2Channel inCSC, const bool inIsKey = false, const bool inIsRGB = false);
618 
623 AJAExport NTV2OutputXptID GetLUTOutputXptFromChannel (const NTV2Channel inLUT); // New in SDK 16.0
624 
631 AJAExport NTV2OutputXptID GetFrameStoreOutputXptFromChannel (const NTV2Channel inFrameStore, const bool inIsRGB = false, const bool inIs425 = false); // Renamed in SDK 17.5
632 
645 AJAExport NTV2OutputXptID GetInputSourceOutputXpt (const NTV2InputSource inInputSource, const bool inIsSDI_DS2 = false,
646  const bool inIsHDMI_RGB = false, const UWord inHDMI_Quadrant = 0);
647 
653 AJAExport NTV2OutputXptID GetSDIInputOutputXptFromChannel (const NTV2Channel inSDIInput, const bool inIsDS2 = false);
654 
660 AJAExport NTV2OutputXptID GetDLOutOutputXptFromChannel(const NTV2Channel inDLOutput, const bool inIsLinkB = false);
661 
667 
678 AJAExport NTV2InputXptID GetOutputDestInputXpt (const NTV2OutputDestination inOutputDest, const bool inIsSDI_DS2 = false, const UWord inHDMI_Quadrant = 99);
679 
685 AJAExport NTV2InputXptID GetSDIOutputInputXpt (const NTV2Channel inSDIOutput, const bool inIsDS2 = false);
686 
693 AJAExport NTV2OutputXptID GetMixerOutputXptFromChannel (const NTV2Channel inChannel, const bool inIsKey = false);
694 
701 AJAExport NTV2InputXptID GetMixerFGInputXpt (const NTV2Channel inChannel, const bool inIsKey = false);
702 
709 AJAExport NTV2InputXptID GetMixerBGInputXpt (const NTV2Channel inChannel, const bool inIsKey = false);
710 
716 AJAExport NTV2InputXptID GetTSIMuxInputXptFromChannel(const NTV2Channel inTSIMuxer, const bool inLinkB = false);
717 
724 AJAExport NTV2OutputXptID GetTSIMuxOutputXptFromChannel (const NTV2Channel inTSIMuxer, const bool inLinkB = false, const bool inIsRGB = false);
725 
726 
727 // Stream operators
728 AJAExport std::ostream & operator << (std::ostream & inOutStream, const CNTV2SignalRouter & inObj);
729 
730 #if !defined(NTV2_DEPRECATE_17_5)
731  #define GetFrameBufferOutputXptFromChannel GetFrameStoreOutputXptFromChannel
732  #define GetFrameBufferInputXptFromChannel GetFrameStoreInputXptFromChannel
733 #endif // !defined(NTV2_DEPRECATE_17_5)
734 
735 #endif // NTV2SIGNALROUTER_H
NTV2OutputCrosspointIDSet NTV2CrosspointIDSet
NTV2XptConnections::const_iterator NTV2XptConnectionsConstIter
NTV2InputXptIDSet::const_iterator NTV2InputXptIDSetConstIter
A const iterator for iterating over an NTV2InputXptIDSet.
std::string mPostCommentText
Comment postfix text.
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:1324
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::string mFieldBreakText
Text to use for field breaks.
std::ostream & operator<<(std::ostream &inOutStream, const NTV2OutputXptIDSet &inObj)
NTV2XptConnections mNew
Optional, to show new connections.
NTV2OutputXptIDSet::iterator NTV2OutputXptIDSetIter
A non-const iterator for iterating over an NTV2OutputXptIDSet.
std::set< NTV2OutputXptID > NTV2OutputCrosspointIDSet
std::string mRouterVarName
Name to use for CNTV2SignalRouter variable.
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:223
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:1357
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:3047
std::string mDeviceVarName
Name to use for CNTV2Card variable.
NTV2OutputXptID GetInputSourceOutputXpt(const NTV2InputSource inInputSource, const bool inIsSDI_DS2=false, const bool inIsHDMI_RGB=false, const UWord inHDMI_Quadrant=0)
NTV2OutputXptIDSet::const_iterator NTV2OutputCrosspointIDSetConstIter
bool mShowDeclarations
If true, show variable declarations in the generated code.
std::string NTV2InputCrosspointIDToString(const NTV2InputCrosspointID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:5814
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:98
Defines the import/export macros for producing DLLs or LIBs.
NTV2XptConnections mChanged
Optional, to show changed connections.
NTV2InputXptID GetCSCInputXptFromChannel(const NTV2Channel inCSC, const bool inIsKeyInput=false)
std::set< NTV2WidgetID > NTV2WidgetIDSet
A collection of distinct NTV2WidgetID values.
bool mUseRouter
If true, use calls to CNTV2SignalRouter instead of CNTV2Card.
std::string mPostClassText
Class postfix text.
NTV2InputXptID GetFrameStoreInputXptFromChannel(const NTV2Channel inFrameStore, const bool inIsBInput=false)
NTV2InputXptIDSet::iterator NTV2InputCrosspointIDSetIter
std::string mPreFunctionText
Function name prefix text.
NTV2InputXptID GetMixerBGInputXpt(const NTV2Channel inChannel, const bool inIsKey=false)
NTV2RegWrites NTV2RegisterReads
NTV2InputXptID GetLUTInputXptFromChannel(const NTV2Channel inLUT)
std::pair< NTV2InputXptID, NTV2OutputXptID > NTV2SignalConnection
std::string mPreXptText
Crosspoint variable prefix text.
std::string mPostXptText
Crosspoint variable postfix text.
NTV2OutputXptID GetDLInOutputXptFromChannel(const NTV2Channel inDLInput)
NTV2PossibleConnections::const_iterator NTV2PossibleConnectionsConstIter
NTV2InputSource
Identifies a specific video input source.
Definition: ntv2enums.h:1262
std::string mPostVariableText
Variable postfix text.
NTV2InputXptIDSet::const_iterator NTV2InputCrosspointIDSetConstIter
NTV2WidgetIDSet::const_iterator NTV2WidgetIDSetConstIter
An iterator for iterating over a read-only NTV2WidgetIDSet.
std::string mPreVariableText
Variable prefix text.
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.
std::string mPreCommentText
Comment prefix text.
NTV2OutputXptID GetFrameStoreOutputXptFromChannel(const NTV2Channel inFrameStore, const bool inIsRGB=false, const bool inIs425=false)
std::string mPreClassText
Class prefix text.
NTV2WidgetID
Definition: ntv2enums.h:2909
uint16_t UWord
Definition: ajatypes.h:221
std::string mPostFunctionText
Function name postfix text.
std::string mLineBreakText
Text to use for line breaks.
NTV2InputXptIDSet::iterator NTV2InputXptIDSetIter
A non-const iterator for iterating over an NTV2InputXptIDSet.
NTV2InputXptID GetMixerFGInputXpt(const NTV2Channel inChannel, const bool inIsKey=false)
bool mShowComments
If true, show comments in the generated code.
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
NTV2XptConnections mMissing
Optional, to show deleted connections.
CNTV2SignalRouter()
My default constructor.
std::string NTV2OutputCrosspointIDToString(const NTV2OutputCrosspointID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:5957
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.