@luxonis/depthai-viewer-common 3.7.4 → 3.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.MPL-2.0 +373 -0
  3. package/NOTICE +15 -0
  4. package/REFACTOR_HANDOFF.md +969 -0
  5. package/REFACTOR_PLAN.md +265 -0
  6. package/THIRD_PARTY_NOTICES.md +3624 -0
  7. package/build-utils.sh +45 -0
  8. package/dist/components/DepthAIContext.d.ts +1 -1
  9. package/dist/components/DepthAIContext.d.ts.map +1 -1
  10. package/dist/components/DepthAIContext.js.map +1 -1
  11. package/dist/components/Streams.d.ts.map +1 -1
  12. package/dist/components/Streams.js +10 -3
  13. package/dist/components/Streams.js.map +1 -1
  14. package/dist/dai-connection/connection.d.ts +5 -3
  15. package/dist/dai-connection/connection.d.ts.map +1 -1
  16. package/dist/dai-connection/connection.js +3 -3
  17. package/dist/dai-connection/connection.js.map +1 -1
  18. package/dist/hooks/benchmark-automation.d.ts.map +1 -1
  19. package/dist/hooks/benchmark-automation.js +1 -1
  20. package/dist/hooks/benchmark-automation.js.map +1 -1
  21. package/dist/hooks/connection.d.ts +1 -1
  22. package/dist/hooks/connection.d.ts.map +1 -1
  23. package/dist/hooks/connection.js +21 -0
  24. package/dist/hooks/connection.js.map +1 -1
  25. package/dist/index.css +160 -0
  26. package/dist/models/device-configuration.d.ts +1 -1
  27. package/dist/providers/ConnectionProvider.d.ts.map +1 -1
  28. package/dist/providers/ConnectionProvider.js +1 -1
  29. package/dist/providers/ConnectionProvider.js.map +1 -1
  30. package/dist/providers/VisualizerRuntimeConfigProvider.d.ts +2 -1
  31. package/dist/providers/VisualizerRuntimeConfigProvider.d.ts.map +1 -1
  32. package/dist/providers/VisualizerRuntimeConfigProvider.js +6 -2
  33. package/dist/providers/VisualizerRuntimeConfigProvider.js.map +1 -1
  34. package/dist/utils/vite-dev-fix.js +1 -1
  35. package/dist/utils/vite-dev-fix.js.map +1 -1
  36. package/dist/visualizer/browser-decoder-fixtures-entry.d.ts +2 -0
  37. package/dist/visualizer/browser-decoder-fixtures-entry.d.ts.map +1 -0
  38. package/dist/visualizer/browser-decoder-fixtures-entry.js +28 -0
  39. package/dist/visualizer/browser-decoder-fixtures-entry.js.map +1 -0
  40. package/dist/visualizer/components/CssBaseline.d.ts +5 -0
  41. package/dist/visualizer/components/CssBaseline.d.ts.map +1 -0
  42. package/dist/visualizer/components/CssBaseline.js +5 -0
  43. package/dist/visualizer/components/CssBaseline.js.map +1 -0
  44. package/dist/visualizer/components/EmptyState.d.ts +7 -0
  45. package/dist/visualizer/components/EmptyState.d.ts.map +1 -0
  46. package/dist/visualizer/components/EmptyState.js +5 -0
  47. package/dist/visualizer/components/EmptyState.js.map +1 -0
  48. package/dist/visualizer/components/ErrorBoundary.d.ts +16 -0
  49. package/dist/visualizer/components/ErrorBoundary.d.ts.map +1 -0
  50. package/dist/visualizer/components/ErrorBoundary.js +27 -0
  51. package/dist/visualizer/components/ErrorBoundary.js.map +1 -0
  52. package/dist/visualizer/components/GlobalCss.d.ts +2 -0
  53. package/dist/visualizer/components/GlobalCss.d.ts.map +1 -0
  54. package/dist/visualizer/components/GlobalCss.js +4 -0
  55. package/dist/visualizer/components/GlobalCss.js.map +1 -0
  56. package/dist/visualizer/components/Panel.d.ts +37 -0
  57. package/dist/visualizer/components/Panel.d.ts.map +1 -0
  58. package/dist/visualizer/components/Panel.js +129 -0
  59. package/dist/visualizer/components/Panel.js.map +1 -0
  60. package/dist/visualizer/components/PanelLayout.d.ts +3 -0
  61. package/dist/visualizer/components/PanelLayout.d.ts.map +1 -0
  62. package/dist/visualizer/components/PanelLayout.js +5 -0
  63. package/dist/visualizer/components/PanelLayout.js.map +1 -0
  64. package/dist/visualizer/components/PanelToolbar.d.ts +24 -0
  65. package/dist/visualizer/components/PanelToolbar.d.ts.map +1 -0
  66. package/dist/visualizer/components/PanelToolbar.js +69 -0
  67. package/dist/visualizer/components/PanelToolbar.js.map +1 -0
  68. package/dist/visualizer/components/RemountOnValueChange.d.ts +7 -0
  69. package/dist/visualizer/components/RemountOnValueChange.d.ts.map +1 -0
  70. package/dist/visualizer/components/RemountOnValueChange.js +20 -0
  71. package/dist/visualizer/components/RemountOnValueChange.js.map +1 -0
  72. package/dist/visualizer/components/measure-event-loop-delay.d.ts +2 -0
  73. package/dist/visualizer/components/measure-event-loop-delay.d.ts.map +1 -0
  74. package/dist/visualizer/components/measure-event-loop-delay.js +18 -0
  75. package/dist/visualizer/components/measure-event-loop-delay.js.map +1 -0
  76. package/dist/visualizer/components/shared-interval.d.ts +2 -0
  77. package/dist/visualizer/components/shared-interval.d.ts.map +1 -0
  78. package/dist/visualizer/components/shared-interval.js +50 -0
  79. package/dist/visualizer/components/shared-interval.js.map +1 -0
  80. package/dist/visualizer/components/use-element-width.d.ts +3 -0
  81. package/dist/visualizer/components/use-element-width.d.ts.map +1 -0
  82. package/dist/visualizer/components/use-element-width.js +23 -0
  83. package/dist/visualizer/components/use-element-width.js.map +1 -0
  84. package/dist/visualizer/connection/adapter.d.ts +43 -0
  85. package/dist/visualizer/connection/adapter.d.ts.map +1 -0
  86. package/dist/visualizer/connection/adapter.js +196 -0
  87. package/dist/visualizer/connection/adapter.js.map +1 -0
  88. package/dist/visualizer/connection/communicator.d.ts +94 -0
  89. package/dist/visualizer/connection/communicator.d.ts.map +1 -0
  90. package/dist/visualizer/connection/communicator.js +134 -0
  91. package/dist/visualizer/connection/communicator.js.map +1 -0
  92. package/dist/visualizer/connection/connection.d.ts +54 -0
  93. package/dist/visualizer/connection/connection.d.ts.map +1 -0
  94. package/dist/visualizer/connection/connection.js +155 -0
  95. package/dist/visualizer/connection/connection.js.map +1 -0
  96. package/dist/visualizer/connection/foxglove-client-adapter.d.ts +31 -0
  97. package/dist/visualizer/connection/foxglove-client-adapter.d.ts.map +1 -0
  98. package/dist/visualizer/connection/foxglove-client-adapter.js +125 -0
  99. package/dist/visualizer/connection/foxglove-client-adapter.js.map +1 -0
  100. package/dist/visualizer/connection/foxglove-connection.d.ts +86 -0
  101. package/dist/visualizer/connection/foxglove-connection.d.ts.map +1 -0
  102. package/dist/visualizer/connection/foxglove-connection.js +329 -0
  103. package/dist/visualizer/connection/foxglove-connection.js.map +1 -0
  104. package/dist/visualizer/connection/foxglove-protocol.d.ts +6 -0
  105. package/dist/visualizer/connection/foxglove-protocol.d.ts.map +1 -0
  106. package/dist/visualizer/connection/foxglove-protocol.js +63 -0
  107. package/dist/visualizer/connection/foxglove-protocol.js.map +1 -0
  108. package/dist/visualizer/connection/foxglove-ws-types.d.ts +80 -0
  109. package/dist/visualizer/connection/foxglove-ws-types.d.ts.map +1 -0
  110. package/dist/visualizer/connection/foxglove-ws-types.js +13 -0
  111. package/dist/visualizer/connection/foxglove-ws-types.js.map +1 -0
  112. package/dist/visualizer/connection/webrtc/bridge.d.ts +11 -0
  113. package/dist/visualizer/connection/webrtc/bridge.d.ts.map +1 -0
  114. package/dist/visualizer/connection/webrtc/bridge.js +453 -0
  115. package/dist/visualizer/connection/webrtc/bridge.js.map +1 -0
  116. package/dist/visualizer/connection/webrtc/comms-proxy.d.ts +9 -0
  117. package/dist/visualizer/connection/webrtc/comms-proxy.d.ts.map +1 -0
  118. package/dist/visualizer/connection/webrtc/comms-proxy.js +90 -0
  119. package/dist/visualizer/connection/webrtc/comms-proxy.js.map +1 -0
  120. package/dist/visualizer/connection/webrtc/handler.d.ts +97 -0
  121. package/dist/visualizer/connection/webrtc/handler.d.ts.map +1 -0
  122. package/dist/visualizer/connection/webrtc/handler.js +149 -0
  123. package/dist/visualizer/connection/webrtc/handler.js.map +1 -0
  124. package/dist/visualizer/connection/webrtc/worker.d.ts +2 -0
  125. package/dist/visualizer/connection/webrtc/worker.d.ts.map +1 -0
  126. package/dist/visualizer/connection/webrtc/worker.js +32 -0
  127. package/dist/visualizer/connection/webrtc/worker.js.map +1 -0
  128. package/dist/visualizer/connection/ws/worker.d.ts +17 -0
  129. package/dist/visualizer/connection/ws/worker.d.ts.map +1 -0
  130. package/dist/visualizer/connection/ws/worker.js +161 -0
  131. package/dist/visualizer/connection/ws/worker.js.map +1 -0
  132. package/dist/visualizer/context/AppConfigurationContext.d.ts +9 -0
  133. package/dist/visualizer/context/AppConfigurationContext.d.ts.map +1 -0
  134. package/dist/visualizer/context/AppConfigurationContext.js +4 -0
  135. package/dist/visualizer/context/AppConfigurationContext.js.map +1 -0
  136. package/dist/visualizer/context/ConnectionsProvider.d.ts +5 -0
  137. package/dist/visualizer/context/ConnectionsProvider.d.ts.map +1 -0
  138. package/dist/visualizer/context/ConnectionsProvider.js +8 -0
  139. package/dist/visualizer/context/ConnectionsProvider.js.map +1 -0
  140. package/dist/visualizer/context/CurrentLayoutContext.d.ts +63 -0
  141. package/dist/visualizer/context/CurrentLayoutContext.d.ts.map +1 -0
  142. package/dist/visualizer/context/CurrentLayoutContext.js +4 -0
  143. package/dist/visualizer/context/CurrentLayoutContext.js.map +1 -0
  144. package/dist/visualizer/context/MessagePipelineInternalContext.d.ts +3 -0
  145. package/dist/visualizer/context/MessagePipelineInternalContext.d.ts.map +1 -0
  146. package/dist/visualizer/context/MessagePipelineInternalContext.js +3 -0
  147. package/dist/visualizer/context/MessagePipelineInternalContext.js.map +1 -0
  148. package/dist/visualizer/context/MessagePipelineProvider.d.ts +17 -0
  149. package/dist/visualizer/context/MessagePipelineProvider.d.ts.map +1 -0
  150. package/dist/visualizer/context/MessagePipelineProvider.js +224 -0
  151. package/dist/visualizer/context/MessagePipelineProvider.js.map +1 -0
  152. package/dist/visualizer/context/MinimalCurrentLayoutProvider.d.ts +5 -0
  153. package/dist/visualizer/context/MinimalCurrentLayoutProvider.d.ts.map +1 -0
  154. package/dist/visualizer/context/MinimalCurrentLayoutProvider.js +198 -0
  155. package/dist/visualizer/context/MinimalCurrentLayoutProvider.js.map +1 -0
  156. package/dist/visualizer/context/PanelCatalogContext.d.ts +11 -0
  157. package/dist/visualizer/context/PanelCatalogContext.d.ts.map +1 -0
  158. package/dist/visualizer/context/PanelCatalogContext.js +4 -0
  159. package/dist/visualizer/context/PanelCatalogContext.js.map +1 -0
  160. package/dist/visualizer/context/PanelStateContextProvider.d.ts +5 -0
  161. package/dist/visualizer/context/PanelStateContextProvider.d.ts.map +1 -0
  162. package/dist/visualizer/context/PanelStateContextProvider.js +5 -0
  163. package/dist/visualizer/context/PanelStateContextProvider.js.map +1 -0
  164. package/dist/visualizer/context/TimelineInteractionStateProvider.d.ts +5 -0
  165. package/dist/visualizer/context/TimelineInteractionStateProvider.d.ts.map +1 -0
  166. package/dist/visualizer/context/TimelineInteractionStateProvider.js +5 -0
  167. package/dist/visualizer/context/TimelineInteractionStateProvider.js.map +1 -0
  168. package/dist/visualizer/context/VisualizerContext.d.ts +13 -0
  169. package/dist/visualizer/context/VisualizerContext.d.ts.map +1 -0
  170. package/dist/visualizer/context/VisualizerContext.js +81 -0
  171. package/dist/visualizer/context/VisualizerContext.js.map +1 -0
  172. package/dist/visualizer/context/VisualizerFlatContext.d.ts +10 -0
  173. package/dist/visualizer/context/VisualizerFlatContext.d.ts.map +1 -0
  174. package/dist/visualizer/context/VisualizerFlatContext.js +13 -0
  175. package/dist/visualizer/context/VisualizerFlatContext.js.map +1 -0
  176. package/dist/visualizer/context/message-pipeline-store.d.ts +35 -0
  177. package/dist/visualizer/context/message-pipeline-store.d.ts.map +1 -0
  178. package/dist/visualizer/context/message-pipeline-store.js +275 -0
  179. package/dist/visualizer/context/message-pipeline-store.js.map +1 -0
  180. package/dist/visualizer/context/message-pipeline-types.d.ts +52 -0
  181. package/dist/visualizer/context/message-pipeline-types.d.ts.map +1 -0
  182. package/dist/visualizer/context/message-pipeline-types.js +5 -0
  183. package/dist/visualizer/context/message-pipeline-types.js.map +1 -0
  184. package/dist/visualizer/context/pause-frame.d.ts +4 -0
  185. package/dist/visualizer/context/pause-frame.d.ts.map +1 -0
  186. package/dist/visualizer/context/pause-frame.js +21 -0
  187. package/dist/visualizer/context/pause-frame.js.map +1 -0
  188. package/dist/visualizer/fonts/fonts.css +6 -0
  189. package/dist/visualizer/fonts/ubuntu-mono.ttf +0 -0
  190. package/dist/visualizer/i18n-stubs/i18next-browser-languagedetector.d.ts +7 -0
  191. package/dist/visualizer/i18n-stubs/i18next-browser-languagedetector.d.ts.map +1 -0
  192. package/dist/visualizer/i18n-stubs/i18next-browser-languagedetector.js +12 -0
  193. package/dist/visualizer/i18n-stubs/i18next-browser-languagedetector.js.map +1 -0
  194. package/dist/visualizer/i18n-stubs/i18next.d.ts +24 -0
  195. package/dist/visualizer/i18n-stubs/i18next.d.ts.map +1 -0
  196. package/dist/visualizer/i18n-stubs/i18next.js +46 -0
  197. package/dist/visualizer/i18n-stubs/i18next.js.map +1 -0
  198. package/dist/visualizer/i18n-stubs/react-i18next.d.ts +10 -0
  199. package/dist/visualizer/i18n-stubs/react-i18next.d.ts.map +1 -0
  200. package/dist/visualizer/i18n-stubs/react-i18next.js +15 -0
  201. package/dist/visualizer/i18n-stubs/react-i18next.js.map +1 -0
  202. package/dist/visualizer/index.d.ts +14 -0
  203. package/dist/visualizer/index.d.ts.map +1 -0
  204. package/dist/visualizer/index.js +16 -0
  205. package/dist/visualizer/index.js.map +1 -0
  206. package/dist/visualizer/messaging/browser-decoder-fixtures.d.ts +15 -0
  207. package/dist/visualizer/messaging/browser-decoder-fixtures.d.ts.map +1 -0
  208. package/dist/visualizer/messaging/browser-decoder-fixtures.js +205 -0
  209. package/dist/visualizer/messaging/browser-decoder-fixtures.js.map +1 -0
  210. package/dist/visualizer/messaging/decode-core.d.ts +75 -0
  211. package/dist/visualizer/messaging/decode-core.d.ts.map +1 -0
  212. package/dist/visualizer/messaging/decode-core.js +244 -0
  213. package/dist/visualizer/messaging/decode-core.js.map +1 -0
  214. package/dist/visualizer/messaging/decoder-fixtures.d.ts +14 -0
  215. package/dist/visualizer/messaging/decoder-fixtures.d.ts.map +1 -0
  216. package/dist/visualizer/messaging/decoder-fixtures.js +743 -0
  217. package/dist/visualizer/messaging/decoder-fixtures.js.map +1 -0
  218. package/dist/visualizer/messaging/decoder-harness.d.ts +24 -0
  219. package/dist/visualizer/messaging/decoder-harness.d.ts.map +1 -0
  220. package/dist/visualizer/messaging/decoder-harness.js +24 -0
  221. package/dist/visualizer/messaging/decoder-harness.js.map +1 -0
  222. package/dist/visualizer/messaging/deserialization/detections/constants.d.ts +16 -0
  223. package/dist/visualizer/messaging/deserialization/detections/constants.d.ts.map +1 -0
  224. package/dist/visualizer/messaging/deserialization/detections/constants.js +106 -0
  225. package/dist/visualizer/messaging/deserialization/detections/constants.js.map +1 -0
  226. package/dist/visualizer/messaging/deserialization/detections/custom.d.ts +11 -0
  227. package/dist/visualizer/messaging/deserialization/detections/custom.d.ts.map +1 -0
  228. package/dist/visualizer/messaging/deserialization/detections/custom.js +62 -0
  229. package/dist/visualizer/messaging/deserialization/detections/custom.js.map +1 -0
  230. package/dist/visualizer/messaging/deserialization/detections/detection.d.ts +14 -0
  231. package/dist/visualizer/messaging/deserialization/detections/detection.d.ts.map +1 -0
  232. package/dist/visualizer/messaging/deserialization/detections/detection.js +296 -0
  233. package/dist/visualizer/messaging/deserialization/detections/detection.js.map +1 -0
  234. package/dist/visualizer/messaging/deserialization/detections/utils.d.ts +9 -0
  235. package/dist/visualizer/messaging/deserialization/detections/utils.d.ts.map +1 -0
  236. package/dist/visualizer/messaging/deserialization/detections/utils.js +22 -0
  237. package/dist/visualizer/messaging/deserialization/detections/utils.js.map +1 -0
  238. package/dist/visualizer/messaging/deserialization/imu/imu.d.ts +5 -0
  239. package/dist/visualizer/messaging/deserialization/imu/imu.d.ts.map +1 -0
  240. package/dist/visualizer/messaging/deserialization/imu/imu.js +27 -0
  241. package/dist/visualizer/messaging/deserialization/imu/imu.js.map +1 -0
  242. package/dist/visualizer/messaging/deserialization/pointcloud/i420ToRgbaToPoitcloud.worker.d.ts +2 -0
  243. package/dist/visualizer/messaging/deserialization/pointcloud/i420ToRgbaToPoitcloud.worker.d.ts.map +1 -0
  244. package/dist/visualizer/messaging/deserialization/pointcloud/i420ToRgbaToPoitcloud.worker.js +45 -0
  245. package/dist/visualizer/messaging/deserialization/pointcloud/i420ToRgbaToPoitcloud.worker.js.map +1 -0
  246. package/dist/visualizer/messaging/deserialization/pointcloud/point-cloud.d.ts +9 -0
  247. package/dist/visualizer/messaging/deserialization/pointcloud/point-cloud.d.ts.map +1 -0
  248. package/dist/visualizer/messaging/deserialization/pointcloud/point-cloud.js +46 -0
  249. package/dist/visualizer/messaging/deserialization/pointcloud/point-cloud.js.map +1 -0
  250. package/dist/visualizer/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.d.ts +2 -0
  251. package/dist/visualizer/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.d.ts.map +1 -0
  252. package/dist/visualizer/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js +477 -0
  253. package/dist/visualizer/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js.map +1 -0
  254. package/dist/visualizer/messaging/deserialization/pointcloud/poitcloudPoolManager.d.ts +35 -0
  255. package/dist/visualizer/messaging/deserialization/pointcloud/poitcloudPoolManager.d.ts.map +1 -0
  256. package/dist/visualizer/messaging/deserialization/pointcloud/poitcloudPoolManager.js +344 -0
  257. package/dist/visualizer/messaging/deserialization/pointcloud/poitcloudPoolManager.js.map +1 -0
  258. package/dist/visualizer/messaging/deserialization/pointcloud/utils.d.ts +18 -0
  259. package/dist/visualizer/messaging/deserialization/pointcloud/utils.d.ts.map +1 -0
  260. package/dist/visualizer/messaging/deserialization/pointcloud/utils.js +58 -0
  261. package/dist/visualizer/messaging/deserialization/pointcloud/utils.js.map +1 -0
  262. package/dist/visualizer/messaging/deserialization/segmentation/segmentation-mask.d.ts +9 -0
  263. package/dist/visualizer/messaging/deserialization/segmentation/segmentation-mask.d.ts.map +1 -0
  264. package/dist/visualizer/messaging/deserialization/segmentation/segmentation-mask.js +39 -0
  265. package/dist/visualizer/messaging/deserialization/segmentation/segmentation-mask.js.map +1 -0
  266. package/dist/visualizer/messaging/deserialization/video/color.d.ts +9 -0
  267. package/dist/visualizer/messaging/deserialization/video/color.d.ts.map +1 -0
  268. package/dist/visualizer/messaging/deserialization/video/color.js +27 -0
  269. package/dist/visualizer/messaging/deserialization/video/color.js.map +1 -0
  270. package/dist/visualizer/messaging/deserialization/video/depth-coloring.worker.d.ts +5 -0
  271. package/dist/visualizer/messaging/deserialization/video/depth-coloring.worker.d.ts.map +1 -0
  272. package/dist/visualizer/messaging/deserialization/video/depth-coloring.worker.js +124 -0
  273. package/dist/visualizer/messaging/deserialization/video/depth-coloring.worker.js.map +1 -0
  274. package/dist/visualizer/messaging/deserialization/video/depth-to-pointcloud.d.ts +13 -0
  275. package/dist/visualizer/messaging/deserialization/video/depth-to-pointcloud.d.ts.map +1 -0
  276. package/dist/visualizer/messaging/deserialization/video/depth-to-pointcloud.js +37 -0
  277. package/dist/visualizer/messaging/deserialization/video/depth-to-pointcloud.js.map +1 -0
  278. package/dist/visualizer/messaging/deserialization/video/depth.d.ts +15 -0
  279. package/dist/visualizer/messaging/deserialization/video/depth.d.ts.map +1 -0
  280. package/dist/visualizer/messaging/deserialization/video/depth.js +126 -0
  281. package/dist/visualizer/messaging/deserialization/video/depth.js.map +1 -0
  282. package/dist/visualizer/messaging/deserialization/video/h264.d.ts +81 -0
  283. package/dist/visualizer/messaging/deserialization/video/h264.d.ts.map +1 -0
  284. package/dist/visualizer/messaging/deserialization/video/h264.js +634 -0
  285. package/dist/visualizer/messaging/deserialization/video/h264.js.map +1 -0
  286. package/dist/visualizer/messaging/deserialization/video/h265.d.ts +16 -0
  287. package/dist/visualizer/messaging/deserialization/video/h265.d.ts.map +1 -0
  288. package/dist/visualizer/messaging/deserialization/video/h265.js +448 -0
  289. package/dist/visualizer/messaging/deserialization/video/h265.js.map +1 -0
  290. package/dist/visualizer/messaging/deserialization/video/mjpeg.d.ts +11 -0
  291. package/dist/visualizer/messaging/deserialization/video/mjpeg.d.ts.map +1 -0
  292. package/dist/visualizer/messaging/deserialization/video/mjpeg.js +89 -0
  293. package/dist/visualizer/messaging/deserialization/video/mjpeg.js.map +1 -0
  294. package/dist/visualizer/messaging/deserialization/video/mono.d.ts +8 -0
  295. package/dist/visualizer/messaging/deserialization/video/mono.d.ts.map +1 -0
  296. package/dist/visualizer/messaging/deserialization/video/mono.js +27 -0
  297. package/dist/visualizer/messaging/deserialization/video/mono.js.map +1 -0
  298. package/dist/visualizer/messaging/deserialization/video/rgbd-to-pointcloud.d.ts +18 -0
  299. package/dist/visualizer/messaging/deserialization/video/rgbd-to-pointcloud.d.ts.map +1 -0
  300. package/dist/visualizer/messaging/deserialization/video/rgbd-to-pointcloud.js +651 -0
  301. package/dist/visualizer/messaging/deserialization/video/rgbd-to-pointcloud.js.map +1 -0
  302. package/dist/visualizer/messaging/deserialization.worker.d.ts +15 -0
  303. package/dist/visualizer/messaging/deserialization.worker.d.ts.map +1 -0
  304. package/dist/visualizer/messaging/deserialization.worker.js +96 -0
  305. package/dist/visualizer/messaging/deserialization.worker.js.map +1 -0
  306. package/dist/visualizer/messaging/message-event.d.ts +114 -0
  307. package/dist/visualizer/messaging/message-event.d.ts.map +1 -0
  308. package/dist/visualizer/messaging/message-event.js +80 -0
  309. package/dist/visualizer/messaging/message-event.js.map +1 -0
  310. package/dist/visualizer/messaging/message-handler.d.ts +10 -0
  311. package/dist/visualizer/messaging/message-handler.d.ts.map +1 -0
  312. package/dist/visualizer/messaging/message-handler.js +436 -0
  313. package/dist/visualizer/messaging/message-handler.js.map +1 -0
  314. package/dist/visualizer/messaging/message.d.ts +32 -0
  315. package/dist/visualizer/messaging/message.d.ts.map +1 -0
  316. package/dist/visualizer/messaging/message.js +5 -0
  317. package/dist/visualizer/messaging/message.js.map +1 -0
  318. package/dist/visualizer/messaging/parse-utils.d.ts +23 -0
  319. package/dist/visualizer/messaging/parse-utils.d.ts.map +1 -0
  320. package/dist/visualizer/messaging/parse-utils.js +76 -0
  321. package/dist/visualizer/messaging/parse-utils.js.map +1 -0
  322. package/dist/visualizer/messaging/protobuf.d.ts +109 -0
  323. package/dist/visualizer/messaging/protobuf.d.ts.map +1 -0
  324. package/dist/visualizer/messaging/protobuf.js +81 -0
  325. package/dist/visualizer/messaging/protobuf.js.map +1 -0
  326. package/dist/visualizer/messaging/schema-constants.d.ts +21 -0
  327. package/dist/visualizer/messaging/schema-constants.d.ts.map +1 -0
  328. package/dist/visualizer/messaging/schema-constants.js +24 -0
  329. package/dist/visualizer/messaging/schema-constants.js.map +1 -0
  330. package/dist/visualizer/messaging/stream-diagnostics.d.ts +40 -0
  331. package/dist/visualizer/messaging/stream-diagnostics.d.ts.map +1 -0
  332. package/dist/visualizer/messaging/stream-diagnostics.js +257 -0
  333. package/dist/visualizer/messaging/stream-diagnostics.js.map +1 -0
  334. package/dist/visualizer/messaging/utils.d.ts +14 -0
  335. package/dist/visualizer/messaging/utils.d.ts.map +1 -0
  336. package/dist/visualizer/messaging/utils.js +109 -0
  337. package/dist/visualizer/messaging/utils.js.map +1 -0
  338. package/dist/visualizer/output.css +4337 -0
  339. package/dist/visualizer/panels/ImagePanel.d.ts +35 -0
  340. package/dist/visualizer/panels/ImagePanel.d.ts.map +1 -0
  341. package/dist/visualizer/panels/ImagePanel.js +26 -0
  342. package/dist/visualizer/panels/ImagePanel.js.map +1 -0
  343. package/dist/visualizer/panels/PointCloudPanel.d.ts +32 -0
  344. package/dist/visualizer/panels/PointCloudPanel.d.ts.map +1 -0
  345. package/dist/visualizer/panels/PointCloudPanel.js +62 -0
  346. package/dist/visualizer/panels/PointCloudPanel.js.map +1 -0
  347. package/dist/visualizer/panels/image/ImageCanvasRenderer.d.ts +27 -0
  348. package/dist/visualizer/panels/image/ImageCanvasRenderer.d.ts.map +1 -0
  349. package/dist/visualizer/panels/image/ImageCanvasRenderer.js +715 -0
  350. package/dist/visualizer/panels/image/ImageCanvasRenderer.js.map +1 -0
  351. package/dist/visualizer/panels/image/annotation-overlay.d.ts +10 -0
  352. package/dist/visualizer/panels/image/annotation-overlay.d.ts.map +1 -0
  353. package/dist/visualizer/panels/image/annotation-overlay.js +113 -0
  354. package/dist/visualizer/panels/image/annotation-overlay.js.map +1 -0
  355. package/dist/visualizer/panels/image/raw-image-decoder.d.ts +11 -0
  356. package/dist/visualizer/panels/image/raw-image-decoder.d.ts.map +1 -0
  357. package/dist/visualizer/panels/image/raw-image-decoder.js +184 -0
  358. package/dist/visualizer/panels/image/raw-image-decoder.js.map +1 -0
  359. package/dist/visualizer/panels/image/raw-image-decoder.worker.d.ts +2 -0
  360. package/dist/visualizer/panels/image/raw-image-decoder.worker.d.ts.map +1 -0
  361. package/dist/visualizer/panels/image/raw-image-decoder.worker.js +40 -0
  362. package/dist/visualizer/panels/image/raw-image-decoder.worker.js.map +1 -0
  363. package/dist/visualizer/panels/image/raw-image-pixel-decoders.d.ts +35 -0
  364. package/dist/visualizer/panels/image/raw-image-pixel-decoders.d.ts.map +1 -0
  365. package/dist/visualizer/panels/image/raw-image-pixel-decoders.js +352 -0
  366. package/dist/visualizer/panels/image/raw-image-pixel-decoders.js.map +1 -0
  367. package/dist/visualizer/panels/image/segmentation-mask-overlay.d.ts +10 -0
  368. package/dist/visualizer/panels/image/segmentation-mask-overlay.d.ts.map +1 -0
  369. package/dist/visualizer/panels/image/segmentation-mask-overlay.js +56 -0
  370. package/dist/visualizer/panels/image/segmentation-mask-overlay.js.map +1 -0
  371. package/dist/visualizer/panels/image/webgl-image-renderer.d.ts +48 -0
  372. package/dist/visualizer/panels/image/webgl-image-renderer.d.ts.map +1 -0
  373. package/dist/visualizer/panels/image/webgl-image-renderer.js +726 -0
  374. package/dist/visualizer/panels/image/webgl-image-renderer.js.map +1 -0
  375. package/dist/visualizer/panels/image/worker-image-decoder.d.ts +20 -0
  376. package/dist/visualizer/panels/image/worker-image-decoder.d.ts.map +1 -0
  377. package/dist/visualizer/panels/image/worker-image-decoder.js +134 -0
  378. package/dist/visualizer/panels/image/worker-image-decoder.js.map +1 -0
  379. package/dist/visualizer/panels/panel-renderer.d.ts +2 -0
  380. package/dist/visualizer/panels/panel-renderer.d.ts.map +1 -0
  381. package/dist/visualizer/panels/panel-renderer.js +5 -0
  382. package/dist/visualizer/panels/panel-renderer.js.map +1 -0
  383. package/dist/visualizer/panels/pointcloud/PointCloudCanvasRenderer.d.ts +35 -0
  384. package/dist/visualizer/panels/pointcloud/PointCloudCanvasRenderer.d.ts.map +1 -0
  385. package/dist/visualizer/panels/pointcloud/PointCloudCanvasRenderer.js +882 -0
  386. package/dist/visualizer/panels/pointcloud/PointCloudCanvasRenderer.js.map +1 -0
  387. package/dist/visualizer/panels/pointcloud-camera.d.ts +14 -0
  388. package/dist/visualizer/panels/pointcloud-camera.d.ts.map +1 -0
  389. package/dist/visualizer/panels/pointcloud-camera.js +16 -0
  390. package/dist/visualizer/panels/pointcloud-camera.js.map +1 -0
  391. package/dist/visualizer/protobuf.generated/EncodedFrame.d.ts +76 -0
  392. package/dist/visualizer/protobuf.generated/EncodedFrame.d.ts.map +1 -0
  393. package/dist/visualizer/protobuf.generated/EncodedFrame.js +448 -0
  394. package/dist/visualizer/protobuf.generated/EncodedFrame.js.map +1 -0
  395. package/dist/visualizer/protobuf.generated/Event.d.ts +171 -0
  396. package/dist/visualizer/protobuf.generated/Event.d.ts.map +1 -0
  397. package/dist/visualizer/protobuf.generated/Event.js +1805 -0
  398. package/dist/visualizer/protobuf.generated/Event.js.map +1 -0
  399. package/dist/visualizer/protobuf.generated/IMUData.d.ts +84 -0
  400. package/dist/visualizer/protobuf.generated/IMUData.d.ts.map +1 -0
  401. package/dist/visualizer/protobuf.generated/IMUData.js +745 -0
  402. package/dist/visualizer/protobuf.generated/IMUData.js.map +1 -0
  403. package/dist/visualizer/protobuf.generated/ImageAnnotations.d.ts +74 -0
  404. package/dist/visualizer/protobuf.generated/ImageAnnotations.d.ts.map +1 -0
  405. package/dist/visualizer/protobuf.generated/ImageAnnotations.js +675 -0
  406. package/dist/visualizer/protobuf.generated/ImageAnnotations.js.map +1 -0
  407. package/dist/visualizer/protobuf.generated/ImgDetections.d.ts +48 -0
  408. package/dist/visualizer/protobuf.generated/ImgDetections.d.ts.map +1 -0
  409. package/dist/visualizer/protobuf.generated/ImgDetections.js +429 -0
  410. package/dist/visualizer/protobuf.generated/ImgDetections.js.map +1 -0
  411. package/dist/visualizer/protobuf.generated/ImgFrame.d.ts +117 -0
  412. package/dist/visualizer/protobuf.generated/ImgFrame.d.ts.map +1 -0
  413. package/dist/visualizer/protobuf.generated/ImgFrame.js +699 -0
  414. package/dist/visualizer/protobuf.generated/ImgFrame.js.map +1 -0
  415. package/dist/visualizer/protobuf.generated/PointCloudData.d.ts +43 -0
  416. package/dist/visualizer/protobuf.generated/PointCloudData.d.ts.map +1 -0
  417. package/dist/visualizer/protobuf.generated/PointCloudData.js +348 -0
  418. package/dist/visualizer/protobuf.generated/PointCloudData.js.map +1 -0
  419. package/dist/visualizer/protobuf.generated/RGBDData.d.ts +37 -0
  420. package/dist/visualizer/protobuf.generated/RGBDData.d.ts.map +1 -0
  421. package/dist/visualizer/protobuf.generated/RGBDData.js +205 -0
  422. package/dist/visualizer/protobuf.generated/RGBDData.js.map +1 -0
  423. package/dist/visualizer/protobuf.generated/SegmentationMask.d.ts +36 -0
  424. package/dist/visualizer/protobuf.generated/SegmentationMask.d.ts.map +1 -0
  425. package/dist/visualizer/protobuf.generated/SegmentationMask.js +238 -0
  426. package/dist/visualizer/protobuf.generated/SegmentationMask.js.map +1 -0
  427. package/dist/visualizer/protobuf.generated/SpatialImgDetections.d.ts +88 -0
  428. package/dist/visualizer/protobuf.generated/SpatialImgDetections.d.ts.map +1 -0
  429. package/dist/visualizer/protobuf.generated/SpatialImgDetections.js +775 -0
  430. package/dist/visualizer/protobuf.generated/SpatialImgDetections.js.map +1 -0
  431. package/dist/visualizer/protobuf.generated/common.d.ts +175 -0
  432. package/dist/visualizer/protobuf.generated/common.d.ts.map +1 -0
  433. package/dist/visualizer/protobuf.generated/common.js +1796 -0
  434. package/dist/visualizer/protobuf.generated/common.js.map +1 -0
  435. package/dist/visualizer/runtime-config.d.ts +2 -0
  436. package/dist/visualizer/runtime-config.d.ts.map +1 -0
  437. package/dist/visualizer/runtime-config.js +5 -0
  438. package/dist/visualizer/runtime-config.js.map +1 -0
  439. package/dist/visualizer/utils/artificial-worker.d.ts +10 -0
  440. package/dist/visualizer/utils/artificial-worker.d.ts.map +1 -0
  441. package/dist/visualizer/utils/artificial-worker.js +31 -0
  442. package/dist/visualizer/utils/artificial-worker.js.map +1 -0
  443. package/dist/visualizer/utils/async.d.ts +3 -0
  444. package/dist/visualizer/utils/async.d.ts.map +1 -0
  445. package/dist/visualizer/utils/async.js +35 -0
  446. package/dist/visualizer/utils/async.js.map +1 -0
  447. package/dist/visualizer/utils/browser-storage.d.ts +3 -0
  448. package/dist/visualizer/utils/browser-storage.d.ts.map +1 -0
  449. package/dist/visualizer/utils/browser-storage.js +16 -0
  450. package/dist/visualizer/utils/browser-storage.js.map +1 -0
  451. package/dist/visualizer/utils/callback-manager.d.ts +7 -0
  452. package/dist/visualizer/utils/callback-manager.d.ts.map +1 -0
  453. package/dist/visualizer/utils/callback-manager.js +21 -0
  454. package/dist/visualizer/utils/callback-manager.js.map +1 -0
  455. package/dist/visualizer/utils/comlink-wrap.d.ts +7 -0
  456. package/dist/visualizer/utils/comlink-wrap.d.ts.map +1 -0
  457. package/dist/visualizer/utils/comlink-wrap.js +15 -0
  458. package/dist/visualizer/utils/comlink-wrap.js.map +1 -0
  459. package/dist/visualizer/utils/compatibility.d.ts +2 -0
  460. package/dist/visualizer/utils/compatibility.d.ts.map +1 -0
  461. package/dist/visualizer/utils/compatibility.js +19 -0
  462. package/dist/visualizer/utils/compatibility.js.map +1 -0
  463. package/dist/visualizer/utils/config-store.d.ts +10 -0
  464. package/dist/visualizer/utils/config-store.d.ts.map +1 -0
  465. package/dist/visualizer/utils/config-store.js +22 -0
  466. package/dist/visualizer/utils/config-store.js.map +1 -0
  467. package/dist/visualizer/utils/encoding.d.ts +4 -0
  468. package/dist/visualizer/utils/encoding.d.ts.map +1 -0
  469. package/dist/visualizer/utils/encoding.js +23 -0
  470. package/dist/visualizer/utils/encoding.js.map +1 -0
  471. package/dist/visualizer/utils/error.d.ts +20 -0
  472. package/dist/visualizer/utils/error.d.ts.map +1 -0
  473. package/dist/visualizer/utils/error.js +79 -0
  474. package/dist/visualizer/utils/error.js.map +1 -0
  475. package/dist/visualizer/utils/estimate-object-size.d.ts +2 -0
  476. package/dist/visualizer/utils/estimate-object-size.d.ts.map +1 -0
  477. package/dist/visualizer/utils/estimate-object-size.js +60 -0
  478. package/dist/visualizer/utils/estimate-object-size.js.map +1 -0
  479. package/dist/visualizer/utils/frame-store.d.ts +13 -0
  480. package/dist/visualizer/utils/frame-store.d.ts.map +1 -0
  481. package/dist/visualizer/utils/frame-store.js +43 -0
  482. package/dist/visualizer/utils/frame-store.js.map +1 -0
  483. package/dist/visualizer/utils/imu-manager.d.ts +13 -0
  484. package/dist/visualizer/utils/imu-manager.d.ts.map +1 -0
  485. package/dist/visualizer/utils/imu-manager.js +36 -0
  486. package/dist/visualizer/utils/imu-manager.js.map +1 -0
  487. package/dist/visualizer/utils/logger.d.ts +13 -0
  488. package/dist/visualizer/utils/logger.d.ts.map +1 -0
  489. package/dist/visualizer/utils/logger.js +47 -0
  490. package/dist/visualizer/utils/logger.js.map +1 -0
  491. package/dist/visualizer/utils/metrics-manager.d.ts +33 -0
  492. package/dist/visualizer/utils/metrics-manager.d.ts.map +1 -0
  493. package/dist/visualizer/utils/metrics-manager.js +113 -0
  494. package/dist/visualizer/utils/metrics-manager.js.map +1 -0
  495. package/dist/visualizer/utils/player-types.d.ts +65 -0
  496. package/dist/visualizer/utils/player-types.d.ts.map +1 -0
  497. package/dist/visualizer/utils/player-types.js +22 -0
  498. package/dist/visualizer/utils/player-types.js.map +1 -0
  499. package/dist/visualizer/utils/poitcloud-sync.d.ts +13 -0
  500. package/dist/visualizer/utils/poitcloud-sync.d.ts.map +1 -0
  501. package/dist/visualizer/utils/poitcloud-sync.js +95 -0
  502. package/dist/visualizer/utils/poitcloud-sync.js.map +1 -0
  503. package/dist/visualizer/utils/runtime-config.d.ts +23 -0
  504. package/dist/visualizer/utils/runtime-config.d.ts.map +1 -0
  505. package/dist/visualizer/utils/runtime-config.js +76 -0
  506. package/dist/visualizer/utils/runtime-config.js.map +1 -0
  507. package/dist/visualizer/utils/segmentation-colors.d.ts +9 -0
  508. package/dist/visualizer/utils/segmentation-colors.d.ts.map +1 -0
  509. package/dist/visualizer/utils/segmentation-colors.js +42 -0
  510. package/dist/visualizer/utils/segmentation-colors.js.map +1 -0
  511. package/dist/visualizer/utils/time.d.ts +7 -0
  512. package/dist/visualizer/utils/time.d.ts.map +1 -0
  513. package/dist/visualizer/utils/time.js +24 -0
  514. package/dist/visualizer/utils/time.js.map +1 -0
  515. package/dist/visualizer/utils/use-theme-mode.d.ts +3 -0
  516. package/dist/visualizer/utils/use-theme-mode.d.ts.map +1 -0
  517. package/dist/visualizer/utils/use-theme-mode.js +71 -0
  518. package/dist/visualizer/utils/use-theme-mode.js.map +1 -0
  519. package/package.json +33 -8
  520. package/protobuf-gen.sh +87 -0
  521. package/protobuf-gen.win.ps1 +130 -0
  522. package/scripts/browser-decoder-fixtures.html +54 -0
  523. package/scripts/fixtures.vite.config.mjs +30 -0
  524. package/scripts/run-decoder-fixtures.mjs +45 -0
