aja-widget-io.cpp 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. #include "aja-widget-io.hpp"
  2. #include <ajantv2/includes/ntv2utils.h>
  3. #include <ajantv2/includes/ntv2signalrouter.h>
  4. #include <iostream>
  5. // firmware widget nicknames used by signal routing syntax parser
  6. static const char *kFramebufferNickname = "fb";
  7. static const char *kCSCNickname = "csc";
  8. static const char *kDualLinkInNickname = "dli";
  9. static const char *kDualLinkOutNickname = "dlo";
  10. static const char *kLUTNickname = "lut";
  11. static const char *kSDINickname = "sdi";
  12. static const char *kMultiLinkNickname = "ml";
  13. static const char *kMixerNickname = "mix";
  14. static const char *kHDMINickname = "hdmi";
  15. static const char *kLUT3DNickname = "lut3d";
  16. static const char *k4KDownConvertNickname = "4kdc";
  17. static const char *kAnalogNickname = "analog";
  18. static const char *kTSIMuxNickname = "tsi";
  19. static const char *kUpDownConvertNickname = "udc";
  20. static const char *kCompositeNickname = "composite";
  21. static const char *kStereoCompNickname = "stereo";
  22. static const char *kWatermarkNickname = "watermark";
  23. static const char *kBlackNickname = "black";
  24. static const char *kCompressionNickname = "comp";
  25. static const char *kFrameSyncNickname = "fsync";
  26. static const char *kTestPatternNickname = "pat";
  27. static const char *kOENickname = "oe";
  28. // Table of firmware widget's input crosspoint/id/channel/name/datastream index
  29. // clang-format off
  30. static const WidgetInputSocket kWidgetInputSockets[] = {
  31. //NTV2InputCrosspointID | NTV2WidgetID | Name | DatastreamIndex
  32. { NTV2_INPUT_CROSSPOINT_INVALID, NTV2_WIDGET_INVALID, "", -1},
  33. { NTV2_XptFrameBuffer1Input, NTV2_WgtFrameBuffer1, kFramebufferNickname, 0},
  34. { NTV2_XptFrameBuffer1BInput, NTV2_WgtFrameBuffer1, kFramebufferNickname, 1},
  35. { NTV2_XptFrameBuffer2Input, NTV2_WgtFrameBuffer2, kFramebufferNickname, 0},
  36. { NTV2_XptFrameBuffer2BInput, NTV2_WgtFrameBuffer2, kFramebufferNickname, 1},
  37. { NTV2_XptFrameBuffer3Input, NTV2_WgtFrameBuffer3, kFramebufferNickname, 0},
  38. { NTV2_XptFrameBuffer3BInput, NTV2_WgtFrameBuffer3, kFramebufferNickname, 1},
  39. { NTV2_XptFrameBuffer4Input, NTV2_WgtFrameBuffer4, kFramebufferNickname, 0},
  40. { NTV2_XptFrameBuffer4BInput, NTV2_WgtFrameBuffer4, kFramebufferNickname, 1},
  41. { NTV2_XptFrameBuffer5Input, NTV2_WgtFrameBuffer5, kFramebufferNickname, 0},
  42. { NTV2_XptFrameBuffer5BInput, NTV2_WgtFrameBuffer5, kFramebufferNickname, 1},
  43. { NTV2_XptFrameBuffer6Input, NTV2_WgtFrameBuffer6, kFramebufferNickname, 0},
  44. { NTV2_XptFrameBuffer6BInput, NTV2_WgtFrameBuffer6, kFramebufferNickname, 1},
  45. { NTV2_XptFrameBuffer7Input, NTV2_WgtFrameBuffer7, kFramebufferNickname, 0},
  46. { NTV2_XptFrameBuffer7BInput, NTV2_WgtFrameBuffer7, kFramebufferNickname, 1},
  47. { NTV2_XptFrameBuffer8Input, NTV2_WgtFrameBuffer8, kFramebufferNickname, 0},
  48. { NTV2_XptFrameBuffer8BInput, NTV2_WgtFrameBuffer8, kFramebufferNickname, 1},
  49. { NTV2_XptCSC1VidInput, NTV2_WgtCSC1, kCSCNickname, 0},
  50. { NTV2_XptCSC1KeyInput, NTV2_WgtCSC1, kCSCNickname, 1},
  51. { NTV2_XptCSC2VidInput, NTV2_WgtCSC2, kCSCNickname, 0},
  52. { NTV2_XptCSC2KeyInput, NTV2_WgtCSC2, kCSCNickname, 1},
  53. { NTV2_XptCSC3VidInput, NTV2_WgtCSC3, kCSCNickname, 0},
  54. { NTV2_XptCSC3KeyInput, NTV2_WgtCSC3, kCSCNickname, 1},
  55. { NTV2_XptCSC4VidInput, NTV2_WgtCSC4, kCSCNickname, 0},
  56. { NTV2_XptCSC4KeyInput, NTV2_WgtCSC4, kCSCNickname, 1},
  57. { NTV2_XptCSC5VidInput, NTV2_WgtCSC5, kCSCNickname, 0},
  58. { NTV2_XptCSC5KeyInput, NTV2_WgtCSC5, kCSCNickname, 1},
  59. { NTV2_XptCSC6VidInput, NTV2_WgtCSC6, kCSCNickname, 0},
  60. { NTV2_XptCSC6KeyInput, NTV2_WgtCSC6, kCSCNickname, 1},
  61. { NTV2_XptCSC7VidInput, NTV2_WgtCSC7, kCSCNickname, 0},
  62. { NTV2_XptCSC7KeyInput, NTV2_WgtCSC7, kCSCNickname, 1},
  63. { NTV2_XptCSC8VidInput, NTV2_WgtCSC8, kCSCNickname, 0},
  64. { NTV2_XptCSC8KeyInput, NTV2_WgtCSC8, kCSCNickname, 1},
  65. { NTV2_XptLUT1Input, NTV2_WgtLUT1, kLUTNickname, 0},
  66. { NTV2_XptLUT2Input, NTV2_WgtLUT2, kLUTNickname, 0},
  67. { NTV2_XptLUT3Input, NTV2_WgtLUT3, kLUTNickname, 0},
  68. { NTV2_XptLUT4Input, NTV2_WgtLUT4, kLUTNickname, 0},
  69. { NTV2_XptLUT5Input, NTV2_WgtLUT5, kLUTNickname, 0},
  70. { NTV2_XptLUT6Input, NTV2_WgtLUT6, kLUTNickname, 0},
  71. { NTV2_XptLUT7Input, NTV2_WgtLUT7, kLUTNickname, 0},
  72. { NTV2_XptLUT8Input, NTV2_WgtLUT8, kLUTNickname, 0},
  73. { NTV2_XptMultiLinkOut1Input, NTV2_WgtMultiLinkOut1, kMultiLinkNickname, 0},
  74. { NTV2_XptMultiLinkOut1InputDS2, NTV2_WgtMultiLinkOut1, kMultiLinkNickname, 0},
  75. { NTV2_XptMultiLinkOut2Input, NTV2_WgtMultiLinkOut2, kMultiLinkNickname, 0},
  76. { NTV2_XptMultiLinkOut2InputDS2, NTV2_WgtMultiLinkOut2, kMultiLinkNickname, 0},
  77. { NTV2_XptSDIOut1Input, NTV2_WgtSDIOut1, kSDINickname, 0},
  78. { NTV2_XptSDIOut1InputDS2, NTV2_Wgt3GSDIOut1, kSDINickname, 1},
  79. { NTV2_XptSDIOut2Input, NTV2_WgtSDIOut2, kSDINickname, 0},
  80. { NTV2_XptSDIOut2InputDS2, NTV2_Wgt3GSDIOut2, kSDINickname, 1},
  81. { NTV2_XptSDIOut3Input, NTV2_WgtSDIOut3, kSDINickname, 0},
  82. { NTV2_XptSDIOut3InputDS2, NTV2_Wgt3GSDIOut3, kSDINickname, 1},
  83. { NTV2_XptSDIOut4Input, NTV2_WgtSDIOut4, kSDINickname, 0},
  84. { NTV2_XptSDIOut4InputDS2, NTV2_Wgt3GSDIOut4, kSDINickname, 1},
  85. { NTV2_XptSDIOut5Input, NTV2_WgtSDIMonOut1, kSDINickname, 0},
  86. { NTV2_XptSDIOut5InputDS2, NTV2_WgtSDIMonOut1, kSDINickname, 1},
  87. { NTV2_XptSDIOut6Input, NTV2_Wgt3GSDIOut6, kSDINickname, 0},
  88. { NTV2_XptSDIOut6InputDS2, NTV2_Wgt3GSDIOut6, kSDINickname, 1},
  89. { NTV2_XptSDIOut7Input, NTV2_Wgt3GSDIOut7, kSDINickname, 0},
  90. { NTV2_XptSDIOut7InputDS2, NTV2_Wgt3GSDIOut7, kSDINickname, 1},
  91. { NTV2_XptSDIOut8Input, NTV2_Wgt3GSDIOut8, kSDINickname, 0},
  92. { NTV2_XptSDIOut8InputDS2, NTV2_Wgt3GSDIOut8, kSDINickname, 1},
  93. { NTV2_XptDualLinkIn1Input, NTV2_WgtDualLinkV2In1, kDualLinkInNickname, 0},
  94. { NTV2_XptDualLinkIn1DSInput, NTV2_WgtDualLinkV2In1, kDualLinkInNickname, 1},
  95. { NTV2_XptDualLinkIn2Input, NTV2_WgtDualLinkV2In2, kDualLinkInNickname, 0},
  96. { NTV2_XptDualLinkIn2DSInput, NTV2_WgtDualLinkV2In2, kDualLinkInNickname, 1},
  97. { NTV2_XptDualLinkIn3Input, NTV2_WgtDualLinkV2In3, kDualLinkInNickname, 0},
  98. { NTV2_XptDualLinkIn3DSInput, NTV2_WgtDualLinkV2In3, kDualLinkInNickname, 1},
  99. { NTV2_XptDualLinkIn4Input, NTV2_WgtDualLinkV2In4, kDualLinkInNickname, 0},
  100. { NTV2_XptDualLinkIn4DSInput, NTV2_WgtDualLinkV2In4, kDualLinkInNickname, 1},
  101. { NTV2_XptDualLinkIn5Input, NTV2_WgtDualLinkV2In5, kDualLinkInNickname, 0},
  102. { NTV2_XptDualLinkIn5DSInput, NTV2_WgtDualLinkV2In5, kDualLinkInNickname, 1},
  103. { NTV2_XptDualLinkIn6Input, NTV2_WgtDualLinkV2In6, kDualLinkInNickname, 0},
  104. { NTV2_XptDualLinkIn6DSInput, NTV2_WgtDualLinkV2In6, kDualLinkInNickname, 1},
  105. { NTV2_XptDualLinkIn7Input, NTV2_WgtDualLinkV2In7, kDualLinkInNickname, 0},
  106. { NTV2_XptDualLinkIn7DSInput, NTV2_WgtDualLinkV2In7, kDualLinkInNickname, 1},
  107. { NTV2_XptDualLinkIn8Input, NTV2_WgtDualLinkV2In8, kDualLinkInNickname, 0},
  108. { NTV2_XptDualLinkIn8DSInput, NTV2_WgtDualLinkV2In8, kDualLinkInNickname, 1},
  109. { NTV2_XptDualLinkOut1Input, NTV2_WgtDualLinkV2Out1, kDualLinkOutNickname, 0},
  110. { NTV2_XptDualLinkOut2Input, NTV2_WgtDualLinkV2Out2, kDualLinkOutNickname, 0},
  111. { NTV2_XptDualLinkOut3Input, NTV2_WgtDualLinkV2Out3, kDualLinkOutNickname, 0},
  112. { NTV2_XptDualLinkOut4Input, NTV2_WgtDualLinkV2Out4, kDualLinkOutNickname, 0},
  113. { NTV2_XptDualLinkOut5Input, NTV2_WgtDualLinkV2Out5, kDualLinkOutNickname, 0},
  114. { NTV2_XptDualLinkOut6Input, NTV2_WgtDualLinkV2Out6, kDualLinkOutNickname, 0},
  115. { NTV2_XptDualLinkOut7Input, NTV2_WgtDualLinkV2Out7, kDualLinkOutNickname, 0},
  116. { NTV2_XptDualLinkOut8Input, NTV2_WgtDualLinkV2Out8, kDualLinkOutNickname, 0},
  117. { NTV2_XptMixer1BGKeyInput, NTV2_WgtMixer1, kMixerNickname, 3},
  118. { NTV2_XptMixer1BGVidInput, NTV2_WgtMixer1, kMixerNickname, 2},
  119. { NTV2_XptMixer1FGKeyInput, NTV2_WgtMixer1, kMixerNickname, 1},
  120. { NTV2_XptMixer1FGVidInput, NTV2_WgtMixer1, kMixerNickname, 0},
  121. { NTV2_XptMixer2BGKeyInput, NTV2_WgtMixer2, kMixerNickname, 3},
  122. { NTV2_XptMixer2BGVidInput, NTV2_WgtMixer2, kMixerNickname, 2},
  123. { NTV2_XptMixer2FGKeyInput, NTV2_WgtMixer2, kMixerNickname, 1},
  124. { NTV2_XptMixer2FGVidInput, NTV2_WgtMixer2, kMixerNickname, 0},
  125. { NTV2_XptMixer3BGKeyInput, NTV2_WgtMixer3, kMixerNickname, 3},
  126. { NTV2_XptMixer3BGVidInput, NTV2_WgtMixer3, kMixerNickname, 2},
  127. { NTV2_XptMixer3FGKeyInput, NTV2_WgtMixer3, kMixerNickname, 1},
  128. { NTV2_XptMixer3FGVidInput, NTV2_WgtMixer3, kMixerNickname, 0},
  129. { NTV2_XptMixer4BGKeyInput, NTV2_WgtMixer4, kMixerNickname, 3},
  130. { NTV2_XptMixer4BGVidInput, NTV2_WgtMixer4, kMixerNickname, 2},
  131. { NTV2_XptMixer4FGKeyInput, NTV2_WgtMixer4, kMixerNickname, 1},
  132. { NTV2_XptMixer4FGVidInput, NTV2_WgtMixer4, kMixerNickname, 0},
  133. { NTV2_XptHDMIOutInput, NTV2_WgtHDMIOut1, kHDMINickname, 0},
  134. { NTV2_XptHDMIOutQ2Input, NTV2_WgtHDMIOut1v2, kHDMINickname, 1},
  135. { NTV2_XptHDMIOutQ3Input, NTV2_WgtHDMIOut1v2, kHDMINickname, 2},
  136. { NTV2_XptHDMIOutQ4Input, NTV2_WgtHDMIOut1v2, kHDMINickname, 3},
  137. { NTV2_Xpt4KDCQ1Input, NTV2_Wgt4KDownConverter, k4KDownConvertNickname, 0},
  138. { NTV2_Xpt4KDCQ2Input, NTV2_Wgt4KDownConverter, k4KDownConvertNickname, 0},
  139. { NTV2_Xpt4KDCQ3Input, NTV2_Wgt4KDownConverter, k4KDownConvertNickname, 0},
  140. { NTV2_Xpt4KDCQ4Input, NTV2_Wgt4KDownConverter, k4KDownConvertNickname, 0},
  141. { NTV2_Xpt425Mux1AInput, NTV2_Wgt425Mux1, kTSIMuxNickname, 0},
  142. { NTV2_Xpt425Mux1BInput, NTV2_Wgt425Mux1, kTSIMuxNickname, 1},
  143. { NTV2_Xpt425Mux2AInput, NTV2_Wgt425Mux2, kTSIMuxNickname, 0},
  144. { NTV2_Xpt425Mux2BInput, NTV2_Wgt425Mux2, kTSIMuxNickname, 1},
  145. { NTV2_Xpt425Mux3AInput, NTV2_Wgt425Mux3, kTSIMuxNickname, 0},
  146. { NTV2_Xpt425Mux3BInput, NTV2_Wgt425Mux3, kTSIMuxNickname, 1},
  147. { NTV2_Xpt425Mux4AInput, NTV2_Wgt425Mux4, kTSIMuxNickname, 0},
  148. { NTV2_Xpt425Mux4BInput, NTV2_Wgt425Mux4, kTSIMuxNickname, 1},
  149. { NTV2_XptAnalogOutInput, NTV2_WgtAnalogOut1, kAnalogNickname, 0},
  150. { NTV2_Xpt3DLUT1Input, NTV2_Wgt3DLUT1, kLUT3DNickname, 0},
  151. { NTV2_XptAnalogOutCompositeOut, NTV2_WgtAnalogCompositeOut1, kCompositeNickname, 0},
  152. { NTV2_XptStereoLeftInput, NTV2_WgtStereoCompressor, kStereoCompNickname, 0},
  153. { NTV2_XptStereoRightInput, NTV2_WgtStereoCompressor, kStereoCompNickname, 0},
  154. { NTV2_XptWaterMarker1Input, NTV2_WgtWaterMarker1, kWatermarkNickname, 0},
  155. { NTV2_XptWaterMarker2Input, NTV2_WgtWaterMarker2, kWatermarkNickname, 0},
  156. { NTV2_XptConversionMod2Input, NTV2_WgtUpDownConverter2, kUpDownConvertNickname, 0},
  157. { NTV2_XptCompressionModInput, NTV2_WgtCompression1, kCompressionNickname, 0},
  158. { NTV2_XptConversionModInput, NTV2_WgtUpDownConverter1, kUpDownConvertNickname, 0},
  159. { NTV2_XptFrameSync2Input, NTV2_WgtFrameSync2, kFrameSyncNickname, 0},
  160. };
  161. // Table of firmware widget's output crosspoint/id/channel/name/datastream index
  162. static WidgetOutputSocket kWidgetOutputSockets[] = {
  163. { NTV2_OUTPUT_CROSSPOINT_INVALID, NTV2_WIDGET_INVALID, "", -1},
  164. { NTV2_XptBlack, NTV2_WgtUndefined, kBlackNickname, 0},
  165. { NTV2_XptSDIIn1, NTV2_WgtSDIIn1, kSDINickname, 0},
  166. { NTV2_XptSDIIn2, NTV2_WgtSDIIn2, kSDINickname, 0},
  167. { NTV2_XptLUT1YUV, NTV2_WgtLUT1, kSDINickname, 0},
  168. { NTV2_XptCSC1VidYUV, NTV2_WgtCSC1, kCSCNickname, 0},
  169. { NTV2_XptConversionModule, NTV2_WgtUpDownConverter1, kUpDownConvertNickname, 0},
  170. { NTV2_XptCompressionModule, NTV2_WgtCompression1, kCompressionNickname, 0},
  171. { NTV2_XptFrameBuffer1YUV, NTV2_WgtFrameBuffer1, kFramebufferNickname, 0},
  172. { NTV2_XptFrameSync1YUV, NTV2_WgtFrameSync1, kFrameSyncNickname, 0},
  173. { NTV2_XptFrameSync2YUV, NTV2_WgtFrameSync2, kFrameSyncNickname, 0},
  174. { NTV2_XptDuallinkOut1, NTV2_WgtDualLinkV2Out1, kDualLinkOutNickname, 0},
  175. { NTV2_XptCSC1KeyYUV, NTV2_WgtCSC1, kCSCNickname, 2},
  176. { NTV2_XptFrameBuffer2YUV, NTV2_WgtFrameBuffer2, kFramebufferNickname, 0},
  177. { NTV2_XptCSC2VidYUV, NTV2_WgtCSC2, kCSCNickname, 0},
  178. { NTV2_XptCSC2KeyYUV, NTV2_WgtCSC2, kCSCNickname, 2},
  179. { NTV2_XptMixer1VidYUV, NTV2_WgtMixer1, kMixerNickname, 0},
  180. { NTV2_XptMixer1KeyYUV, NTV2_WgtMixer1, kMixerNickname, 1},
  181. { NTV2_XptMultiLinkOut1DS1, NTV2_WgtMultiLinkOut1, kMultiLinkNickname, 0},
  182. { NTV2_XptMultiLinkOut1DS2, NTV2_WgtMultiLinkOut1, kMultiLinkNickname, 1},
  183. { NTV2_XptAnalogIn, NTV2_WgtAnalogIn1, kAnalogNickname, 0},
  184. { NTV2_XptHDMIIn1, NTV2_WgtHDMIIn1, kHDMINickname, 0},
  185. { NTV2_XptMultiLinkOut1DS3, NTV2_WgtMultiLinkOut1, kMultiLinkNickname, 2},
  186. { NTV2_XptMultiLinkOut1DS4, NTV2_WgtMultiLinkOut1, kMultiLinkNickname, 3},
  187. { NTV2_XptMultiLinkOut2DS1, NTV2_WgtMultiLinkOut2, kMultiLinkNickname, 0},
  188. { NTV2_XptMultiLinkOut2DS2, NTV2_WgtMultiLinkOut2, kMultiLinkNickname, 1},
  189. { NTV2_XptDuallinkOut2, NTV2_WgtDualLinkV2Out2, kDualLinkOutNickname, 0},
  190. { NTV2_XptTestPatternYUV, NTV2_WgtTestPattern1, kTestPatternNickname, 0},
  191. { NTV2_XptSDIIn1DS2, NTV2_Wgt3GSDIIn1, kSDINickname, 1},
  192. { NTV2_XptSDIIn2DS2, NTV2_Wgt3GSDIIn2, kSDINickname, 1},
  193. { NTV2_XptMixer2VidYUV, NTV2_WgtMixer2, kMixerNickname, 0},
  194. { NTV2_XptMixer2KeyYUV, NTV2_WgtMixer2, kMixerNickname, 1},
  195. { NTV2_XptStereoCompressorOut, NTV2_WgtStereoCompressor, kStereoCompNickname, 0},
  196. { NTV2_XptFrameBuffer3YUV, NTV2_WgtFrameBuffer3, kFramebufferNickname, 0},
  197. { NTV2_XptFrameBuffer4YUV, NTV2_WgtFrameBuffer4, kFramebufferNickname, 0},
  198. { NTV2_XptDuallinkOut1DS2, NTV2_WgtDualLinkV2Out1, kDualLinkOutNickname, 1},
  199. { NTV2_XptDuallinkOut2DS2, NTV2_WgtDualLinkV2Out2, kDualLinkOutNickname, 1},
  200. { NTV2_XptCSC5VidYUV, NTV2_WgtCSC5, kCSCNickname, 0},
  201. { NTV2_XptCSC5KeyYUV, NTV2_WgtCSC5, kCSCNickname, 1},
  202. { NTV2_XptMultiLinkOut2DS3, NTV2_WgtMultiLinkOut2, kMultiLinkNickname, 2},
  203. { NTV2_XptMultiLinkOut2DS4, NTV2_WgtMultiLinkOut2, kMultiLinkNickname, 3},
  204. { NTV2_XptSDIIn3, NTV2_Wgt3GSDIIn3, kSDINickname, 0},
  205. { NTV2_XptSDIIn4, NTV2_Wgt3GSDIIn4, kSDINickname, 0},
  206. { NTV2_XptSDIIn3DS2, NTV2_Wgt3GSDIIn3, kSDINickname, 1},
  207. { NTV2_XptSDIIn4DS2, NTV2_Wgt3GSDIIn4, kSDINickname, 1},
  208. { NTV2_XptDuallinkOut3, NTV2_WgtDualLinkV2Out3, kDualLinkOutNickname, 0},
  209. { NTV2_XptDuallinkOut3DS2, NTV2_WgtDualLinkV2Out3, kDualLinkOutNickname, 1},
  210. { NTV2_XptDuallinkOut4, NTV2_WgtDualLinkV2Out4, kDualLinkOutNickname, 0},
  211. { NTV2_XptDuallinkOut4DS2, NTV2_WgtDualLinkV2Out4, kDualLinkOutNickname, 1},
  212. { NTV2_XptCSC3VidYUV, NTV2_WgtCSC3, kCSCNickname, 0},
  213. { NTV2_XptCSC3KeyYUV, NTV2_WgtCSC3, kCSCNickname, 2},
  214. { NTV2_XptCSC4VidYUV, NTV2_WgtCSC4, kCSCNickname, 0},
  215. { NTV2_XptCSC4KeyYUV, NTV2_WgtCSC4, kCSCNickname, 2},
  216. { NTV2_XptDuallinkOut5, NTV2_WgtDualLinkV2Out5, kDualLinkOutNickname, 0},
  217. { NTV2_XptDuallinkOut5DS2, NTV2_WgtDualLinkV2Out5, kDualLinkOutNickname, 1},
  218. { NTV2_Xpt3DLUT1YUV, NTV2_Wgt3DLUT1, kLUT3DNickname, 0},
  219. { NTV2_XptHDMIIn1Q2, NTV2_WgtHDMIIn1v3, kHDMINickname, 1},
  220. { NTV2_XptHDMIIn1Q3, NTV2_WgtHDMIIn1v3, kHDMINickname, 2},
  221. { NTV2_XptHDMIIn1Q4, NTV2_WgtHDMIIn1v3, kHDMINickname, 3},
  222. { NTV2_Xpt4KDownConverterOut, NTV2_Wgt4KDownConverter, k4KDownConvertNickname, 0},
  223. { NTV2_XptSDIIn5, NTV2_Wgt3GSDIIn5, kSDINickname, 0},
  224. { NTV2_XptSDIIn6, NTV2_Wgt3GSDIIn6, kSDINickname, 0},
  225. { NTV2_XptSDIIn5DS2, NTV2_Wgt3GSDIIn5, kSDINickname, 1},
  226. { NTV2_XptSDIIn6DS2, NTV2_Wgt3GSDIIn6, kSDINickname, 1},
  227. { NTV2_XptSDIIn7, NTV2_Wgt3GSDIIn7, kSDINickname, 0},
  228. { NTV2_XptSDIIn8, NTV2_Wgt3GSDIIn8, kSDINickname, 0},
  229. { NTV2_XptSDIIn7DS2, NTV2_Wgt3GSDIIn7, kSDINickname, 1},
  230. { NTV2_XptSDIIn8DS2, NTV2_Wgt3GSDIIn8, kSDINickname, 1},
  231. { NTV2_XptFrameBuffer5YUV, NTV2_WgtFrameBuffer5, kFramebufferNickname, 0},
  232. { NTV2_XptFrameBuffer6YUV, NTV2_WgtFrameBuffer6, kFramebufferNickname, 0},
  233. { NTV2_XptFrameBuffer7YUV, NTV2_WgtFrameBuffer7, kFramebufferNickname, 0},
  234. { NTV2_XptFrameBuffer8YUV, NTV2_WgtFrameBuffer8, kFramebufferNickname, 0},
  235. { NTV2_XptMixer3VidYUV, NTV2_WgtMixer3, kMixerNickname, 0},
  236. { NTV2_XptMixer3KeyYUV, NTV2_WgtMixer3, kMixerNickname, 1},
  237. { NTV2_XptMixer4VidYUV, NTV2_WgtMixer4, kMixerNickname, 0},
  238. { NTV2_XptMixer4KeyYUV, NTV2_WgtMixer4, kMixerNickname, 1},
  239. { NTV2_XptCSC6VidYUV, NTV2_WgtCSC6, kCSCNickname, 0},
  240. { NTV2_XptCSC6KeyYUV, NTV2_WgtCSC6, kCSCNickname, 1},
  241. { NTV2_XptCSC7VidYUV, NTV2_WgtCSC7, kCSCNickname, 0},
  242. { NTV2_XptCSC7KeyYUV, NTV2_WgtCSC7, kCSCNickname, 1},
  243. { NTV2_XptCSC8VidYUV, NTV2_WgtCSC8, kCSCNickname, 0},
  244. { NTV2_XptCSC8KeyYUV, NTV2_WgtCSC8, kCSCNickname, 1},
  245. { NTV2_XptDuallinkOut6, NTV2_WgtDualLinkV2Out6, kDualLinkOutNickname, 0},
  246. { NTV2_XptDuallinkOut6DS2, NTV2_WgtDualLinkV2Out6, kDualLinkOutNickname, 1},
  247. { NTV2_XptDuallinkOut7, NTV2_WgtDualLinkV2Out7, kDualLinkOutNickname, 0},
  248. { NTV2_XptDuallinkOut7DS2, NTV2_WgtDualLinkV2Out7, kDualLinkOutNickname, 1},
  249. { NTV2_XptDuallinkOut8, NTV2_WgtDualLinkV2Out8, kDualLinkOutNickname, 0},
  250. { NTV2_XptDuallinkOut8DS2, NTV2_WgtDualLinkV2Out8, kDualLinkOutNickname, 1},
  251. { NTV2_Xpt425Mux1AYUV, NTV2_Wgt425Mux1, kTSIMuxNickname, 0},
  252. { NTV2_Xpt425Mux1BYUV, NTV2_Wgt425Mux1, kTSIMuxNickname, 1},
  253. { NTV2_Xpt425Mux2AYUV, NTV2_Wgt425Mux2, kTSIMuxNickname, 0},
  254. { NTV2_Xpt425Mux2BYUV, NTV2_Wgt425Mux2, kTSIMuxNickname, 1},
  255. { NTV2_Xpt425Mux3AYUV, NTV2_Wgt425Mux3, kTSIMuxNickname, 0},
  256. { NTV2_Xpt425Mux3BYUV, NTV2_Wgt425Mux3, kTSIMuxNickname, 1},
  257. { NTV2_Xpt425Mux4AYUV, NTV2_Wgt425Mux4, kTSIMuxNickname, 0},
  258. { NTV2_Xpt425Mux4BYUV, NTV2_Wgt425Mux4, kTSIMuxNickname, 1},
  259. { NTV2_XptFrameBuffer1_DS2YUV, NTV2_WgtFrameBuffer1, kFramebufferNickname, 1},
  260. { NTV2_XptFrameBuffer2_DS2YUV, NTV2_WgtFrameBuffer2, kFramebufferNickname, 1},
  261. { NTV2_XptFrameBuffer3_DS2YUV, NTV2_WgtFrameBuffer3, kFramebufferNickname, 1},
  262. { NTV2_XptFrameBuffer4_DS2YUV, NTV2_WgtFrameBuffer4, kFramebufferNickname, 1},
  263. { NTV2_XptFrameBuffer5_DS2YUV, NTV2_WgtFrameBuffer5, kFramebufferNickname, 1},
  264. { NTV2_XptFrameBuffer6_DS2YUV, NTV2_WgtFrameBuffer6, kFramebufferNickname, 1},
  265. { NTV2_XptFrameBuffer7_DS2YUV, NTV2_WgtFrameBuffer7, kFramebufferNickname, 1},
  266. { NTV2_XptFrameBuffer8_DS2YUV, NTV2_WgtFrameBuffer8, kFramebufferNickname, 1},
  267. { NTV2_XptHDMIIn2, NTV2_WgtHDMIIn2v4, kHDMINickname, 0},
  268. { NTV2_XptHDMIIn2Q2, NTV2_WgtHDMIIn2v4, kHDMINickname, 1},
  269. { NTV2_XptHDMIIn2Q3, NTV2_WgtHDMIIn2v4, kHDMINickname, 2},
  270. { NTV2_XptHDMIIn2Q4, NTV2_WgtHDMIIn2v4, kHDMINickname, 3},
  271. { NTV2_XptHDMIIn3, NTV2_WgtHDMIIn3v4, kHDMINickname, 0},
  272. { NTV2_XptHDMIIn4, NTV2_WgtHDMIIn4v4, kHDMINickname, 0},
  273. { NTV2_XptDuallinkIn1, NTV2_WgtDualLinkV2In1, kDualLinkInNickname, 0},
  274. { NTV2_XptLUT1Out, NTV2_WgtLUT1, kLUTNickname, 0},
  275. { NTV2_XptCSC1VidRGB, NTV2_WgtCSC1, kCSCNickname, 1},
  276. { NTV2_XptFrameBuffer1RGB, NTV2_WgtFrameBuffer1, kFramebufferNickname, 2},
  277. { NTV2_XptFrameSync1RGB, NTV2_WgtFrameSync1, kFrameSyncNickname, 1},
  278. { NTV2_XptFrameSync2RGB, NTV2_WgtFrameSync2, kFrameSyncNickname, 1},
  279. { NTV2_XptLUT2Out, NTV2_WgtLUT2, kLUTNickname, 0},
  280. { NTV2_XptFrameBuffer2RGB, NTV2_WgtFrameBuffer2, kFramebufferNickname, 2},
  281. { NTV2_XptCSC2VidRGB, NTV2_WgtCSC2, kCSCNickname, 1},
  282. { NTV2_XptMixer1VidRGB, NTV2_WgtMixer1, kMixerNickname, 1},
  283. { NTV2_XptHDMIIn1RGB, NTV2_WgtHDMIIn1v3, kHDMINickname, 2},
  284. { NTV2_XptFrameBuffer3RGB, NTV2_WgtFrameBuffer3, kFramebufferNickname, 2},
  285. { NTV2_XptFrameBuffer4RGB, NTV2_WgtFrameBuffer4, kFramebufferNickname, 2},
  286. { NTV2_XptDuallinkIn2, NTV2_WgtDualLinkV2In2, kDualLinkInNickname, 0},
  287. { NTV2_XptLUT3Out, NTV2_WgtLUT3, kLUTNickname, 0},
  288. { NTV2_XptLUT4Out, NTV2_WgtLUT4, kLUTNickname, 0},
  289. { NTV2_XptLUT5Out, NTV2_WgtLUT5, kLUTNickname, 0},
  290. { NTV2_XptCSC5VidRGB, NTV2_WgtCSC5, kCSCNickname, 2},
  291. { NTV2_XptDuallinkIn3, NTV2_WgtDualLinkV2In3, kDualLinkInNickname, 0},
  292. { NTV2_XptDuallinkIn4, NTV2_WgtDualLinkV2In4, kDualLinkInNickname, 0},
  293. { NTV2_XptCSC3VidRGB, NTV2_WgtCSC3, kCSCNickname, 2},
  294. { NTV2_XptCSC4VidRGB, NTV2_WgtCSC4, kCSCNickname, 2},
  295. { NTV2_Xpt3DLUT1RGB, NTV2_Wgt3DLUT1, kLUT3DNickname, 1},
  296. { NTV2_XptHDMIIn1Q2RGB, NTV2_WgtHDMIIn1v3, kHDMINickname, 1},
  297. { NTV2_XptHDMIIn1Q3RGB, NTV2_WgtHDMIIn1v3, kHDMINickname, 2},
  298. { NTV2_XptHDMIIn1Q4RGB, NTV2_WgtHDMIIn1v3, kHDMINickname, 3},
  299. { NTV2_Xpt4KDownConverterOutRGB, NTV2_Wgt4KDownConverter, k4KDownConvertNickname, 1},
  300. { NTV2_XptDuallinkIn5, NTV2_WgtDualLinkV2In5, kDualLinkInNickname, 0},
  301. { NTV2_XptDuallinkIn6, NTV2_WgtDualLinkV2In6, kDualLinkInNickname, 0},
  302. { NTV2_XptDuallinkIn7, NTV2_WgtDualLinkV2In7, kDualLinkInNickname, 0},
  303. { NTV2_XptDuallinkIn8, NTV2_WgtDualLinkV2In8, kDualLinkInNickname, 0},
  304. { NTV2_XptFrameBuffer5RGB, NTV2_WgtFrameBuffer5, kFramebufferNickname, 2},
  305. { NTV2_XptFrameBuffer6RGB, NTV2_WgtFrameBuffer6, kFramebufferNickname, 2},
  306. { NTV2_XptFrameBuffer7RGB, NTV2_WgtFrameBuffer7, kFramebufferNickname, 2},
  307. { NTV2_XptFrameBuffer8RGB, NTV2_WgtFrameBuffer8, kFramebufferNickname, 2},
  308. { NTV2_XptCSC6VidRGB, NTV2_WgtCSC6, kCSCNickname, 1},
  309. { NTV2_XptCSC7VidRGB, NTV2_WgtCSC7, kCSCNickname, 1},
  310. { NTV2_XptCSC8VidRGB, NTV2_WgtCSC8, kCSCNickname, 1},
  311. { NTV2_XptLUT6Out, NTV2_WgtLUT6, kLUTNickname, 0},
  312. { NTV2_XptLUT7Out, NTV2_WgtLUT7, kLUTNickname, 0},
  313. { NTV2_XptLUT8Out, NTV2_WgtLUT8, kLUTNickname, 0},
  314. { NTV2_Xpt425Mux1ARGB, NTV2_Wgt425Mux1, kTSIMuxNickname, 2},
  315. { NTV2_Xpt425Mux1BRGB, NTV2_Wgt425Mux1, kTSIMuxNickname, 3},
  316. { NTV2_Xpt425Mux2ARGB, NTV2_Wgt425Mux2, kTSIMuxNickname, 2},
  317. { NTV2_Xpt425Mux2BRGB, NTV2_Wgt425Mux2, kTSIMuxNickname, 3},
  318. { NTV2_Xpt425Mux3ARGB, NTV2_Wgt425Mux3, kTSIMuxNickname, 2},
  319. { NTV2_Xpt425Mux3BRGB, NTV2_Wgt425Mux3, kTSIMuxNickname, 3},
  320. { NTV2_Xpt425Mux4ARGB, NTV2_Wgt425Mux4, kTSIMuxNickname, 2},
  321. { NTV2_Xpt425Mux4BRGB, NTV2_Wgt425Mux4, kTSIMuxNickname, 3},
  322. { NTV2_XptFrameBuffer1_DS2RGB, NTV2_WgtFrameBuffer1, kFramebufferNickname, 3},
  323. { NTV2_XptFrameBuffer2_DS2RGB, NTV2_WgtFrameBuffer2, kFramebufferNickname, 3},
  324. { NTV2_XptFrameBuffer3_DS2RGB, NTV2_WgtFrameBuffer3, kFramebufferNickname, 3},
  325. { NTV2_XptFrameBuffer4_DS2RGB, NTV2_WgtFrameBuffer4, kFramebufferNickname, 3},
  326. { NTV2_XptFrameBuffer5_DS2RGB, NTV2_WgtFrameBuffer5, kFramebufferNickname, 3},
  327. { NTV2_XptFrameBuffer6_DS2RGB, NTV2_WgtFrameBuffer6, kFramebufferNickname, 3},
  328. { NTV2_XptFrameBuffer7_DS2RGB, NTV2_WgtFrameBuffer7, kFramebufferNickname, 3},
  329. { NTV2_XptFrameBuffer8_DS2RGB, NTV2_WgtFrameBuffer8, kFramebufferNickname, 3},
  330. { NTV2_XptHDMIIn2RGB, NTV2_WgtHDMIIn2v4, kHDMINickname, 0},
  331. { NTV2_XptHDMIIn2Q2RGB, NTV2_WgtHDMIIn2v4, kHDMINickname, 1},
  332. { NTV2_XptHDMIIn2Q3RGB, NTV2_WgtHDMIIn2v4, kHDMINickname, 2},
  333. { NTV2_XptHDMIIn2Q4RGB, NTV2_WgtHDMIIn2v4, kHDMINickname, 3},
  334. { NTV2_XptHDMIIn3RGB, NTV2_WgtHDMIIn3v4, kHDMINickname, 0},
  335. { NTV2_XptHDMIIn4RGB, NTV2_WgtHDMIIn4v4, kHDMINickname, 0},
  336. };
  337. // clang-format on
  338. static const size_t kNumWidgetInputSockets =
  339. (sizeof(kWidgetInputSockets) / sizeof(WidgetInputSocket));
  340. static const size_t kNumWidgetOutputSockets =
  341. (sizeof(kWidgetOutputSockets) / sizeof(WidgetOutputSocket));
  342. bool WidgetInputSocket::Find(const std::string &name, NTV2Channel channel,
  343. int32_t datastream, WidgetInputSocket &inp)
  344. {
  345. for (const auto &in : kWidgetInputSockets) {
  346. if (name == in.name &&
  347. channel == CNTV2SignalRouter::WidgetIDToChannel(
  348. in.widget_id) &&
  349. datastream == in.datastream_index) {
  350. inp = in;
  351. return true;
  352. }
  353. }
  354. return false;
  355. }
  356. bool WidgetInputSocket::GetWidgetInputSocketByXpt(InputXpt id,
  357. WidgetInputSocket &inp)
  358. {
  359. for (const auto &in : kWidgetInputSockets) {
  360. if (in.id == id) {
  361. inp = in;
  362. return true;
  363. }
  364. }
  365. return false;
  366. }
  367. int32_t WidgetInputSocket::InputXptDatastreamIndex(InputXpt xpt)
  368. {
  369. int32_t datastream = 0;
  370. for (auto &x : kWidgetInputSockets) {
  371. if (x.id == xpt) {
  372. datastream = x.datastream_index;
  373. break;
  374. }
  375. }
  376. return datastream;
  377. }
  378. NTV2Channel WidgetInputSocket::InputXptChannel(InputXpt xpt)
  379. {
  380. NTV2Channel channel = NTV2_CHANNEL_INVALID;
  381. for (auto &x : kWidgetInputSockets) {
  382. if (x.id == xpt) {
  383. channel = CNTV2SignalRouter::WidgetIDToChannel(
  384. x.widget_id);
  385. break;
  386. }
  387. }
  388. return channel;
  389. }
  390. const char *WidgetInputSocket::InputXptName(InputXpt xpt)
  391. {
  392. const char *name = NULL;
  393. for (auto &x : kWidgetInputSockets) {
  394. if (x.id == xpt) {
  395. name = x.name;
  396. break;
  397. }
  398. }
  399. return name;
  400. }
  401. bool WidgetOutputSocket::Find(const std::string &name, NTV2Channel channel,
  402. int32_t datastream, WidgetOutputSocket &out)
  403. {
  404. // std::cout << "DEBUG -- WidgetOutputSocket::Find: name = " << name
  405. // << ", chan = " << NTV2ChannelToString(channel)
  406. // << ", datastream = " << datastream << std::endl;
  407. for (const auto &wo : kWidgetOutputSockets) {
  408. if (name == wo.name &&
  409. channel == CNTV2SignalRouter::WidgetIDToChannel(
  410. wo.widget_id) &&
  411. datastream == wo.datastream_index) {
  412. out = wo;
  413. return true;
  414. }
  415. }
  416. return false;
  417. }
  418. bool WidgetOutputSocket::GetWidgetOutputSocketByXpt(OutputXpt id,
  419. WidgetOutputSocket &out)
  420. {
  421. for (const auto &wo : kWidgetOutputSockets) {
  422. if (wo.id == id) {
  423. out = wo;
  424. return true;
  425. }
  426. }
  427. return false;
  428. }
  429. int32_t WidgetOutputSocket::OutputXptDatastreamIndex(OutputXpt xpt)
  430. {
  431. int32_t datastream = 0;
  432. for (auto &x : kWidgetOutputSockets) {
  433. if (x.id == xpt) {
  434. datastream = x.datastream_index;
  435. break;
  436. }
  437. }
  438. return datastream;
  439. }
  440. NTV2Channel WidgetOutputSocket::OutputXptChannel(OutputXpt xpt)
  441. {
  442. NTV2Channel channel = NTV2_CHANNEL_INVALID;
  443. for (auto &x : kWidgetOutputSockets) {
  444. if (x.id == xpt) {
  445. channel = CNTV2SignalRouter::WidgetIDToChannel(
  446. x.widget_id);
  447. break;
  448. }
  449. }
  450. return channel;
  451. }
  452. const char *WidgetOutputSocket::OutputXptName(OutputXpt xpt)
  453. {
  454. const char *name = NULL;
  455. for (auto &x : kWidgetOutputSockets) {
  456. if (x.id == xpt) {
  457. name = x.name;
  458. break;
  459. }
  460. }
  461. return name;
  462. }