@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,651 @@
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 { releaseProxy, transfer, wrap } from "comlink";
5
+ import { Profile } from "../../../protobuf.generated/EncodedFrame.js";
6
+ import { Type } from "../../../protobuf.generated/ImgFrame.js";
7
+ import { constructKeyForTopicRenderMetrics, globalDecodeMetricsManager, globalInputEventMetricsManager, globalRenderMetricsManager, } from "../../../utils/metrics-manager.js";
8
+ import { parseMessage } from "../../parse-utils.js";
9
+ import { VisualizerNumericType } from "../../schema-constants.js";
10
+ import { uint8ArrayToUint16Array } from "../pointcloud/utils.js";
11
+ import { deserializeDepthFrame } from "./depth.js";
12
+ import { convertNv12ToI420, deserializeEncodedFrameH264 } from "./h264.js";
13
+ import { deserializeEncodedFrameH265 } from "./h265.js";
14
+ import { deserializeMJPEGFrame } from "./mjpeg.js";
15
+ const RGBD_POINTCLOUD_WORKER_COUNT = 6;
16
+ const RGBD_POINTCLOUD_WORKER_TIMEOUT_MS = 15_000;
17
+ const RGBD_POINTCLOUD_SCHEDULE_DELAY_MS = 0;
18
+ const ENABLE_RGBD_GPU_BATCHING = true;
19
+ const RGBD_GPU_BATCH_SIZE = 2;
20
+ const RGBD_GPU_BATCH_FLUSH_DELAY_MS = 8;
21
+ const RGBD_POINTCLOUD_IDLE_CLEANUP_MS = 30_000;
22
+ let cachedRGBDHasGPU;
23
+ let rgbdHasGPUPromise;
24
+ let rgbdPointCloudWorkers;
25
+ let rgbdPointCloudWorkerIndex = 0;
26
+ let rgbdPointCloudIdleCleanupTimeoutId;
27
+ const rgbdIntrinsicsByTopic = new Map();
28
+ const pendingRGBDBatches = new Map();
29
+ function collectArrayBuffers(arrays) {
30
+ const buffers = [];
31
+ for (let index = 0; index < arrays.length; index++) {
32
+ const array = arrays[index];
33
+ if (array) {
34
+ buffers.push(array.buffer);
35
+ }
36
+ }
37
+ return buffers;
38
+ }
39
+ function ensureEvenByteLength(data) {
40
+ if (data.length % 2 === 0) {
41
+ return data;
42
+ }
43
+ const padded = new Uint8Array(data.length + 1);
44
+ padded.set(data);
45
+ return padded;
46
+ }
47
+ function ensureRGBDGPUSupportDetection() {
48
+ if (cachedRGBDHasGPU != undefined || rgbdHasGPUPromise) {
49
+ return;
50
+ }
51
+ rgbdHasGPUPromise = (async () => {
52
+ if (typeof navigator.gpu === "undefined") {
53
+ cachedRGBDHasGPU = false;
54
+ return false;
55
+ }
56
+ try {
57
+ const adapter = await navigator.gpu.requestAdapter();
58
+ cachedRGBDHasGPU = adapter != undefined;
59
+ return cachedRGBDHasGPU;
60
+ }
61
+ catch {
62
+ cachedRGBDHasGPU = false;
63
+ return false;
64
+ }
65
+ finally {
66
+ rgbdHasGPUPromise = undefined;
67
+ }
68
+ })();
69
+ }
70
+ function getRGBDGPUSupport() {
71
+ ensureRGBDGPUSupportDetection();
72
+ return cachedRGBDHasGPU ?? false;
73
+ }
74
+ function ensureRGBDPointCloudWorkers() {
75
+ if (!rgbdPointCloudWorkers) {
76
+ rgbdPointCloudWorkers = Array.from({ length: RGBD_POINTCLOUD_WORKER_COUNT }, () => {
77
+ return createRGBDPointCloudWorkerSlot();
78
+ });
79
+ }
80
+ return rgbdPointCloudWorkers;
81
+ }
82
+ function createRGBDPointCloudWorkerSlot() {
83
+ const worker = new Worker(new URL("../pointcloud/pointcloudFromDepth.worker.js", import.meta.url), {
84
+ type: "module",
85
+ });
86
+ const remote = wrap(worker);
87
+ return {
88
+ worker,
89
+ remote,
90
+ activeJobs: 0,
91
+ dispose: () => {
92
+ remote[releaseProxy]();
93
+ worker.terminate();
94
+ },
95
+ };
96
+ }
97
+ function clearRGBDPointCloudIdleCleanupTimeout() {
98
+ if (rgbdPointCloudIdleCleanupTimeoutId != undefined) {
99
+ clearTimeout(rgbdPointCloudIdleCleanupTimeoutId);
100
+ rgbdPointCloudIdleCleanupTimeoutId = undefined;
101
+ }
102
+ }
103
+ function hasActiveRGBDPointCloudWork() {
104
+ const hasActiveJobs = rgbdPointCloudWorkers?.some((slot) => slot.activeJobs > 0) ?? false;
105
+ return hasActiveJobs || pendingRGBDBatches.size > 0;
106
+ }
107
+ function disposeRGBDPointCloudWorkers() {
108
+ clearRGBDPointCloudIdleCleanupTimeout();
109
+ for (const batch of pendingRGBDBatches.values()) {
110
+ clearRGBDBatchFlush(batch);
111
+ }
112
+ pendingRGBDBatches.clear();
113
+ rgbdIntrinsicsByTopic.clear();
114
+ if (rgbdPointCloudWorkers) {
115
+ for (const slot of rgbdPointCloudWorkers) {
116
+ slot.dispose();
117
+ }
118
+ rgbdPointCloudWorkers = undefined;
119
+ }
120
+ rgbdPointCloudWorkerIndex = 0;
121
+ }
122
+ function scheduleRGBDPointCloudWorkersCleanup() {
123
+ clearRGBDPointCloudIdleCleanupTimeout();
124
+ rgbdPointCloudIdleCleanupTimeoutId = setTimeout(() => {
125
+ if (hasActiveRGBDPointCloudWork()) {
126
+ scheduleRGBDPointCloudWorkersCleanup();
127
+ return;
128
+ }
129
+ disposeRGBDPointCloudWorkers();
130
+ }, RGBD_POINTCLOUD_IDLE_CLEANUP_MS);
131
+ }
132
+ function markRGBDPointCloudWorkersActive() {
133
+ scheduleRGBDPointCloudWorkersCleanup();
134
+ }
135
+ function replaceRGBDPointCloudWorker(index) {
136
+ const slots = ensureRGBDPointCloudWorkers();
137
+ const currentSlot = slots[index];
138
+ currentSlot?.dispose();
139
+ const replacementSlot = createRGBDPointCloudWorkerSlot();
140
+ slots[index] = replacementSlot;
141
+ markRGBDPointCloudWorkersActive();
142
+ return replacementSlot;
143
+ }
144
+ function tryAcquireRGBDPointCloudWorkerSlot() {
145
+ const ensuredSlots = ensureRGBDPointCloudWorkers();
146
+ markRGBDPointCloudWorkersActive();
147
+ for (let offset = 0; offset < ensuredSlots.length; offset++) {
148
+ const index = (rgbdPointCloudWorkerIndex + offset) % ensuredSlots.length;
149
+ const slot = ensuredSlots[index];
150
+ if (!slot || slot.activeJobs > 0) {
151
+ continue;
152
+ }
153
+ slot.activeJobs = 1;
154
+ rgbdPointCloudWorkerIndex = (index + 1) % ensuredSlots.length;
155
+ return { slot, index };
156
+ }
157
+ return undefined;
158
+ }
159
+ function repackYuv420pToI420(imageFrame, width, height) {
160
+ const specs = imageFrame.fb ?? imageFrame.sourceFb;
161
+ const source = ensureEvenByteLength(imageFrame.data);
162
+ const yStride = specs?.stride || width;
163
+ const uvWidth = Math.ceil(width / 2);
164
+ const uvHeight = Math.ceil(height / 2);
165
+ const uvStride = yStride > width ? Math.floor(yStride / 2) : uvWidth;
166
+ const yPlaneSize = width * height;
167
+ const uvPlaneSize = uvWidth * uvHeight;
168
+ const uOffset = specs?.p1Offset || yStride * height;
169
+ const vOffset = specs?.p2Offset || uOffset + uvStride * uvHeight;
170
+ const i420 = new Uint8Array(yPlaneSize + 2 * uvPlaneSize);
171
+ for (let row = 0; row < height; row++) {
172
+ const srcOffset = row * yStride;
173
+ const dstOffset = row * width;
174
+ i420.set(source.subarray(srcOffset, srcOffset + width), dstOffset);
175
+ }
176
+ for (let row = 0; row < uvHeight; row++) {
177
+ const srcUOffset = uOffset + row * uvStride;
178
+ const srcVOffset = vOffset + row * uvStride;
179
+ const dstOffset = row * uvWidth;
180
+ i420.set(source.subarray(srcUOffset, srcUOffset + uvWidth), yPlaneSize + dstOffset);
181
+ i420.set(source.subarray(srcVOffset, srcVOffset + uvWidth), yPlaneSize + uvPlaneSize + dstOffset);
182
+ }
183
+ return i420;
184
+ }
185
+ function getRGBDIntrinsics(topic, message, depthWidth, depthHeight, fallbackIntrinsics) {
186
+ const resolvedIntrinsics = resolveRGBDIntrinsicsFromMessage(message, depthWidth, depthHeight);
187
+ if (resolvedIntrinsics) {
188
+ rgbdIntrinsicsByTopic.set(topic, resolvedIntrinsics);
189
+ return resolvedIntrinsics;
190
+ }
191
+ const cachedIntrinsics = rgbdIntrinsicsByTopic.get(topic);
192
+ if (cachedIntrinsics) {
193
+ return cachedIntrinsics;
194
+ }
195
+ if (hasValidIntrinsics(fallbackIntrinsics)) {
196
+ return normalizePointCloudIntrinsics(fallbackIntrinsics, depthWidth, depthHeight);
197
+ }
198
+ return undefined;
199
+ }
200
+ function hasValidIntrinsics(intrinsics) {
201
+ const right = intrinsics?.right;
202
+ return Boolean(right &&
203
+ Number.isFinite(right.focalLenght?.x) &&
204
+ Number.isFinite(right.focalLenght?.y) &&
205
+ Number.isFinite(right.principalPoint?.x) &&
206
+ Number.isFinite(right.principalPoint?.y));
207
+ }
208
+ function normalizePointCloudIntrinsics(intrinsics, width, height) {
209
+ const normalizeCamera = (camera) => {
210
+ let fx = camera.focalLenght.x;
211
+ let fy = camera.focalLenght.y;
212
+ let cx = camera.principalPoint.x;
213
+ let cy = camera.principalPoint.y;
214
+ if (cx > 0 && cx <= 1 && cy > 0 && cy <= 1) {
215
+ cx *= width;
216
+ cy *= height;
217
+ if (fx > 0 && fx <= 1) {
218
+ fx *= width;
219
+ }
220
+ if (fy > 0 && fy <= 1) {
221
+ fy *= height;
222
+ }
223
+ }
224
+ else if (cx > width * 0.75 || cy > height * 0.75) {
225
+ const scaleX = width / (cx * 2);
226
+ const scaleY = height / (cy * 2);
227
+ fx *= scaleX;
228
+ fy *= scaleY;
229
+ cx *= scaleX;
230
+ cy *= scaleY;
231
+ }
232
+ return {
233
+ focalLenght: { x: fx, y: fy },
234
+ principalPoint: { x: cx, y: cy },
235
+ };
236
+ };
237
+ return {
238
+ left: normalizeCamera(intrinsics.left),
239
+ right: normalizeCamera(intrinsics.right),
240
+ };
241
+ }
242
+ function toMatrix3x3(matrix) {
243
+ const rows = matrix?.arrays;
244
+ if (!rows || rows.length < 3) {
245
+ return undefined;
246
+ }
247
+ const normalizedRows = rows
248
+ .slice(0, 3)
249
+ .map((row) => row?.values.slice(0, 3).map((value) => value ?? 0));
250
+ if (normalizedRows.some((row) => !row || row.length < 3)) {
251
+ return undefined;
252
+ }
253
+ return normalizedRows;
254
+ }
255
+ function extractIntrinsicsFromTransformation(transformation, targetWidth, targetHeight) {
256
+ const sourceIntrinsicMatrix = toMatrix3x3(transformation?.sourceIntrinsicMatrix);
257
+ if (!sourceIntrinsicMatrix) {
258
+ return undefined;
259
+ }
260
+ const fx = sourceIntrinsicMatrix[0][0];
261
+ const fy = sourceIntrinsicMatrix[1][1];
262
+ const cx = sourceIntrinsicMatrix[0][2];
263
+ const cy = sourceIntrinsicMatrix[1][2];
264
+ if (![fx, fy, cx, cy].every((value) => Number.isFinite(value))) {
265
+ return undefined;
266
+ }
267
+ const sourceWidth = transformation?.srcWidth || transformation?.width || targetWidth;
268
+ const sourceHeight = transformation?.srcHeight || transformation?.height || targetHeight;
269
+ const scaleX = sourceWidth > 0 ? targetWidth / sourceWidth : 1;
270
+ const scaleY = sourceHeight > 0 ? targetHeight / sourceHeight : 1;
271
+ return {
272
+ left: {
273
+ focalLenght: { x: fx * scaleX, y: fy * scaleY },
274
+ principalPoint: { x: cx * scaleX, y: cy * scaleY },
275
+ },
276
+ right: {
277
+ focalLenght: { x: fx * scaleX, y: fy * scaleY },
278
+ principalPoint: { x: cx * scaleX, y: cy * scaleY },
279
+ },
280
+ };
281
+ }
282
+ function resolveRGBDIntrinsicsFromMessage(message, depthWidth, depthHeight) {
283
+ return (extractIntrinsicsFromTransformation(message.depthImgFrame?.transformation, depthWidth, depthHeight) ??
284
+ extractIntrinsicsFromTransformation(message.depthEncodedFrame?.transformation, depthWidth, depthHeight) ??
285
+ extractIntrinsicsFromTransformation(message.colorImgFrame?.transformation, depthWidth, depthHeight) ??
286
+ extractIntrinsicsFromTransformation(message.colorEncodedFrame?.transformation, depthWidth, depthHeight));
287
+ }
288
+ async function extractEncodedColorFrame(encodedFrame, topicDecoders, topic) {
289
+ const decoderTopic = `${topic}::rgbd-color-extract`;
290
+ const decodeFrame = async () => await new Promise((resolve, reject) => {
291
+ const callback = (event) => {
292
+ resolve(event.message);
293
+ };
294
+ const rejectDecode = (error) => {
295
+ reject(error);
296
+ };
297
+ const args = {
298
+ topic: decoderTopic,
299
+ message: encodedFrame,
300
+ callback,
301
+ };
302
+ if (encodedFrame.profile === Profile.AVC) {
303
+ void deserializeEncodedFrameH264({
304
+ ...args,
305
+ topicDecoders,
306
+ onError: rejectDecode,
307
+ outputMode: "i420",
308
+ }).catch(rejectDecode);
309
+ }
310
+ else if (encodedFrame.profile === Profile.JPEG) {
311
+ void deserializeMJPEGFrame({
312
+ ...args,
313
+ outputMode: "i420",
314
+ }).catch(rejectDecode);
315
+ }
316
+ else if (encodedFrame.profile === Profile.HEVC) {
317
+ void deserializeEncodedFrameH265({
318
+ ...args,
319
+ topicDecoders,
320
+ onError: rejectDecode,
321
+ outputMode: "i420",
322
+ }).catch(rejectDecode);
323
+ }
324
+ else {
325
+ reject(new Error(`Unsupported RGBD color profile ${Profile[encodedFrame.profile] ?? encodedFrame.profile}`));
326
+ }
327
+ });
328
+ const decoded = await decodeFrame();
329
+ return {
330
+ data: ensureEvenByteLength(decoded.data),
331
+ width: decoded.width,
332
+ height: decoded.height,
333
+ };
334
+ }
335
+ function extractColorFrame(encodedFrame, imageFrame, topicDecoders, topic) {
336
+ if (encodedFrame) {
337
+ return extractEncodedColorFrame(encodedFrame, topicDecoders, topic);
338
+ }
339
+ if (imageFrame) {
340
+ const { width, height, type } = parseMessage(imageFrame);
341
+ const specs = imageFrame.fb ?? imageFrame.sourceFb;
342
+ if (type === Type.NV12) {
343
+ const stride = specs?.stride || width;
344
+ const uvOffset = specs?.p1Offset || stride * height;
345
+ return Promise.resolve({
346
+ data: convertNv12ToI420(ensureEvenByteLength(imageFrame.data), width, height, stride, stride, 0, uvOffset),
347
+ width,
348
+ height,
349
+ });
350
+ }
351
+ if (type === Type.YUV420p) {
352
+ return Promise.resolve({
353
+ data: repackYuv420pToI420(imageFrame, width, height),
354
+ width,
355
+ height,
356
+ });
357
+ }
358
+ return Promise.reject(new Error(`Unsupported RGBD color ImgFrame type ${Type[type]}`));
359
+ }
360
+ return Promise.resolve({
361
+ data: new Uint8Array(),
362
+ width: 0,
363
+ height: 0,
364
+ });
365
+ }
366
+ function extractDepthFrame(encodedFrame, imageFrame) {
367
+ if (encodedFrame) {
368
+ return ensureEvenByteLength(encodedFrame.data);
369
+ }
370
+ if (imageFrame) {
371
+ return ensureEvenByteLength(imageFrame.data);
372
+ }
373
+ return new Uint8Array();
374
+ }
375
+ function parseDimensions(message) {
376
+ const obj = {
377
+ depthWidth: 0,
378
+ depthHeight: 0,
379
+ };
380
+ if (message.depthEncodedFrame) {
381
+ const { width, height } = message.depthEncodedFrame ?? { width: 1920, height: 1200 };
382
+ obj.depthWidth = width;
383
+ obj.depthHeight = height;
384
+ }
385
+ else if (message.depthImgFrame) {
386
+ const { width, height } = parseMessage(message.depthImgFrame);
387
+ obj.depthWidth = width;
388
+ obj.depthHeight = height;
389
+ }
390
+ return obj;
391
+ }
392
+ function emitRGBDDepthPreview(topic, message, maxStereoDepth, callback, onError) {
393
+ if (!message.depthImgFrame) {
394
+ return;
395
+ }
396
+ const depthFrameForPreview = {
397
+ ...message.depthImgFrame,
398
+ data: message.depthImgFrame.data.slice(),
399
+ };
400
+ void deserializeDepthFrame({
401
+ topic,
402
+ message: depthFrameForPreview,
403
+ callback,
404
+ maxStereoDepth: maxStereoDepth / 1000,
405
+ }).catch(onError);
406
+ }
407
+ function emitRGBDPointCloud(frame, pointCloudData) {
408
+ const foxgloveMessage = {
409
+ timestamp: frame.timestamp ?? frame.receiveTime,
410
+ frame_id: `pointcloud-${frame.topic}-frame`,
411
+ point_stride: 16,
412
+ pose: {
413
+ position: { x: 0, y: 0, z: 0 },
414
+ orientation: { x: 0, y: 0, z: 1, w: 0 },
415
+ },
416
+ width: frame.depthWidth,
417
+ height: frame.depthHeight,
418
+ fields: [
419
+ { name: "x", offset: 0, type: VisualizerNumericType.FLOAT32 },
420
+ { name: "y", offset: 4, type: VisualizerNumericType.FLOAT32 },
421
+ { name: "z", offset: 8, type: VisualizerNumericType.FLOAT32 },
422
+ { name: "red", offset: 12, type: VisualizerNumericType.UINT8 },
423
+ { name: "green", offset: 13, type: VisualizerNumericType.UINT8 },
424
+ { name: "blue", offset: 14, type: VisualizerNumericType.UINT8 },
425
+ { name: "alpha", offset: 15, type: VisualizerNumericType.UINT8 },
426
+ ],
427
+ data: pointCloudData,
428
+ };
429
+ frame.callback({
430
+ topic: frame.topic,
431
+ receiveTime: frame.receiveTime,
432
+ message: foxgloveMessage,
433
+ sizeInBytes: pointCloudData.byteLength,
434
+ schemaName: "foxglove.PointCloud.Colored",
435
+ });
436
+ }
437
+ function getRGBDBatchSignature(frame) {
438
+ const intrinsics = frame.rgbdIntrinsics.right;
439
+ return [
440
+ frame.depthWidth,
441
+ frame.depthHeight,
442
+ frame.colorFrame.width,
443
+ frame.colorFrame.height,
444
+ intrinsics.focalLenght.x,
445
+ intrinsics.focalLenght.y,
446
+ intrinsics.principalPoint.x,
447
+ intrinsics.principalPoint.y,
448
+ frame.maxStereoDepth,
449
+ frame.hasGPU,
450
+ ].join(":");
451
+ }
452
+ function clearRGBDBatchFlush(batch) {
453
+ if (batch.flushTimeoutId != undefined) {
454
+ clearTimeout(batch.flushTimeoutId);
455
+ batch.flushTimeoutId = undefined;
456
+ }
457
+ }
458
+ export function resetRGBDPointCloudTopic(topic) {
459
+ const pendingBatch = pendingRGBDBatches.get(topic);
460
+ if (pendingBatch) {
461
+ clearRGBDBatchFlush(pendingBatch);
462
+ pendingRGBDBatches.delete(topic);
463
+ }
464
+ rgbdIntrinsicsByTopic.delete(topic);
465
+ }
466
+ async function processRGBDPointCloudBatchOnWorker(workerSlot, workerIndex, frames) {
467
+ const firstFrame = frames[0];
468
+ if (!firstFrame) {
469
+ workerSlot.activeJobs = Math.max(0, workerSlot.activeJobs - 1);
470
+ return;
471
+ }
472
+ const intrinsics = firstFrame.rgbdIntrinsics.right;
473
+ let timeoutId;
474
+ try {
475
+ const pointClouds = await Promise.race([
476
+ workerSlot.remote.depthToPointcloudGPU(transfer(frames.map((frame) => frame.depthFrame), collectArrayBuffers(frames.map((frame) => frame.depthFrame))), firstFrame.depthWidth, firstFrame.depthHeight, intrinsics.focalLenght.x, intrinsics.focalLenght.y, intrinsics.principalPoint.x, intrinsics.principalPoint.y, transfer(frames.map((frame) => frame.colorFrame.data), collectArrayBuffers(frames.map((frame) => frame.colorFrame.data))), firstFrame.colorFrame.width, firstFrame.colorFrame.height, firstFrame.maxStereoDepth, { hasGPU: firstFrame.hasGPU }),
477
+ new Promise((_, reject) => {
478
+ timeoutId = setTimeout(() => {
479
+ reject(new Error(`RGBD pointcloud worker ${workerIndex} timed out after ${RGBD_POINTCLOUD_WORKER_TIMEOUT_MS}ms for topic ${firstFrame.topic} ` +
480
+ `(batch=${frames.length}, depth=${firstFrame.depthWidth}x${firstFrame.depthHeight}, color=${firstFrame.colorFrame.width}x${firstFrame.colorFrame.height}, hasGPU=${firstFrame.hasGPU})`));
481
+ }, RGBD_POINTCLOUD_WORKER_TIMEOUT_MS);
482
+ }),
483
+ ]);
484
+ if (timeoutId) {
485
+ clearTimeout(timeoutId);
486
+ timeoutId = undefined;
487
+ }
488
+ if (pointClouds.length !== frames.length) {
489
+ throw new Error(`RGBD pointcloud worker returned ${pointClouds.length} frames for batch size ${frames.length}`);
490
+ }
491
+ for (let index = 0; index < frames.length; index++) {
492
+ const frame = frames[index];
493
+ const pointCloud = pointClouds[index];
494
+ if (!frame || !pointCloud) {
495
+ continue;
496
+ }
497
+ emitRGBDPointCloud(frame, pointCloud);
498
+ }
499
+ }
500
+ catch (error) {
501
+ if (timeoutId) {
502
+ clearTimeout(timeoutId);
503
+ timeoutId = undefined;
504
+ }
505
+ if (error instanceof Error && error.message.includes("timed out")) {
506
+ replaceRGBDPointCloudWorker(workerIndex);
507
+ console.error(error);
508
+ }
509
+ const normalizedError = error instanceof Error ? error : new Error(String(error));
510
+ for (const frame of frames) {
511
+ frame.onError(normalizedError);
512
+ }
513
+ }
514
+ finally {
515
+ workerSlot.activeJobs = Math.max(0, workerSlot.activeJobs - 1);
516
+ markRGBDPointCloudWorkersActive();
517
+ }
518
+ }
519
+ async function processRGBDPointCloudOnWorker(workerSlot, workerIndex, frame) {
520
+ const intrinsics = frame.rgbdIntrinsics.right;
521
+ let timeoutId;
522
+ try {
523
+ const pointClouds = await Promise.race([
524
+ workerSlot.remote.depthToPointcloudGPU(transfer([frame.depthFrame], [frame.depthFrame.buffer]), frame.depthWidth, frame.depthHeight, intrinsics.focalLenght.x, intrinsics.focalLenght.y, intrinsics.principalPoint.x, intrinsics.principalPoint.y, transfer([frame.colorFrame.data], [frame.colorFrame.data.buffer]), frame.colorFrame.width, frame.colorFrame.height, frame.maxStereoDepth, { hasGPU: frame.hasGPU }),
525
+ new Promise((_, reject) => {
526
+ timeoutId = setTimeout(() => {
527
+ reject(new Error(`RGBD pointcloud worker ${workerIndex} timed out after ${RGBD_POINTCLOUD_WORKER_TIMEOUT_MS}ms for topic ${frame.topic} ` +
528
+ `(depth=${frame.depthWidth}x${frame.depthHeight}, color=${frame.colorFrame.width}x${frame.colorFrame.height}, hasGPU=${frame.hasGPU})`));
529
+ }, RGBD_POINTCLOUD_WORKER_TIMEOUT_MS);
530
+ }),
531
+ ]);
532
+ if (timeoutId) {
533
+ clearTimeout(timeoutId);
534
+ timeoutId = undefined;
535
+ }
536
+ if (pointClouds.length !== 1 || !pointClouds[0]) {
537
+ throw new Error(`RGBD pointcloud worker returned ${pointClouds.length} frames for single-frame request`);
538
+ }
539
+ emitRGBDPointCloud(frame, pointClouds[0]);
540
+ }
541
+ catch (error) {
542
+ if (timeoutId) {
543
+ clearTimeout(timeoutId);
544
+ timeoutId = undefined;
545
+ }
546
+ if (error instanceof Error && error.message.includes("timed out")) {
547
+ replaceRGBDPointCloudWorker(workerIndex);
548
+ console.error(error);
549
+ }
550
+ frame.onError(error instanceof Error ? error : new Error(String(error)));
551
+ }
552
+ finally {
553
+ workerSlot.activeJobs = Math.max(0, workerSlot.activeJobs - 1);
554
+ markRGBDPointCloudWorkersActive();
555
+ }
556
+ }
557
+ function flushRGBDPointCloudBatch(topic) {
558
+ const batch = pendingRGBDBatches.get(topic);
559
+ if (!batch || batch.frames.length === 0) {
560
+ pendingRGBDBatches.delete(topic);
561
+ return;
562
+ }
563
+ clearRGBDBatchFlush(batch);
564
+ pendingRGBDBatches.delete(topic);
565
+ const reservedWorkerSelection = tryAcquireRGBDPointCloudWorkerSlot();
566
+ if (!reservedWorkerSelection) {
567
+ console.warn(`[RGBD] Dropping pointcloud frame for topic ${topic}: all RGBD pointcloud workers are busy.`);
568
+ return;
569
+ }
570
+ void processRGBDPointCloudBatchOnWorker(reservedWorkerSelection.slot, reservedWorkerSelection.index, batch.frames);
571
+ }
572
+ function enqueueRGBDPointCloudFrame(frame) {
573
+ if (!ENABLE_RGBD_GPU_BATCHING || !frame.hasGPU) {
574
+ const reservedWorkerSelection = tryAcquireRGBDPointCloudWorkerSlot();
575
+ if (!reservedWorkerSelection) {
576
+ console.warn(`[RGBD] Dropping pointcloud frame for topic ${frame.topic}: all RGBD pointcloud workers are busy.`);
577
+ return;
578
+ }
579
+ globalRenderMetricsManager.ensureTopic(constructKeyForTopicRenderMetrics("renderPointCloudFrame", "Point Cloud"));
580
+ globalInputEventMetricsManager.registerEvent(constructKeyForTopicRenderMetrics("incomingPointCloudFrame", "Point Cloud"));
581
+ globalDecodeMetricsManager.registerEvent("Point Cloud");
582
+ void processRGBDPointCloudOnWorker(reservedWorkerSelection.slot, reservedWorkerSelection.index, frame);
583
+ return;
584
+ }
585
+ const existingBatch = pendingRGBDBatches.get(frame.topic);
586
+ if (existingBatch &&
587
+ existingBatch.frames.length > 0 &&
588
+ getRGBDBatchSignature(existingBatch.frames[0]) !== getRGBDBatchSignature(frame)) {
589
+ flushRGBDPointCloudBatch(frame.topic);
590
+ }
591
+ const batch = pendingRGBDBatches.get(frame.topic) ?? { frames: [] };
592
+ batch.frames.push(frame);
593
+ pendingRGBDBatches.set(frame.topic, batch);
594
+ if (batch.frames.length >= RGBD_GPU_BATCH_SIZE) {
595
+ flushRGBDPointCloudBatch(frame.topic);
596
+ return;
597
+ }
598
+ clearRGBDBatchFlush(batch);
599
+ batch.flushTimeoutId = setTimeout(() => {
600
+ flushRGBDPointCloudBatch(frame.topic);
601
+ }, RGBD_GPU_BATCH_FLUSH_DELAY_MS);
602
+ }
603
+ export async function deserializeRGBDFrameToPointCloud({ topic, topicDecoders, cameraIntrinsics, maxStereoDepth, message, callback, onError, }) {
604
+ markRGBDPointCloudWorkersActive();
605
+ emitRGBDDepthPreview(topic, message, maxStereoDepth, callback, onError);
606
+ setTimeout(() => {
607
+ void processScheduledRGBDPointCloud({
608
+ topic,
609
+ topicDecoders,
610
+ cameraIntrinsics,
611
+ maxStereoDepth,
612
+ message,
613
+ callback,
614
+ onError,
615
+ });
616
+ }, RGBD_POINTCLOUD_SCHEDULE_DELAY_MS);
617
+ }
618
+ async function processScheduledRGBDPointCloud({ topic, topicDecoders, cameraIntrinsics, maxStereoDepth, message, callback, onError, }) {
619
+ const { receiveTime } = parseMessage(message);
620
+ const { depthWidth, depthHeight } = parseDimensions(message);
621
+ const rgbdIntrinsics = getRGBDIntrinsics(topic, message, depthWidth, depthHeight, cameraIntrinsics);
622
+ if (!rgbdIntrinsics) {
623
+ onError(new Error(`Cannot generate RGBD point cloud for topic "${topic}": missing camera intrinsics.`));
624
+ return;
625
+ }
626
+ const hasGPU = getRGBDGPUSupport();
627
+ try {
628
+ const colorFrame = await extractColorFrame(message.colorEncodedFrame, message.colorImgFrame, topicDecoders, topic);
629
+ const uint8DepthFrames = extractDepthFrame(message.depthEncodedFrame, message.depthImgFrame);
630
+ const depthFrame = uint8ArrayToUint16Array(uint8DepthFrames);
631
+ const pendingFrame = {
632
+ topic,
633
+ receiveTime,
634
+ timestamp: message.tsDevice,
635
+ depthWidth,
636
+ depthHeight,
637
+ rgbdIntrinsics,
638
+ colorFrame,
639
+ depthFrame,
640
+ maxStereoDepth,
641
+ hasGPU,
642
+ callback,
643
+ onError,
644
+ };
645
+ enqueueRGBDPointCloudFrame(pendingFrame);
646
+ }
647
+ catch (error) {
648
+ onError(error instanceof Error ? error : new Error(String(error)));
649
+ }
650
+ }
651
+ //# sourceMappingURL=rgbd-to-pointcloud.js.map