@@ -0,0 +1,743 @@
1
+ // This Source Code Form is subject to the terms of the Mozilla Public
2
+ // License, v2.0. If a copy of the MPL was not distributed with this
3
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/
4
+ import { IMUData } from "../protobuf.generated/IMUData.js";
5
+ import { ImageAnnotation, ImageAnnotations, PointsAnnotationType, } from "../protobuf.generated/ImageAnnotations.js";
6
+ import { ImgDetection, ImgDetections } from "../protobuf.generated/ImgDetections.js";
7
+ import { ImgFrame, Type } from "../protobuf.generated/ImgFrame.js";
8
+ import { PointCloudData } from "../protobuf.generated/PointCloudData.js";
9
+ import { SegmentationMask } from "../protobuf.generated/SegmentationMask.js";
10
+ import { SpatialImgDetection, SpatialImgDetections, } from "../protobuf.generated/SpatialImgDetections.js";
11
+ import { getSegmentationClassColor, isTransparentSegmentationClass, } from "../utils/segmentation-colors.js";
12
+ import { runDecoderHarness, } from "./decoder-harness.js";
13
+ import { DEFAULT_BACKGROUND_COLOR, DEFAULT_TEXT_COLOR, } from "./deserialization/detections/constants.js";
14
+ import { protobufs } from "./protobuf.js";
15
+ import { VisualizerPointsAnnotationType } from "./schema-constants.js";
16
+ const DEFAULT_NEURAL_CAMERA_INTRINSICS = {
17
+ left: {
18
+ focalLenght: { x: 1, y: 1 },
19
+ principalPoint: { x: 0.5, y: 0.5 },
20
+ },
21
+ right: {
22
+ focalLenght: { x: 1, y: 1 },
23
+ principalPoint: { x: 0.5, y: 0.5 },
24
+ },
25
+ };
26
+ export function getBuiltInDecoderFixtures() {
27
+ return [
28
+ {
29
+ name: "raw-color-image-frame",
30
+ input: createHarnessInput(protobufs.imageFrame.name, ImgFrame.encode(ImgFrame.fromPartial({
31
+ ts: { sec: 11, nsec: 22 },
32
+ fb: {
33
+ type: Type.RGB888i,
34
+ width: 1,
35
+ height: 1,
36
+ stride: 3,
37
+ },
38
+ data: Uint8Array.from([10, 20, 30]),
39
+ })).finish()),
40
+ assertResult: (result) => {
41
+ assertErrorCount(result, 0);
42
+ assertEventCount(result, 1);
43
+ const event = result.events[0];
44
+ assertEqual(event.topic, "rgb", "raw color topic");
45
+ assertEqual(event.schemaName, "foxglove.RawImage", "raw color schema");
46
+ assertTimestamp(event.receiveTime, 11, 22, "raw color receive time");
47
+ const message = asRecord(event.message);
48
+ assertEqual(message.frame_id, "color-rgb-frame", "raw color frame id");
49
+ assertEqual(message.width, 1, "raw color width");
50
+ assertEqual(message.height, 1, "raw color height");
51
+ assertEqual(message.encoding, "rgb8", "raw color encoding");
52
+ assertEqual(message.step, 3, "raw color step");
53
+ assertEqual(message.stride, 3, "raw color stride");
54
+ assertEqual(message.planeStride, null, "raw color plane stride");
55
+ assertUint8Array(message.data, Uint8Array.from([10, 20, 30]), "raw color data");
56
+ },
57
+ },
58
+ {
59
+ name: "raw-bgr-image-frame-with-stride",
60
+ input: createHarnessInput(protobufs.imageFrame.name, ImgFrame.encode(ImgFrame.fromPartial({
61
+ ts: { sec: 12, nsec: 34 },
62
+ fb: {
63
+ type: Type.BGR888i,
64
+ width: 2,
65
+ height: 1,
66
+ stride: 8,
67
+ },
68
+ data: Uint8Array.from([1, 2, 3, 4, 5, 6, 0, 0]),
69
+ })).finish()),
70
+ assertResult: (result) => {
71
+ assertErrorCount(result, 0);
72
+ assertEventCount(result, 1);
73
+ const event = result.events[0];
74
+ assertEqual(event.topic, "rgb", "raw bgr topic");
75
+ assertEqual(event.schemaName, "foxglove.RawImage", "raw bgr schema");
76
+ assertTimestamp(event.receiveTime, 12, 34, "raw bgr receive time");
77
+ const message = asRecord(event.message);
78
+ assertEqual(message.frame_id, "color-rgb-frame", "raw bgr frame id");
79
+ assertEqual(message.width, 2, "raw bgr width");
80
+ assertEqual(message.height, 1, "raw bgr height");
81
+ assertEqual(message.encoding, "bgr8i", "raw bgr encoding");
82
+ assertEqual(message.step, 8, "raw bgr step");
83
+ assertEqual(message.stride, 8, "raw bgr stride");
84
+ assertEqual(message.planeStride, null, "raw bgr plane stride");
85
+ assertUint8Array(message.data, Uint8Array.from([1, 2, 3, 4, 5, 6, 0, 0]), "raw bgr data");
86
+ },
87
+ },
88
+ {
89
+ name: "imu-data",
90
+ input: createHarnessInput(protobufs.imu.name, IMUData.encode(IMUData.fromPartial({
91
+ ts: { sec: 100, nsec: 200 },
92
+ tsDevice: { sec: 101, nsec: 300 },
93
+ packets: [
94
+ {
95
+ accelerometer: {
96
+ vec: { x: 1, y: 2, z: 3 },
97
+ },
98
+ },
99
+ ],
100
+ })).finish()),
101
+ assertResult: (result) => {
102
+ assertErrorCount(result, 0);
103
+ assertEventCount(result, 1);
104
+ const event = result.events[0];
105
+ assertEqual(event.topic, "imu", "imu topic");
106
+ assertEqual(event.schemaName, "foxglove.IMU", "imu schema");
107
+ assertEqual(event.sizeInBytes, 16, "imu size");
108
+ assertTimestamp(event.receiveTime, 100, 200, "imu receive time");
109
+ assertTimestamp(event.publishTime, 101, 300, "imu publish time");
110
+ const packets = event.message;
111
+ assertEqual(packets.length, 1, "imu packet count");
112
+ const packet = asRecord(packets[0]);
113
+ const accelerometer = asRecord(packet.accelerometer);
114
+ const vec = asRecord(accelerometer.vec);
115
+ assertEqual(vec.x, 1, "imu accel x");
116
+ assertEqual(vec.y, 2, "imu accel y");
117
+ assertEqual(vec.z, 3, "imu accel z");
118
+ },
119
+ },
120
+ {
121
+ name: "colored-point-cloud",
122
+ input: createHarnessInput(protobufs.pointCloud.name, PointCloudData.encode(PointCloudData.fromPartial({
123
+ ts: { sec: 5, nsec: 6 },
124
+ color: true,
125
+ data: createColoredPointCloudSample(),
126
+ })).finish()),
127
+ assertResult: (result) => {
128
+ assertErrorCount(result, 0);
129
+ assertEventCount(result, 1);
130
+ const event = result.events[0];
131
+ assertEqual(event.topic, "pointcloud", "pointcloud topic");
132
+ assertEqual(event.schemaName, "foxglove.PointCloud.Colored", "pointcloud schema");
133
+ assertTimestampLike(event.receiveTime, "pointcloud receive time");
134
+ const message = asRecord(event.message);
135
+ assertEqual(message.frame_id, "pointcloud-pointcloud-frame", "pointcloud frame id");
136
+ assertEqual(message.point_stride, 16, "pointcloud stride");
137
+ assertEqual(message.width, undefined, "pointcloud generic width");
138
+ assertEqual(message.height, undefined, "pointcloud generic height");
139
+ assertEqual(message.coordinateFrame, undefined, "pointcloud generic coordinate frame");
140
+ const fields = message.fields;
141
+ assertEqual(fields.length, 7, "pointcloud field count");
142
+ assertEqual(fields[0]?.name, "x", "pointcloud first field");
143
+ assertEqual(fields[6]?.name, "alpha", "pointcloud alpha field");
144
+ assertUint8Array(message.data, createColoredPointCloudSample(), "pointcloud data");
145
+ },
146
+ },
147
+ {
148
+ name: "uncolored-point-cloud",
149
+ input: createHarnessInput(protobufs.pointCloud.name, PointCloudData.encode(PointCloudData.fromPartial({
150
+ ts: { sec: 15, nsec: 16 },
151
+ color: false,
152
+ data: createUncoloredPointCloudSample(),
153
+ })).finish()),
154
+ assertResult: (result) => {
155
+ assertErrorCount(result, 0);
156
+ assertEventCount(result, 1);
157
+ const event = result.events[0];
158
+ assertEqual(event.topic, "pointcloud", "uncolored pointcloud topic");
159
+ assertEqual(event.schemaName, "foxglove.PointCloud.Colored", "uncolored pointcloud schema");
160
+ assertTimestampLike(event.receiveTime, "uncolored pointcloud receive time");
161
+ const message = asRecord(event.message);
162
+ assertEqual(message.frame_id, "pointcloud-pointcloud-frame", "uncolored pointcloud frame id");
163
+ assertEqual(message.point_stride, 12, "uncolored pointcloud stride");
164
+ assertEqual(message.width, undefined, "uncolored pointcloud generic width");
165
+ assertEqual(message.height, undefined, "uncolored pointcloud generic height");
166
+ assertEqual(message.coordinateFrame, undefined, "uncolored pointcloud generic coordinate frame");
167
+ const fields = message.fields;
168
+ assertEqual(fields.length, 3, "uncolored pointcloud field count");
169
+ assertEqual(fields[0]?.name, "x", "uncolored pointcloud first field");
170
+ assertEqual(fields[2]?.name, "z", "uncolored pointcloud last field");
171
+ assertUint8Array(message.data, createUncoloredPointCloudSample(), "uncolored pointcloud data");
172
+ },
173
+ },
174
+ {
175
+ name: "organized-direct-point-cloud",
176
+ input: createHarnessInput(protobufs.pointCloud.name, PointCloudData.encode(PointCloudData.fromPartial({
177
+ ts: { sec: 25, nsec: 26 },
178
+ width: 2,
179
+ height: 2,
180
+ sparse: false,
181
+ color: true,
182
+ data: createColoredPointCloudSample(4),
183
+ })).finish()),
184
+ assertResult: (result) => {
185
+ assertErrorCount(result, 0);
186
+ assertEventCount(result, 1);
187
+ const event = result.events[0];
188
+ assertEqual(event.topic, "pointcloud", "organized pointcloud topic");
189
+ assertEqual(event.schemaName, "foxglove.PointCloud.Colored", "organized pointcloud schema");
190
+ const message = asRecord(event.message);
191
+ assertEqual(message.point_stride, 16, "organized pointcloud stride");
192
+ assertEqual(message.width, 2, "organized pointcloud width");
193
+ assertEqual(message.height, 2, "organized pointcloud height");
194
+ assertEqual(message.coordinateFrame, "depthai-camera-y-down", "organized pointcloud coordinate frame");
195
+ assertUint8Array(message.data, createColoredPointCloudSample(4), "organized pointcloud data");
196
+ },
197
+ },
198
+ {
199
+ name: "sparse-direct-point-cloud-does-not-get-organized-metadata",
200
+ input: createHarnessInput(protobufs.pointCloud.name, PointCloudData.encode(PointCloudData.fromPartial({
201
+ ts: { sec: 35, nsec: 36 },
202
+ width: 2,
203
+ height: 2,
204
+ sparse: true,
205
+ color: true,
206
+ data: createColoredPointCloudSample(4),
207
+ })).finish()),
208
+ assertResult: (result) => {
209
+ assertErrorCount(result, 0);
210
+ assertEventCount(result, 1);
211
+ const message = asRecord(result.events[0].message);
212
+ assertEqual(message.point_stride, 16, "sparse guarded pointcloud stride");
213
+ assertEqual(message.width, undefined, "sparse guarded pointcloud width");
214
+ assertEqual(message.height, undefined, "sparse guarded pointcloud height");
215
+ assertEqual(message.coordinateFrame, undefined, "sparse guarded pointcloud coordinate frame");
216
+ assertUint8Array(message.data, createColoredPointCloudSample(4), "sparse guarded pointcloud data");
217
+ },
218
+ },
219
+ {
220
+ name: "malformed-direct-point-cloud-does-not-get-organized-metadata",
221
+ input: createHarnessInput(protobufs.pointCloud.name, PointCloudData.encode(PointCloudData.fromPartial({
222
+ ts: { sec: 45, nsec: 46 },
223
+ width: 2,
224
+ height: 2,
225
+ sparse: false,
226
+ color: true,
227
+ data: createColoredPointCloudSample(3),
228
+ })).finish()),
229
+ assertResult: (result) => {
230
+ assertErrorCount(result, 0);
231
+ assertEventCount(result, 1);
232
+ const message = asRecord(result.events[0].message);
233
+ assertEqual(message.point_stride, 16, "malformed guarded pointcloud stride");
234
+ assertEqual(message.width, undefined, "malformed guarded pointcloud width");
235
+ assertEqual(message.height, undefined, "malformed guarded pointcloud height");
236
+ assertEqual(message.coordinateFrame, undefined, "malformed guarded pointcloud coordinate frame");
237
+ assertUint8Array(message.data, createColoredPointCloudSample(3), "malformed guarded pointcloud data");
238
+ },
239
+ },
240
+ {
241
+ name: "image-detections",
242
+ input: createHarnessInput(protobufs.imageDetections.name, ImgDetections.encode(ImgDetections.fromPartial({
243
+ ts: { sec: 7, nsec: 8 },
244
+ detections: [
245
+ ImgDetection.fromPartial({
246
+ label: 2,
247
+ confidence: 0.75,
248
+ xmin: 0.1,
249
+ ymin: 0.2,
250
+ xmax: 0.4,
251
+ ymax: 0.7,
252
+ }),
253
+ ],
254
+ transformation: {
255
+ width: 200,
256
+ height: 100,
257
+ },
258
+ })).finish()),
259
+ assertResult: (result) => {
260
+ assertErrorCount(result, 0);
261
+ assertEventCount(result, 1);
262
+ const event = result.events[0];
263
+ assertEqual(event.schemaName, "foxglove.ImageAnnotations", "detection schema");
264
+ assertTimestamp(event.receiveTime, 7, 8, "detection receive time");
265
+ const message = asRecord(event.message);
266
+ const points = message.points;
267
+ const texts = message.texts;
268
+ const circles = message.circles;
269
+ assertEqual(points.length, 9, "detection point annotation count");
270
+ assertEqual(texts.length, 1, "detection text annotation count");
271
+ assertEqual(circles.length, 0, "detection circle annotation count");
272
+ const outline = points[0];
273
+ assertEqual(outline.type, VisualizerPointsAnnotationType.LINE_LOOP, "detection outline type");
274
+ const outlinePoints = outline.points;
275
+ assertApprox(outlinePoints[0]?.x, 0.1, 1e-6, "detection outline x0");
276
+ assertApprox(outlinePoints[0]?.y, 0.2, 1e-6, "detection outline y0");
277
+ assertApprox(outlinePoints[2]?.x, 0.4, 1e-6, "detection outline x2");
278
+ assertApprox(outlinePoints[2]?.y, 0.7, 1e-6, "detection outline y2");
279
+ const text = texts[0];
280
+ assertEqual(text.text, "Car 75%", "detection label");
281
+ const textPosition = asRecord(text.position);
282
+ assertApprox(textPosition.x, 0.1175, 1e-6, "detection label position x");
283
+ assertApprox(textPosition.y, 0.27, 1e-6, "detection label position y");
284
+ },
285
+ },
286
+ {
287
+ name: "image-detections-with-segmentation-mask",
288
+ input: createHarnessInput(protobufs.imageDetections.name, ImgDetections.encode(ImgDetections.fromPartial({
289
+ ts: { sec: 30, nsec: 31 },
290
+ tsDevice: { sec: 32, nsec: 33 },
291
+ detections: [
292
+ ImgDetection.fromPartial({
293
+ label: 0,
294
+ confidence: 0.9,
295
+ xmin: 0.1,
296
+ ymin: 0.1,
297
+ xmax: 0.4,
298
+ ymax: 0.4,
299
+ }),
300
+ ImgDetection.fromPartial({
301
+ label: 1,
302
+ confidence: 0.8,
303
+ xmin: 0.5,
304
+ ymin: 0.5,
305
+ xmax: 0.8,
306
+ ymax: 0.8,
307
+ }),
308
+ ],
309
+ segmentationMaskWidth: 2,
310
+ segmentationMaskHeight: 2,
311
+ maskData: Uint8Array.from([0, 1, 255, 1]),
312
+ transformation: {
313
+ width: 512,
314
+ height: 288,
315
+ },
316
+ })).finish()),
317
+ assertResult: (result) => {
318
+ assertErrorCount(result, 0);
319
+ assertEventCount(result, 2);
320
+ const annotationEvent = result.events[0];
321
+ assertEqual(annotationEvent.schemaName, "foxglove.ImageAnnotations", "detection mask annotation schema");
322
+ assertTimestamp(annotationEvent.receiveTime, 30, 31, "detection mask receive time");
323
+ const annotationMessage = asRecord(annotationEvent.message);
324
+ const points = annotationMessage.points;
325
+ assertEqual(points.length, 18, "detection mask point annotation count");
326
+ const detection0Color = getSegmentationClassColor(0);
327
+ const detection1Color = getSegmentationClassColor(1);
328
+ if (!detection0Color || !detection1Color) {
329
+ throw new Error("detection mask colors should be defined");
330
+ }
331
+ assertSegmentationAnnotationColor(points[0]?.outline_color, detection0Color, 1, "detection 0 outline color");
332
+ assertSegmentationAnnotationColor(points[1]?.outline_color, detection0Color, 1, "detection 0 corner color");
333
+ assertSegmentationAnnotationColor(points[9]?.outline_color, detection1Color, 1, "detection 1 outline color");
334
+ assertColorAlpha(points[0]?.fill_color, 0, "detection mask bbox fill alpha");
335
+ const maskEvent = result.events[1];
336
+ assertEqual(maskEvent.topic, "detections", "detection mask topic");
337
+ assertEqual(maskEvent.schemaName, "luxonis.SegmentationMask", "detection mask schema");
338
+ assertTimestamp(maskEvent.receiveTime, 30, 31, "detection mask receive time");
339
+ assertTimestamp(maskEvent.publishTime, 32, 33, "detection mask publish time");
340
+ assertEqual(maskEvent.sizeInBytes, 4, "detection mask size");
341
+ const message = asRecord(maskEvent.message);
342
+ assertEqual(message.width, 2, "detection mask width");
343
+ assertEqual(message.height, 2, "detection mask height");
344
+ assertEqual(message.bytesPerClassId, 1, "detection mask bytes per class id");
345
+ assertUint8Array(message.data, Uint8Array.from([0, 1, 255, 1]), "detection mask data");
346
+ assertDeepEqual(message.labels, [], "detection mask labels");
347
+ const transformation = asRecord(maskEvent.depthaiTransformation);
348
+ assertEqual(transformation.width, 512, "detection mask transformation width");
349
+ assertEqual(transformation.height, 288, "detection mask transformation height");
350
+ },
351
+ },
352
+ {
353
+ name: "image-detections-invalid-segmentation-mask-byte-length",
354
+ input: createHarnessInput(protobufs.imageDetections.name, ImgDetections.encode(ImgDetections.fromPartial({
355
+ ts: { sec: 34, nsec: 35 },
356
+ detections: [
357
+ ImgDetection.fromPartial({
358
+ label: 0,
359
+ confidence: 0.9,
360
+ xmin: 0.1,
361
+ ymin: 0.1,
362
+ xmax: 0.4,
363
+ ymax: 0.4,
364
+ }),
365
+ ],
366
+ segmentationMaskWidth: 2,
367
+ segmentationMaskHeight: 2,
368
+ maskData: Uint8Array.from([0, 1]),
369
+ })).finish()),
370
+ assertResult: (result) => {
371
+ assertEventCount(result, 0);
372
+ assertErrorCount(result, 1);
373
+ assertEqual(result.errors[0]?.errorCode, "DecoderError", "detection mask error code");
374
+ assertEqual(result.errors[0]?.topic, "detections", "detection mask error topic");
375
+ },
376
+ },
377
+ {
378
+ name: "spatial-image-detections",
379
+ input: createHarnessInput(protobufs.imageDetectionsSpatial.name, SpatialImgDetections.encode(SpatialImgDetections.fromPartial({
380
+ ts: { sec: 12, nsec: 34 },
381
+ detections: [
382
+ SpatialImgDetection.fromPartial({
383
+ detection: ImgDetection.fromPartial({
384
+ label: 1,
385
+ confidence: 0.5,
386
+ xmin: 0.05,
387
+ ymin: 0.15,
388
+ xmax: 0.25,
389
+ ymax: 0.45,
390
+ }),
391
+ }),
392
+ ],
393
+ transformation: {
394
+ width: 320,
395
+ height: 240,
396
+ },
397
+ })).finish()),
398
+ assertResult: (result) => {
399
+ assertErrorCount(result, 0);
400
+ assertEventCount(result, 1);
401
+ const event = result.events[0];
402
+ assertEqual(event.schemaName, "foxglove.ImageAnnotations", "spatial detection schema");
403
+ assertTimestamp(event.receiveTime, 12, 34, "spatial detection receive time");
404
+ const message = asRecord(event.message);
405
+ const points = message.points;
406
+ const texts = message.texts;
407
+ assertEqual(points.length, 9, "spatial detection point annotation count");
408
+ assertEqual(texts.length, 1, "spatial detection text annotation count");
409
+ assertEqual(texts[0]?.text, "Bicycle 50%", "spatial detection label");
410
+ const outline = points[0];
411
+ assertEqual(outline.type, VisualizerPointsAnnotationType.LINE_LOOP, "spatial detection outline type");
412
+ const outlinePoints = outline.points;
413
+ assertApprox(outlinePoints[0]?.x, 0.05, 1e-6, "spatial detection outline x0");
414
+ assertApprox(outlinePoints[0]?.y, 0.15, 1e-6, "spatial detection outline y0");
415
+ assertApprox(outlinePoints[2]?.x, 0.25, 1e-6, "spatial detection outline x2");
416
+ assertApprox(outlinePoints[2]?.y, 0.45, 1e-6, "spatial detection outline y2");
417
+ },
418
+ },
419
+ {
420
+ name: "custom-image-annotations",
421
+ input: createHarnessInput(protobufs.imageDetectionsCustom.name, ImageAnnotations.encode(ImageAnnotations.fromPartial({
422
+ ts: { sec: 9, nsec: 10 },
423
+ transformation: {
424
+ width: 100,
425
+ height: 200,
426
+ },
427
+ annotations: [
428
+ ImageAnnotation.fromPartial({
429
+ points: [
430
+ {
431
+ type: PointsAnnotationType.LINE_LIST,
432
+ points: [
433
+ { x: 0.1, y: 0.2 },
434
+ { x: 0.3, y: 0.4 },
435
+ ],
436
+ thickness: 2,
437
+ },
438
+ ],
439
+ texts: [
440
+ {
441
+ position: { x: 0.5, y: 0.6 },
442
+ text: "hello",
443
+ fontSize: 12,
444
+ },
445
+ ],
446
+ circles: [
447
+ {
448
+ position: { x: 0.7, y: 0.8 },
449
+ diameter: 0.25,
450
+ thickness: 3,
451
+ },
452
+ ],
453
+ }),
454
+ ],
455
+ })).finish()),
456
+ assertResult: (result) => {
457
+ assertErrorCount(result, 0);
458
+ assertEventCount(result, 1);
459
+ const event = result.events[0];
460
+ assertEqual(event.schemaName, "foxglove.ImageAnnotations", "custom annotations schema");
461
+ assertTimestamp(event.receiveTime, 9, 10, "custom annotations receive time");
462
+ const message = asRecord(event.message);
463
+ const points = message.points;
464
+ const texts = message.texts;
465
+ const circles = message.circles;
466
+ assertEqual(points.length, 1, "custom annotation point count");
467
+ assertEqual(texts.length, 1, "custom annotation text count");
468
+ assertEqual(circles.length, 1, "custom annotation circle count");
469
+ assertEqual(points[0]?.type, PointsAnnotationType.LINE_LIST, "custom annotation point type");
470
+ assertEqual(texts[0]?.text, "hello", "custom annotation text");
471
+ assertEqual(texts[0]?.font_size, 12, "custom annotation text size");
472
+ assertDeepEqual(texts[0]?.text_color, DEFAULT_TEXT_COLOR, "custom annotation default text color");
473
+ assertDeepEqual(texts[0]?.background_color, DEFAULT_BACKGROUND_COLOR, "custom annotation default background color");
474
+ assertApprox(circles[0]?.xMultiplier, 2, 1e-6, "custom annotation x multiplier");
475
+ assertApprox(circles[0]?.yMultiplier, 1, 1e-6, "custom annotation y multiplier");
476
+ },
477
+ },
478
+ {
479
+ name: "segmentation-mask",
480
+ input: createHarnessInput(protobufs.segmentationMask.name, SegmentationMask.encode(SegmentationMask.fromPartial({
481
+ ts: { sec: 20, nsec: 21 },
482
+ tsDevice: { sec: 22, nsec: 23 },
483
+ width: 2,
484
+ height: 2,
485
+ data: createInt16Bytes([-1, 0, 1, 2]),
486
+ labels: ["background", "person", "floor"],
487
+ transformation: {
488
+ width: 200,
489
+ height: 100,
490
+ },
491
+ })).finish()),
492
+ assertResult: (result) => {
493
+ assertErrorCount(result, 0);
494
+ assertEventCount(result, 1);
495
+ const event = result.events[0];
496
+ assertEqual(event.topic, "segmentation-mask", "segmentation mask topic");
497
+ assertEqual(event.schemaName, "luxonis.SegmentationMask", "segmentation mask schema");
498
+ assertTimestamp(event.receiveTime, 20, 21, "segmentation mask receive time");
499
+ assertTimestamp(event.publishTime, 22, 23, "segmentation mask publish time");
500
+ const message = asRecord(event.message);
501
+ assertEqual(message.width, 2, "segmentation mask width");
502
+ assertEqual(message.height, 2, "segmentation mask height");
503
+ assertEqual(message.bytesPerClassId, 2, "segmentation mask bytes per class id");
504
+ assertUint8Array(message.data, createInt16Bytes([-1, 0, 1, 2]), "segmentation mask data");
505
+ assertDeepEqual(message.labels, ["background", "person", "floor"], "segmentation mask labels");
506
+ const transformation = asRecord(event.depthaiTransformation);
507
+ assertEqual(transformation.width, 200, "segmentation mask transformation width");
508
+ assertEqual(transformation.height, 100, "segmentation mask transformation height");
509
+ },
510
+ },
511
+ {
512
+ name: "segmentation-mask-invalid-byte-length",
513
+ input: createHarnessInput(protobufs.segmentationMask.name, SegmentationMask.encode(SegmentationMask.fromPartial({
514
+ ts: { sec: 24, nsec: 25 },
515
+ width: 2,
516
+ height: 2,
517
+ data: createInt16Bytes([0]),
518
+ })).finish()),
519
+ assertResult: (result) => {
520
+ assertEventCount(result, 0);
521
+ assertErrorCount(result, 1);
522
+ assertEqual(result.errors[0]?.errorCode, "DecoderError", "segmentation mask error code");
523
+ assertEqual(result.errors[0]?.topic, "segmentation-mask", "segmentation mask error topic");
524
+ },
525
+ },
526
+ {
527
+ name: "segmentation-mask-uint8-class-ids",
528
+ input: createHarnessInput(protobufs.segmentationMask.name, SegmentationMask.encode(SegmentationMask.fromPartial({
529
+ ts: { sec: 26, nsec: 27 },
530
+ width: 2,
531
+ height: 2,
532
+ data: Uint8Array.from([0, 15, 255, 17]),
533
+ labels: [
534
+ "background",
535
+ "aeroplane",
536
+ "bicycle",
537
+ "bird",
538
+ "boat",
539
+ "bottle",
540
+ "bus",
541
+ "car",
542
+ "cat",
543
+ "chair",
544
+ "cow",
545
+ "diningtable",
546
+ "dog",
547
+ "horse",
548
+ "motorbike",
549
+ "person",
550
+ "pottedplant",
551
+ "sheep",
552
+ ],
553
+ })).finish()),
554
+ assertResult: (result) => {
555
+ assertErrorCount(result, 0);
556
+ assertEventCount(result, 1);
557
+ const event = result.events[0];
558
+ assertEqual(event.schemaName, "luxonis.SegmentationMask", "uint8 segmentation mask schema");
559
+ assertTimestamp(event.receiveTime, 26, 27, "uint8 segmentation mask receive time");
560
+ const message = asRecord(event.message);
561
+ assertEqual(message.bytesPerClassId, 1, "uint8 segmentation mask bytes per class id");
562
+ assertUint8Array(message.data, Uint8Array.from([0, 15, 255, 17]), "uint8 segmentation mask data");
563
+ const labels = message.labels;
564
+ assertEqual(labels[0], "background", "uint8 segmentation mask background label");
565
+ assertEqual(labels[15], "person", "uint8 segmentation mask person label");
566
+ assertEqual(labels[17], "sheep", "uint8 segmentation mask sheep label");
567
+ assertSegmentationOverlayClassSemantics();
568
+ },
569
+ },
570
+ ];
571
+ }
572
+ export async function runBuiltInDecoderFixtures() {
573
+ const results = [];
574
+ for (const fixture of getBuiltInDecoderFixtures()) {
575
+ const result = await runDecoderHarness(fixture.input);
576
+ fixture.assertResult(result);
577
+ results.push({ name: fixture.name, passed: true });
578
+ }
579
+ return results;
580
+ }
581
+ function createHarnessInput(schema, bytes) {
582
+ return {
583
+ topic: inferTopicFromSchema(schema),
584
+ schema,
585
+ buffer: new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength),
586
+ neuralCameraIntrinsics: DEFAULT_NEURAL_CAMERA_INTRINSICS,
587
+ stereoDepthMaxValue: 8000,
588
+ };
589
+ }
590
+ function inferTopicFromSchema(schema) {
591
+ switch (schema) {
592
+ case protobufs.imageFrame.name:
593
+ return "rgb";
594
+ case protobufs.imu.name:
595
+ return "imu";
596
+ case protobufs.pointCloud.name:
597
+ return "pointcloud";
598
+ case protobufs.imageDetections.name:
599
+ return "detections";
600
+ case protobufs.imageDetectionsSpatial.name:
601
+ return "detections-spatial";
602
+ case protobufs.imageDetectionsCustom.name:
603
+ return "custom-detections";
604
+ case protobufs.segmentationMask.name:
605
+ return "segmentation-mask";
606
+ default:
607
+ return "fixture-topic";
608
+ }
609
+ }
610
+ function createInt16Bytes(values) {
611
+ const bytes = new Uint8Array(values.length * Int16Array.BYTES_PER_ELEMENT);
612
+ const view = new DataView(bytes.buffer);
613
+ for (let index = 0; index < values.length; index += 1) {
614
+ view.setInt16(index * Int16Array.BYTES_PER_ELEMENT, values[index], true);
615
+ }
616
+ return bytes;
617
+ }
618
+ function createColoredPointCloudSample(pointCount = 1) {
619
+ const bytes = new Uint8Array(pointCount * 16);
620
+ const view = new DataView(bytes.buffer);
621
+ for (let index = 0; index < pointCount; index += 1) {
622
+ const offset = index * 16;
623
+ view.setFloat32(offset, 1 + index, true);
624
+ view.setFloat32(offset + 4, 2 + index, true);
625
+ view.setFloat32(offset + 8, 3 + index, true);
626
+ bytes[offset + 12] = 255;
627
+ bytes[offset + 13] = 128;
628
+ bytes[offset + 14] = 64;
629
+ bytes[offset + 15] = 32;
630
+ }
631
+ return bytes;
632
+ }
633
+ function createUncoloredPointCloudSample() {
634
+ const bytes = new Uint8Array(12);
635
+ const view = new DataView(bytes.buffer);
636
+ view.setFloat32(0, 4, true);
637
+ view.setFloat32(4, 5, true);
638
+ view.setFloat32(8, 6, true);
639
+ return bytes;
640
+ }
641
+ function assertSegmentationOverlayClassSemantics() {
642
+ assertEqual(isTransparentSegmentationClass(-1), true, "segmentation overlay negative class transparency");
643
+ assertEqual(isTransparentSegmentationClass(255), true, "segmentation overlay class 255 transparency");
644
+ assertEqual(isTransparentSegmentationClass(0), false, "segmentation overlay class 0 visibility");
645
+ assertEqual(getSegmentationClassColor(255), undefined, "segmentation overlay class 255 color");
646
+ const class0Color = getSegmentationClassColor(0);
647
+ const class15Color = getSegmentationClassColor(15);
648
+ const class17Color = getSegmentationClassColor(17);
649
+ if (!class0Color || !class15Color || !class17Color) {
650
+ throw new Error("segmentation overlay non-background classes should have colors");
651
+ }
652
+ assertEqual(class0Color.a, 0.5, "segmentation overlay class 0 alpha");
653
+ assertEqual(class15Color.a, 0.5, "segmentation overlay class 15 alpha");
654
+ assertEqual(class17Color.a, 0.5, "segmentation overlay class 17 alpha");
655
+ assertNotDeepEqual(class0Color, class15Color, "segmentation overlay distinct class 0 and 15 colors");
656
+ assertNotDeepEqual(class15Color, class17Color, "segmentation overlay distinct class 15 and 17 colors");
657
+ assertUniqueSegmentationColors();
658
+ }
659
+ function assertUniqueSegmentationColors() {
660
+ const colorKeys = new Set();
661
+ for (let classId = 0; classId < 255; classId += 1) {
662
+ const color = getSegmentationClassColor(classId);
663
+ if (!color) {
664
+ throw new Error(`segmentation overlay class ${classId} should have a color`);
665
+ }
666
+ const colorKey = `${color.r},${color.g},${color.b}`;
667
+ if (colorKeys.has(colorKey)) {
668
+ throw new Error(`segmentation overlay duplicate color ${colorKey}`);
669
+ }
670
+ colorKeys.add(colorKey);
671
+ }
672
+ }
673
+ function assertEventCount(result, expected) {
674
+ assertEqual(result.events.length, expected, "event count");
675
+ }
676
+ function assertErrorCount(result, expected) {
677
+ assertEqual(result.errors.length, expected, "error count");
678
+ }
679
+ function assertTimestamp(value, sec, nsec, label) {
680
+ const record = asRecord(value);
681
+ assertEqual(record.sec, sec, `${label} sec`);
682
+ assertEqual(record.nsec, nsec, `${label} nsec`);
683
+ }
684
+ function assertTimestampLike(value, label) {
685
+ const record = asRecord(value);
686
+ if (typeof record.sec !== "number" || typeof record.nsec !== "number") {
687
+ throw new Error(`${label}: expected timestamp-like object`);
688
+ }
689
+ }
690
+ function assertUint8Array(value, expected, label) {
691
+ if (!(value instanceof Uint8Array)) {
692
+ throw new Error(`${label}: expected Uint8Array`);
693
+ }
694
+ assertEqual(value.length, expected.length, `${label} length`);
695
+ for (let i = 0; i < value.length; i++) {
696
+ assertEqual(value[i], expected[i], `${label}[${i}]`);
697
+ }
698
+ }
699
+ function assertApprox(value, expected, epsilon, label) {
700
+ if (typeof value !== "number") {
701
+ throw new Error(`${label}: expected number, received ${typeof value}`);
702
+ }
703
+ if (Math.abs(value - expected) > epsilon) {
704
+ throw new Error(`${label}: expected ${expected}, received ${value}`);
705
+ }
706
+ }
707
+ function assertSegmentationAnnotationColor(value, expected, expectedAlpha, label) {
708
+ const color = asRecord(value);
709
+ assertApprox(color.r, expected.r / 255, 1e-6, `${label} red`);
710
+ assertApprox(color.g, expected.g / 255, 1e-6, `${label} green`);
711
+ assertApprox(color.b, expected.b / 255, 1e-6, `${label} blue`);
712
+ assertApprox(color.a, expectedAlpha, 1e-6, `${label} alpha`);
713
+ }
714
+ function assertColorAlpha(value, expectedAlpha, label) {
715
+ const color = asRecord(value);
716
+ assertApprox(color.a, expectedAlpha, 1e-6, label);
717
+ }
718
+ function assertEqual(value, expected, label) {
719
+ if (value !== expected) {
720
+ throw new Error(`${label}: expected ${String(expected)}, received ${String(value)}`);
721
+ }
722
+ }
723
+ function assertDeepEqual(value, expected, label) {
724
+ const actualJson = JSON.stringify(value);
725
+ const expectedJson = JSON.stringify(expected);
726
+ if (actualJson !== expectedJson) {
727
+ throw new Error(`${label}: expected ${expectedJson}, received ${actualJson}`);
728
+ }
729
+ }
730
+ function assertNotDeepEqual(value, expected, label) {
731
+ const actualJson = JSON.stringify(value);
732
+ const expectedJson = JSON.stringify(expected);
733
+ if (actualJson === expectedJson) {
734
+ throw new Error(`${label}: expected values to differ, received ${actualJson}`);
735
+ }
736
+ }
737
+ function asRecord(value) {
738
+ if (!value || typeof value !== "object") {
739
+ throw new Error(`Expected object, received ${String(value)}`);
740
+ }
741
+ return value;
742
+ }
743
+ //# sourceMappingURL=decoder-fixtures.js.map