@bvdmitri/gyroview 0.0.0-stage → 0.9.0-cutaway.1

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 (302) hide show
  1. package/CHANGELOG.md +399 -0
  2. package/LICENSE +21 -0
  3. package/README.md +313 -2
  4. package/dist/define.d.ts +3 -0
  5. package/dist/define.js +4 -0
  6. package/dist/index.d.ts +1204 -0
  7. package/dist/index.js +12 -0
  8. package/dist/packages/adapters/blob/src/BlobRandomAccessSource.js +36 -0
  9. package/dist/packages/adapters/fetch/src/HttpByteStream.js +173 -0
  10. package/dist/packages/adapters/fetch/src/HttpRangeSource.js +37 -0
  11. package/dist/packages/adapters/fetch/src/HttpResource.js +227 -0
  12. package/dist/packages/adapters/fetch/src/HttpResourceLocator.js +35 -0
  13. package/dist/packages/adapters/fetch/src/contentRange.js +15 -0
  14. package/dist/packages/adapters/fetch/src/httpRequest.js +136 -0
  15. package/dist/packages/adapters/fetch/src/passingFailures.js +23 -0
  16. package/dist/packages/adapters/fetch/src/rangeFailures.js +16 -0
  17. package/dist/packages/adapters/fetch/src/recordingVersion.js +37 -0
  18. package/dist/packages/adapters/mediabunny/src/MediabunnyAudioPackager.js +162 -0
  19. package/dist/packages/adapters/mediabunny/src/MediabunnyCodecReader.js +93 -0
  20. package/dist/packages/adapters/mediabunny/src/SegmentChannel.js +135 -0
  21. package/dist/packages/adapters/mediabunny/src/bufferSources.js +12 -0
  22. package/dist/packages/adapters/mediabunny/src/decoderConfigurations.js +43 -0
  23. package/dist/packages/adapters/mediabunny/src/trackColour.js +20 -0
  24. package/dist/packages/adapters/mse-audio/src/MediaSourceAudioClock.js +138 -0
  25. package/dist/packages/adapters/mse-audio/src/SourceBufferFeeder.js +263 -0
  26. package/dist/packages/adapters/mse-audio/src/events.js +26 -0
  27. package/dist/packages/adapters/mse-audio/src/mediaSourceSupport.js +81 -0
  28. package/dist/packages/adapters/three/src/ThreeFrameRenderer.js +215 -0
  29. package/dist/packages/adapters/three/src/compileAndProve.js +14 -0
  30. package/dist/packages/adapters/three/src/conversionUniforms.js +60 -0
  31. package/dist/packages/adapters/three/src/drawSchedules.js +13 -0
  32. package/dist/packages/adapters/three/src/fullscreenPass.js +52 -0
  33. package/dist/packages/adapters/three/src/glslLiterals.js +10 -0
  34. package/dist/packages/adapters/three/src/lensTextures.js +34 -0
  35. package/dist/packages/adapters/three/src/matrixCorrections.js +34 -0
  36. package/dist/packages/adapters/three/src/pictureMaterials.js +44 -0
  37. package/dist/packages/adapters/three/src/renderInto.js +15 -0
  38. package/dist/packages/adapters/three/src/rendererParts.js +108 -0
  39. package/dist/packages/adapters/three/src/rendererUniforms.js +176 -0
  40. package/dist/packages/adapters/three/src/samplingStrategies.js +26 -0
  41. package/dist/packages/adapters/three/src/scissorBox.js +20 -0
  42. package/dist/packages/adapters/three/src/seamMeter/SeamMeterPass.js +85 -0
  43. package/dist/packages/adapters/three/src/seamMeter/rowMeans.js +42 -0
  44. package/dist/packages/adapters/three/src/shaderPrograms.js +68 -0
  45. package/dist/packages/adapters/three/src/shaders/analysis.frag.js +4 -0
  46. package/dist/packages/adapters/three/src/shaders/displayConversion.js +4 -0
  47. package/dist/packages/adapters/three/src/shaders/equirectangularRays.js +4 -0
  48. package/dist/packages/adapters/three/src/shaders/fixedJoin.js +4 -0
  49. package/dist/packages/adapters/three/src/shaders/fullscreen.vert.js +4 -0
  50. package/dist/packages/adapters/three/src/shaders/header.js +4 -0
  51. package/dist/packages/adapters/three/src/shaders/lensModels.js +4 -0
  52. package/dist/packages/adapters/three/src/shaders/lensSampling.js +4 -0
  53. package/dist/packages/adapters/three/src/shaders/lensTextures.js +4 -0
  54. package/dist/packages/adapters/three/src/shaders/rawLenses.frag.js +4 -0
  55. package/dist/packages/adapters/three/src/shaders/rectilinearRays.js +4 -0
  56. package/dist/packages/adapters/three/src/shaders/screenAreas.js +4 -0
  57. package/dist/packages/adapters/three/src/shaders/stitch.frag.js +4 -0
  58. package/dist/packages/adapters/three/src/threeMatrix.js +10 -0
  59. package/dist/packages/adapters/three/src/webglRenderer.js +37 -0
  60. package/dist/packages/adapters/webcodecs/src/WebCodecsVideoDecoderPort.js +152 -0
  61. package/dist/packages/adapters/webcodecs/src/colorSpaceOf.js +32 -0
  62. package/dist/packages/core/src/application/download/BlockStore.js +97 -0
  63. package/dist/packages/core/src/application/download/DownloadedAudioSamples.js +50 -0
  64. package/dist/packages/core/src/application/download/DownloadedVideoTrack.js +122 -0
  65. package/dist/packages/core/src/application/download/FileDownload.js +208 -0
  66. package/dist/packages/core/src/application/download/RecordingBuffer.js +22 -0
  67. package/dist/packages/core/src/application/download/SampleCursor.js +89 -0
  68. package/dist/packages/core/src/application/download/SourceByteStream.js +46 -0
  69. package/dist/packages/core/src/application/download/Transfers.js +82 -0
  70. package/dist/packages/core/src/application/download/startFileDownload.js +37 -0
  71. package/dist/packages/core/src/application/gainMatching/GainMatching.js +76 -0
  72. package/dist/packages/core/src/application/gainMatching/GainMatchingFrameSink.js +80 -0
  73. package/dist/packages/core/src/application/gainMatching/referenceLensOf.js +18 -0
  74. package/dist/packages/core/src/application/playback/Buffering.js +54 -0
  75. package/dist/packages/core/src/application/playback/ClockStart.js +55 -0
  76. package/dist/packages/core/src/application/playback/ClockWatch.js +76 -0
  77. package/dist/packages/core/src/application/playback/DecodePipeline.js +234 -0
  78. package/dist/packages/core/src/application/playback/DecodeRun.js +108 -0
  79. package/dist/packages/core/src/application/playback/FramePairQueue.js +93 -0
  80. package/dist/packages/core/src/application/playback/FramePairer.js +77 -0
  81. package/dist/packages/core/src/application/playback/PictureOnScreen.js +56 -0
  82. package/dist/packages/core/src/application/playback/PlaybackSession.js +410 -0
  83. package/dist/packages/core/src/application/playback/SeekOrder.js +35 -0
  84. package/dist/packages/core/src/application/playback/SessionLifecycle.js +42 -0
  85. package/dist/packages/core/src/application/playback/StartGate.js +69 -0
  86. package/dist/packages/core/src/application/playback/TimeUpdates.js +31 -0
  87. package/dist/packages/core/src/application/playback/WallClock.js +46 -0
  88. package/dist/packages/core/src/application/playback/keyframeTimeAt.js +15 -0
  89. package/dist/packages/core/src/application/playback/probeDecoding.js +182 -0
  90. package/dist/packages/core/src/application/recording/frameTimesOf.js +21 -0
  91. package/dist/packages/core/src/application/recording/inspectLayout.js +21 -0
  92. package/dist/packages/core/src/application/recording/inspectRecording.js +125 -0
  93. package/dist/packages/core/src/application/recording/locateOtherLensFile.js +18 -0
  94. package/dist/packages/core/src/application/recording/motionOf.js +43 -0
  95. package/dist/packages/core/src/application/recording/readRecording.js +31 -0
  96. package/dist/packages/core/src/application/recording/readRecordingFiles.js +130 -0
  97. package/dist/packages/core/src/application/recording/readSampleTable.js +27 -0
  98. package/dist/packages/core/src/application/recording/timeRecording.js +57 -0
  99. package/dist/packages/core/src/application/stabilization/StabilizingFrameSink.js +33 -0
  100. package/dist/packages/core/src/domain/colour/DisplayConversion.js +137 -0
  101. package/dist/packages/core/src/domain/colour/TrackColour.js +38 -0
  102. package/dist/packages/core/src/domain/colour/gainMatch.js +64 -0
  103. package/dist/packages/core/src/domain/colour/matrixCorrection.js +76 -0
  104. package/dist/packages/core/src/domain/container/KeyframeRule.js +7 -0
  105. package/dist/packages/core/src/domain/container/SampleTable.js +29 -0
  106. package/dist/packages/core/src/domain/container/TrackSampleTable.js +96 -0
  107. package/dist/packages/core/src/domain/container/presentationOrder.js +10 -0
  108. package/dist/packages/core/src/domain/download/DownloadPolicy.js +84 -0
  109. package/dist/packages/core/src/domain/download/isReadyToResume.js +27 -0
  110. package/dist/packages/core/src/domain/download/planDownloads.js +175 -0
  111. package/dist/packages/core/src/domain/download/trackNeeds.js +32 -0
  112. package/dist/packages/core/src/domain/format/boxes/BoxLayout.js +7 -0
  113. package/dist/packages/core/src/domain/format/boxes/boxConstants.js +16 -0
  114. package/dist/packages/core/src/domain/format/boxes/boxHeader.js +44 -0
  115. package/dist/packages/core/src/domain/format/boxes/scanBoxes.js +32 -0
  116. package/dist/packages/core/src/domain/format/calibration/CalibrationVersion.js +16 -0
  117. package/dist/packages/core/src/domain/format/calibration/layouts/CalibrationStringLayout.js +34 -0
  118. package/dist/packages/core/src/domain/format/calibration/layouts/LegacyCalibrationLayout.js +46 -0
  119. package/dist/packages/core/src/domain/format/calibration/layouts/MeiCalibrationLayout.js +121 -0
  120. package/dist/packages/core/src/domain/format/calibration/layouts/PolynomialCalibrationLayout.js +46 -0
  121. package/dist/packages/core/src/domain/format/calibration/offsetTokens.js +94 -0
  122. package/dist/packages/core/src/domain/format/calibration/parseOffsetString.js +77 -0
  123. package/dist/packages/core/src/domain/format/calibration/selectCalibration.js +59 -0
  124. package/dist/packages/core/src/domain/format/calibration/v6TermReading.js +20 -0
  125. package/dist/packages/core/src/domain/format/captureOrigin.js +34 -0
  126. package/dist/packages/core/src/domain/format/constants.js +35 -0
  127. package/dist/packages/core/src/domain/format/info/calibrationSources.js +27 -0
  128. package/dist/packages/core/src/domain/format/info/infoFields.js +116 -0
  129. package/dist/packages/core/src/domain/format/info/parseInfoRecord.js +107 -0
  130. package/dist/packages/core/src/domain/format/info/readInfoRecord.js +14 -0
  131. package/dist/packages/core/src/domain/format/layout/detectLensLayout.js +133 -0
  132. package/dist/packages/core/src/domain/format/mp4/hevcCodecString.js +161 -0
  133. package/dist/packages/core/src/domain/format/mp4/keyframeRules.js +81 -0
  134. package/dist/packages/core/src/domain/format/mp4/movieBoxes.js +52 -0
  135. package/dist/packages/core/src/domain/format/mp4/mp4BoxTypes.js +46 -0
  136. package/dist/packages/core/src/domain/format/mp4/mp4Layouts.js +183 -0
  137. package/dist/packages/core/src/domain/format/mp4/parseMovie.js +72 -0
  138. package/dist/packages/core/src/domain/format/mp4/readTable.js +31 -0
  139. package/dist/packages/core/src/domain/format/mp4/sampleLocations.js +76 -0
  140. package/dist/packages/core/src/domain/format/mp4/sampleTiming.js +120 -0
  141. package/dist/packages/core/src/domain/format/mp4/trackHeaders.js +88 -0
  142. package/dist/packages/core/src/domain/format/naming/RecordingFileName.js +70 -0
  143. package/dist/packages/core/src/domain/format/records/TrailerRecords.js +100 -0
  144. package/dist/packages/core/src/domain/format/records/exposure/parseExposureRecord.js +48 -0
  145. package/dist/packages/core/src/domain/format/records/gyro/FloatGyroSampleLayout.js +38 -0
  146. package/dist/packages/core/src/domain/format/records/gyro/RawGyroSampleLayout.js +55 -0
  147. package/dist/packages/core/src/domain/format/records/gyro/SampleColumns.js +89 -0
  148. package/dist/packages/core/src/domain/format/records/gyro/gyroLayouts.js +12 -0
  149. package/dist/packages/core/src/domain/format/records/gyro/parseGyroRecord.js +138 -0
  150. package/dist/packages/core/src/domain/format/records/trim/parseTrimRecord.js +24 -0
  151. package/dist/packages/core/src/domain/format/trailer/RecordHeader.js +23 -0
  152. package/dist/packages/core/src/domain/format/trailer/Trailer.js +23 -0
  153. package/dist/packages/core/src/domain/format/trailer/TrailerFooter.js +27 -0
  154. package/dist/packages/core/src/domain/format/trailer/locateRecords.js +80 -0
  155. package/dist/packages/core/src/domain/format/trailer/parseRecordIndex.js +28 -0
  156. package/dist/packages/core/src/domain/format/trailer/readTrailer.js +60 -0
  157. package/dist/packages/core/src/domain/motion/exposure/ExposureRecord.js +48 -0
  158. package/dist/packages/core/src/domain/motion/gyro/GyroTrack.js +70 -0
  159. package/dist/packages/core/src/domain/motion/gyro/medianStep.js +11 -0
  160. package/dist/packages/core/src/domain/motion/gyro/repairedTimeline.js +101 -0
  161. package/dist/packages/core/src/domain/motion/imu/ImuFrame.js +166 -0
  162. package/dist/packages/core/src/domain/motion/mounting/Mounting.js +131 -0
  163. package/dist/packages/core/src/domain/motion/orientation/OrientationTrack.js +142 -0
  164. package/dist/packages/core/src/domain/motion/orientation/estimateGyroBias.js +72 -0
  165. package/dist/packages/core/src/domain/motion/orientation/gravity.js +97 -0
  166. package/dist/packages/core/src/domain/motion/stabilization/Stabilizer.js +13 -0
  167. package/dist/packages/core/src/domain/motion/stabilization/stabilizers.js +86 -0
  168. package/dist/packages/core/src/domain/motion/timing/CaptureClock.js +41 -0
  169. package/dist/packages/core/src/domain/motion/timing/FrameTimes.js +85 -0
  170. package/dist/packages/core/src/domain/motion/timing/frameTimeSources.js +58 -0
  171. package/dist/packages/core/src/domain/motion/timing/resolveFrameTimes.js +68 -0
  172. package/dist/packages/core/src/domain/optics/EquidistantModel.js +34 -0
  173. package/dist/packages/core/src/domain/optics/MeiDistortion.js +27 -0
  174. package/dist/packages/core/src/domain/optics/MeiModel.js +27 -0
  175. package/dist/packages/core/src/domain/optics/PolynomialModel.js +39 -0
  176. package/dist/packages/core/src/domain/optics/lensPose.js +49 -0
  177. package/dist/packages/core/src/domain/optics/opticsConstants.js +5 -0
  178. package/dist/packages/core/src/domain/optics/scaledProjection.js +30 -0
  179. package/dist/packages/core/src/domain/playback/PlayerState.js +83 -0
  180. package/dist/packages/core/src/domain/rendition/RenditionSpan.js +70 -0
  181. package/dist/packages/core/src/domain/stitching/LensLayout.js +21 -0
  182. package/dist/packages/core/src/domain/stitching/StitchingSetup.js +87 -0
  183. package/dist/packages/core/src/domain/stitching/seamRing.js +4 -0
  184. package/dist/packages/core/src/domain/view/Framing.js +37 -0
  185. package/dist/packages/core/src/domain/view/Picture.js +12 -0
  186. package/dist/packages/core/src/domain/view/PictureQuality.js +26 -0
  187. package/dist/packages/core/src/domain/view/ViewMode.js +9 -0
  188. package/dist/packages/core/src/domain/view/ViewState.js +54 -0
  189. package/dist/packages/core/src/domain/view/lensTilesView.js +64 -0
  190. package/dist/packages/core/src/domain/view/magnification.js +103 -0
  191. package/dist/packages/core/src/domain/view/motionLookView.js +100 -0
  192. package/dist/packages/core/src/domain/view/normalView.js +37 -0
  193. package/dist/packages/core/src/domain/view/panoramaView.js +95 -0
  194. package/dist/packages/core/src/domain/view/rectilinear.js +53 -0
  195. package/dist/packages/core/src/domain/view/screenLayout.js +129 -0
  196. package/dist/packages/core/src/domain/view/screenLook.js +74 -0
  197. package/dist/packages/core/src/domain/view/viewGestures.js +104 -0
  198. package/dist/packages/core/src/domain/view/viewModes.js +31 -0
  199. package/dist/packages/core/src/ports/FramePair.js +6 -0
  200. package/dist/packages/core/src/shared/async/Deferred.js +42 -0
  201. package/dist/packages/core/src/shared/async/RunStop.js +40 -0
  202. package/dist/packages/core/src/shared/async/iteration.js +24 -0
  203. package/dist/packages/core/src/shared/binary/ByteRange.js +50 -0
  204. package/dist/packages/core/src/shared/binary/ByteRangeSet.js +85 -0
  205. package/dist/packages/core/src/shared/binary/ByteReader.js +104 -0
  206. package/dist/packages/core/src/shared/binary/concatenated.js +15 -0
  207. package/dist/packages/core/src/shared/errors/GyroViewError.js +140 -0
  208. package/dist/packages/core/src/shared/errors/reportLater.js +11 -0
  209. package/dist/packages/core/src/shared/events/Outbox.js +68 -0
  210. package/dist/packages/core/src/shared/events/TypedEmitter.js +55 -0
  211. package/dist/packages/core/src/shared/keysOf.js +10 -0
  212. package/dist/packages/core/src/shared/lazy.js +11 -0
  213. package/dist/packages/core/src/shared/mapRecord.js +11 -0
  214. package/dist/packages/core/src/shared/math/Matrix3.js +121 -0
  215. package/dist/packages/core/src/shared/math/Quaternion.js +133 -0
  216. package/dist/packages/core/src/shared/math/Vector3.js +58 -0
  217. package/dist/packages/core/src/shared/math/clamp.js +9 -0
  218. package/dist/packages/core/src/shared/math/countAtOrBelow.js +31 -0
  219. package/dist/packages/core/src/shared/math/minimum.js +17 -0
  220. package/dist/packages/core/src/shared/protobuf/ProtobufMessage.js +143 -0
  221. package/dist/packages/core/src/shared/protobuf/wireFormat.js +16 -0
  222. package/dist/packages/core/src/shared/text/urlPath.js +31 -0
  223. package/dist/packages/core/src/shared/text/utf8.js +12 -0
  224. package/dist/packages/core/src/shared/units/angle.js +22 -0
  225. package/dist/packages/core/src/shared/units/time.js +13 -0
  226. package/dist/packages/player/src/PlayerSource.js +14 -0
  227. package/dist/packages/player/src/browserPlayer.js +20 -0
  228. package/dist/packages/player/src/choices.js +24 -0
  229. package/dist/packages/player/src/composition/AnimationFrameDraws.js +38 -0
  230. package/dist/packages/player/src/composition/BrowserAttitudeSensor.js +191 -0
  231. package/dist/packages/player/src/composition/Disposables.js +31 -0
  232. package/dist/packages/player/src/composition/DrawingBufferFit.js +119 -0
  233. package/dist/packages/player/src/composition/animationFrames.js +9 -0
  234. package/dist/packages/player/src/composition/attitudeSensor.js +18 -0
  235. package/dist/packages/player/src/composition/browserPorts.js +80 -0
  236. package/dist/packages/player/src/composition/buildPipeline.js +186 -0
  237. package/dist/packages/player/src/composition/ensureDecodable.js +62 -0
  238. package/dist/packages/player/src/composition/openInputs.js +120 -0
  239. package/dist/packages/player/src/composition/openRecording.js +41 -0
  240. package/dist/packages/player/src/composition/readInputs.js +25 -0
  241. package/dist/packages/player/src/composition/renditionFrames.js +160 -0
  242. package/dist/packages/player/src/controls/ChoiceMenu.js +125 -0
  243. package/dist/packages/player/src/controls/FullscreenButton.js +29 -0
  244. package/dist/packages/player/src/controls/MotionLookButton.js +34 -0
  245. package/dist/packages/player/src/controls/PictureMenus.js +60 -0
  246. package/dist/packages/player/src/controls/SeekBar.js +126 -0
  247. package/dist/packages/player/src/controls/SoundControls.js +43 -0
  248. package/dist/packages/player/src/controls/TransportButtons.js +28 -0
  249. package/dist/packages/player/src/controls/ViewGestures.js +135 -0
  250. package/dist/packages/player/src/controls/Wording.js +79 -0
  251. package/dist/packages/player/src/controls/controlParts.js +38 -0
  252. package/dist/packages/player/src/controls/controls.js +4 -0
  253. package/dist/packages/player/src/controls/controlsBar.js +33 -0
  254. package/dist/packages/player/src/controls/controlsMarkup.js +100 -0
  255. package/dist/packages/player/src/controls/customControls.js +43 -0
  256. package/dist/packages/player/src/controls/formatTime.js +19 -0
  257. package/dist/packages/player/src/controls/icons.js +66 -0
  258. package/dist/packages/player/src/controls/keyboard.js +120 -0
  259. package/dist/packages/player/src/controls/messages.js +130 -0
  260. package/dist/packages/player/src/controls/nativeFullscreen.js +27 -0
  261. package/dist/packages/player/src/controls/parseMarkup.js +30 -0
  262. package/dist/packages/player/src/controls/resetViewButton.js +11 -0
  263. package/dist/packages/player/src/controls/sliderFill.js +15 -0
  264. package/dist/packages/player/src/element/ElementLoads.js +130 -0
  265. package/dist/packages/player/src/element/FullscreenToggle.js +93 -0
  266. package/dist/packages/player/src/element/GyroViewElement.js +358 -0
  267. package/dist/packages/player/src/element/IdleWatcher.js +71 -0
  268. package/dist/packages/player/src/element/PlayerCanvas.js +72 -0
  269. package/dist/packages/player/src/element/TypedEventElement.js +22 -0
  270. package/dist/packages/player/src/element/accessibleRegion.js +19 -0
  271. package/dist/packages/player/src/element/attributeNames.js +62 -0
  272. package/dist/packages/player/src/element/attributes.js +123 -0
  273. package/dist/packages/player/src/element/defineGyroView.js +20 -0
  274. package/dist/packages/player/src/element/earlyProperties.js +35 -0
  275. package/dist/packages/player/src/element/elementProperties.js +34 -0
  276. package/dist/packages/player/src/element/elementSource.js +39 -0
  277. package/dist/packages/player/src/element/fetchProperty.js +48 -0
  278. package/dist/packages/player/src/element/liveSettings.js +137 -0
  279. package/dist/packages/player/src/element/playbackAttributes.js +52 -0
  280. package/dist/packages/player/src/element/playerEventMirror.js +33 -0
  281. package/dist/packages/player/src/element/reflectedProperties.js +96 -0
  282. package/dist/packages/player/src/element/styles.js +4 -0
  283. package/dist/packages/player/src/element/template.js +46 -0
  284. package/dist/packages/player/src/inspectRecording.js +21 -0
  285. package/dist/packages/player/src/player/FrameLoop.js +35 -0
  286. package/dist/packages/player/src/player/MotionLook.js +150 -0
  287. package/dist/packages/player/src/player/PictureSettings.js +59 -0
  288. package/dist/packages/player/src/player/PlaybackStarts.js +38 -0
  289. package/dist/packages/player/src/player/Player.js +379 -0
  290. package/dist/packages/player/src/player/PlayerEvents.js +28 -0
  291. package/dist/packages/player/src/player/PlayerPhase.js +38 -0
  292. package/dist/packages/player/src/player/PlayerSound.js +60 -0
  293. package/dist/packages/player/src/player/PlayerView.js +143 -0
  294. package/dist/packages/player/src/player/SessionRelay.js +74 -0
  295. package/dist/packages/player/src/player/StatusAnnouncer.js +29 -0
  296. package/dist/packages/player/src/player/ensureFinite.js +26 -0
  297. package/dist/packages/player/src/player/loadRecording.js +47 -0
  298. package/dist/packages/player/src/player/transportEvents.js +30 -0
  299. package/dist/packages/player/src/player/viewAngles.js +17 -0
  300. package/dist/packages/player/src/rendition.js +52 -0
  301. package/dist/standalone.js +5633 -0
  302. package/package.json +71 -4
package/CHANGELOG.md ADDED
@@ -0,0 +1,399 @@
1
+ # Changelog
2
+
3
+ What changed for a page using the package, newest first. Until 1.0, a minor version may change
4
+ the API.
5
+
6
+ ## Unreleased
7
+
8
+ Added (ADR 0045, a recording is rendered frame by frame at the pace its consumer takes the frames):
9
+
10
+ - `openRendition(source, { width, from, to, stabilization, gainMatching, quality, canvas, signal })`
11
+ renders a recording frame by frame for an encoder: `rendition.frames()` yields every frame of
12
+ the span once, in order, as an equirectangular `VideoFrame` `width` pixels across and half as
13
+ many down, timed in microseconds from `from`, whenever the page asks for the next; nothing is
14
+ dropped for a slow encoder. It draws on an `OffscreenCanvas` of its own, so it runs in a
15
+ dedicated worker too. The settings are the player's defaults unless given. A width that is not
16
+ a multiple of four, or a span that holds no frame, is refused with `invalid-argument`. Its types,
17
+ `Rendition` and `RenditionOptions`, are exported.
18
+
19
+ Fixed:
20
+
21
+ - A clip trimmed in the Insta360 app is stabilized with the gyro of its own frames. The app keeps
22
+ the original's timing records, so every frame was timed as the original's frame of the same
23
+ number, as far off as the cut was from the start; the trim record the app adds now says where
24
+ the clip begins.
25
+ - The two files of a split-lens clip trimmed in the Insta360 app (`VID_..._00_002-trim.insv`) are
26
+ found as a pair: the name's suffix after the sequence number is kept for the other lens's file.
27
+
28
+ ## 0.8.1 (2026-10-08)
29
+
30
+ What a page may notice (ADR 0044, a server slow to answer is asked in fewer, larger ranges):
31
+
32
+ - A recording on a server that takes 0.3 s or more to answer each byte range, as Google Drive's
33
+ API does, is downloaded a refill at a time (32 MiB for an X5), three ranges at a time for a
34
+ lone file, two for each file of a split pair; it plays at the rate of the link rather than of
35
+ the server's waits. Every other server is asked as before. The wait is the shortest a byte
36
+ range of the file took to be answered while it opened, so a CDN whose cache missed on every
37
+ opening read, or a long round trip, may count too; what is read before the first play is
38
+ unchanged.
39
+
40
+ ## 0.8.0 (2026-10-08)
41
+
42
+ Added (ADR 0043, a recording behind a token is read through the page's fetch):
43
+
44
+ - `<gyro-view>` takes a `fetch` property, set from script: a function called in place of the
45
+ platform's `fetch` for every request made for the recording and its other lens's file, to add
46
+ a header such as `Authorization` or to sign each request. `null`, the default, keeps the
47
+ platform's own; a change loads a recording named by URL again, the same function set again
48
+ changes nothing. Its type, `RecordingFetch`, is exported.
49
+ - `UrlInput.fetch` does the same for a URL given to `createBrowserPlayer`'s `load`, in place of
50
+ the player's `http.fetch` for that recording.
51
+
52
+ Changed:
53
+
54
+ - A byte range answered `429 Too Many Requests` is asked for again after the same waits as one
55
+ answered with a server error, instead of failing the read at once (ADR 0019, amended); the
56
+ first size request, as before, is not.
57
+ - `createBrowserPlayer`'s `http.fetch` is typed by how the player calls it,
58
+ `(url: string, init: RequestInit) => Promise<Response>`; `window.fetch` still fits it.
59
+
60
+ ## 0.7.0 (2026-10-06)
61
+
62
+ Changed (ADR 0042, the player keeps a media element's promises):
63
+
64
+ - `seeked` comes once the first picture at the new position is drawn, as a video's does, rather
65
+ than the moment the seek was asked for; meanwhile the status is `seeking`, which pages could
66
+ not see before. A seek made while playing goes on playing after that picture, so `playing`
67
+ follows `seeked`. The spinner shows only once a seek or a wait has lasted 0.3 seconds.
68
+ - At its natural end a recording fires `timeupdate`, `pause`, then `ended`; a page driving its
69
+ own play button from `play` and `pause` now sees it stop. With `loop`, the recording goes back
70
+ to the start without `ended`, `play`, `pause` or a buffering status at each turn.
71
+ - `play()` resolves once playback runs. It rejects with the new `usage` codes `no-source` when
72
+ nothing is loaded or loading, and `play-interrupted` when a newer load, `unload()` or the
73
+ element's removal replaces the load it waited for; out of the document it waits for the
74
+ connection and the load that starts. A `play()` made while buffering after a seek resolves
75
+ once the clock runs.
76
+ - `load()` with `autoplay` resolves once the recording is ready; autoplay starts it then, a
77
+ refusal still a warning.
78
+
79
+ Changed:
80
+
81
+ - Chrome and Edge 111 are the oldest that play: the player sorts with `toSorted` (Chrome 110)
82
+ and colours its controls with `color-mix()` (Chrome 111). The README said 107. Safari stays
83
+ 16.4 on a Mac and 17.1 on an iPhone or iPad.
84
+ - `Player.events` and the iframe handle's `events` are for listening only: their types no longer
85
+ offer `emit` or `removeAll`, which let a page forge an event or silence every listener.
86
+ - `Player.togglePlayback()` pauses, or starts and reports a refused start as a `warning`;
87
+ `attachViewGestures` and `attachKeyboard` take it in place of `isPaused`, `pause`, `play` and
88
+ `events`.
89
+ - `el.messages` is read-only; a page changes the words through the `messages` setter. The
90
+ defaults could be changed in place for every player on the page.
91
+ - `ignored-attribute` and `refused-property` arrive a microtask after the element is defined or
92
+ connected, so a listener added right after `define()` hears them.
93
+ - The iframe handle's `error` event is a `GyroViewError` with its `category`, as its rejected
94
+ promises were. A frame that loads and never answers fails the commands that wait on it with
95
+ the new `usage` code `embed-unreachable`, after 10 seconds, instead of leaving them waiting; a
96
+ command a frame of an earlier build does not know rejects with `invalid-argument`.
97
+ - `window.GyroView` from `embed.js` offers `embed` alone; `EmbedHandle` is a type.
98
+ - The hosted `gyro-view.js` is the package's `standalone.js`, the whole API with it. The
99
+ standalone file, `gyro-view.js` and the embed page carry Three.js's and mediabunny's license
100
+ notices, about 1 kB more compressed. `embed.js` is smaller, about 11 kB.
101
+
102
+ Fixed:
103
+
104
+ - A new recording, a failed one or a removed `src` no longer shows the last recording's final
105
+ frame under the spinner, the error or nothing at all.
106
+ - The Fullscreen button says whether the player fills the screen (`aria-pressed`, and an icon
107
+ to leave), in the browser's fullscreen and in the pinned fill alike. The Escape that leaves
108
+ it goes no further, so a dialog around the player stays open. A `popover` attribute the page
109
+ set on the element stays when the player leaves fullscreen.
110
+ - A removed element gives up its WebGL context at once, rather than holding it until garbage
111
+ collection, where pages that create a player per preview could run into the browser's limit
112
+ of contexts. A context the browser took away between recordings, as an iPhone may in a tab
113
+ left in the background, gets a fresh canvas at the next load; every later load failed with
114
+ `render-unavailable`.
115
+ - At a fractional pixel ratio (125 or 150 percent) the canvas takes its own device pixels in
116
+ Chromium, so the picture is no longer softened by a pixel's rounding.
117
+ - F without a Fullscreen API (iPhone with a keyboard) does nothing rather than throwing, and a
118
+ refused fullscreen is no unhandled rejection.
119
+
120
+ - Split recordings (two files, older cameras): the file that carries the trailer is lens 0, so
121
+ files renamed, or served from URLs that hide `_00_` and `_10_`, are no longer stitched with
122
+ the lenses swapped. Names only break a tie.
123
+ - Gain matching keeps the exposure of the lens the view opens facing, as ADR 0012 intends; since
124
+ 0.5.0 (ADR 0039) it kept the lens behind the viewer and re-exposed the view in front. It also
125
+ compares the lenses only where neither is blown out, so flare in one lens no longer brightens
126
+ the other's whole hemisphere.
127
+ - On a portrait screen the normal view spans at most 120 degrees from top to bottom; it spanned
128
+ up to 150, its edges stretched. `fov` still gives the field across.
129
+ - A zoom toward the pointer keeps that point under the pointer in a rolled view (motion look).
130
+ - A read-ahead range that failed during a short network outage is asked for again once
131
+ playback needs it, instead of failing playback later with `source-unreadable`.
132
+ - Audio the browser evicts at the playhead, as a managed media source may, is fetched again, and
133
+ a full sound buffer makes room, instead of freezing the picture or failing.
134
+ - Lens tracks whose frames never pair fail with `unsupported-layout` instead of playing to the
135
+ end over a still picture.
136
+ - A scrub or seek to a key frame shows it at once; WebCodecs' whole-microsecond timestamps had
137
+ it waiting for the next frame.
138
+ - A seek or scrub closes the previous decoders at once, instead of keeping them open beside the
139
+ new ones for a moment at every step of a drag.
140
+ - A canvas whose WebGL context the browser took away fails the next load with
141
+ `render-unavailable` (the browser's side) instead of `invariant-violation`, and a frame larger
142
+ than the GPU's largest texture is refused with it instead of being shrunk on the CPU at every
143
+ upload.
144
+ - After a lost context comes back, every shader is compiled at once, so switching view modes
145
+ stays instant.
146
+ - The letterbox bars around a fitted picture are cleared, not stitched and painted black.
147
+ - An HLG recording's colours past white are read as white, not brighter.
148
+ - Damaged or hostile files fail with the recording's own codes (ADR 0030) instead of hanging,
149
+ exhausting memory or blaming the player: sample tables counting billions of samples, a
150
+ timescale of zero, a malformed sync sample table, a picture track without a decoder
151
+ configuration (`unsupported-container`, was `codec-unsupported`).
152
+ - A metadata track the player does not play, an info field it only reports, or a calibration
153
+ string that parses but fits no camera no longer keeps a recording from opening; the next
154
+ calibration string is used.
155
+ - Gyro slots a camera never wrote no longer add a "damaged gyro samples" warning to `ready`.
156
+ - An HEVC sample with an empty NAL unit is no longer mistaken for a delta frame.
157
+
158
+ ## 0.6.1 (2026-10-05)
159
+
160
+ Fixed:
161
+
162
+ - Where the browser has no fullscreen for the element (iPhone Safari), the pinned player covers
163
+ the whole viewport from inside a modal, a carousel or any container with a transform, a filter
164
+ or containment: it is shown in the top layer, as the browser's own fullscreen is (ADR 0041).
165
+ It filled only that container, and the page showed around it. It also stays above the page's
166
+ own layers, whatever their `z-index`, and keeps none of the page's corners, `translate`,
167
+ `rotate` or `scale` for it.
168
+
169
+ What a page may notice:
170
+
171
+ - While pinned, the element has `popover="manual"` beside `data-fill`; a page never sets the
172
+ attribute itself. A popover or dialog the page opens meanwhile shows above it, as over the
173
+ browser's fullscreen. Where the browser has no popovers of its own (Safari before 17), the
174
+ element is pinned in place as before.
175
+ - While pinned, the element's background, colour, font and overflow are its own: a page's styles
176
+ for every `[popover]`, and the page's own `background`, `color` or `font-family` on
177
+ `gyro-view`, no longer reach it; the `--gyro-view-*` properties still theme it. A page's
178
+ shadow or opacity for every popover would.
179
+ - An element the page removes while pinned leaves the fill, as one in the browser's fullscreen
180
+ does. One it moves within the same task, taken out and put back before a microtask runs, stays
181
+ pinned.
182
+
183
+ ## 0.6.0 (2026-10-05)
184
+
185
+ New:
186
+
187
+ - Motion look: on a phone or tablet, a toggle in the normal view lets the device turn the view, the
188
+ screen a window into the recording with its horizon level with the real one (ADR 0040). The
189
+ element and the player have `motionLook` (`on`, `off` or `unavailable`), `startMotionLook()`,
190
+ which iOS honours only from a tap's handler, and `stopMotionLook()`; `motionlookchange` reports
191
+ it, and the warnings `motion-look-refused` and `motion-look-needs-gesture` say why it did not
192
+ start.
193
+
194
+ What a page may notice:
195
+
196
+ - `PlayerEvents`, `GyroViewElementEventMap` and `WarningCode` have the new event and codes; a
197
+ record keyed on every event or code needs them.
198
+ - `view` and `viewchange` give a fresh object of `yaw`, `pitch` and `fieldOfView` each time.
199
+ - The iframe the snippet creates allows `accelerometer; gyroscope; magnetometer`; a hand-written
200
+ iframe needs them for motion look. Without them, Chromium offers no toggle; iOS offers it and
201
+ refuses at the first press (`motion-look-refused`).
202
+ - On the narrowest players with the motion look toggle shown, the Stabilization menu gives way
203
+ to it.
204
+
205
+ ## 0.5.0 (2026-10-03)
206
+
207
+ New:
208
+
209
+ - Antigravity A1 recordings play. The A1 leaves the profile, tier and level of its HEVC
210
+ configuration blank, so the codec string is read from the stream's SPS instead (ADR 0037), and
211
+ its IMU frame is measured (ADR 0009): the `ready` event's `imuFrame` is
212
+ `{ name: 'A1', isVerified: true }`.
213
+
214
+ What a page may notice:
215
+
216
+ - An HEVC recording's codec in the `ready` event's `tracks[].codec` begins with the track's
217
+ sample entry type, `hvc1` on every camera seen, where it began with `hev1`; its profile, tier
218
+ and level are unchanged (ADR 0037).
219
+ - `off` and `follow` stand a recording upright as its camera stood, where its IMU frame is
220
+ measured (ADR 0038). An X3, X4 Air, X5 or X6 held upright on a stick or a tripod, its usual
221
+ pose, holds its body frame a quarter turn from upright, and these modes drew its recordings
222
+ turned a quarter turn; a camera upside down or with its lens axis vertical stands upright too.
223
+ Under `horizon`, such a camera's view keeps its heading while the camera pitches.
224
+ - An Insta360 X3 recording is stabilized about the right axes: its IMU frame is measured
225
+ (ADR 0009). The `ready` event's `imuFrame` is `{ name: 'X3', isVerified: true }` where it was
226
+ the unverified aligned frame, the load no longer warns that it has not been verified, and an
227
+ X3 on a stick or a tripod stands upright in `off` and `follow` too.
228
+ - An Insta360 ONE RS recording stands upright under `lock` and `horizon`, which turned it on its
229
+ side. Its IMU frame is assumed from one recording of a camera that never turned: `imuFrame` is
230
+ `{ name: 'ONE RS (unverified)', isVerified: false }`, and the load still warns.
231
+ - The view opens where Insta360 Studio centres the recording, in every mode: a half turn from
232
+ lens 0, where it opened, for a camera whose lens axis lies level, and a quarter turn from lens 0
233
+ for one whose lens axis is vertical, as the A1's (ADR 0038, ADR 0039). `yaw` 0 looks there: a
234
+ page that set `yaw` to face a direction faces the opposite one on a level camera until it adds
235
+ 180 degrees. The equirectangular panorama is centred as Studio's export is.
236
+
237
+ ## 0.4.2 (2026-10-02)
238
+
239
+ What a page may notice:
240
+
241
+ - Dragging, pinching or turning the wheel over a playing recording draws the picture once per
242
+ animation frame: in Safari, a fast mouse no longer slows the recording down. A change of the
243
+ view, the view mode, the quality or the exposure matching shows at the next animation frame
244
+ rather than at the call (ADR 0035).
245
+ - Opening a recording keeps the page busy for less time: its gyro is read and integrated in two
246
+ thirds of the time.
247
+ - Playing takes less of the page's main thread: the download plans what to fetch every few
248
+ mebibytes rather than at every frame (ADR 0036).
249
+ - A bundle that includes the package is smaller: mediabunny's demuxers for formats other than
250
+ MP4 and QuickTime are left out. The standalone module is about 40 KB smaller compressed.
251
+
252
+ ## 0.4.1 (2026-10-01)
253
+
254
+ What a page may notice:
255
+
256
+ - An Insta360 X4 Air recording is stabilized about the right axes: its IMU frame is measured
257
+ (ADR 0009) where it was assumed. The `ready` event's `imuFrame` is
258
+ `{ name: 'X4 Air', isVerified: true }` where it was the unverified aligned frame, and the load
259
+ no longer warns (`recording-degraded`) that the IMU frame has not been verified on a recording.
260
+ - A camera is given a measured IMU frame only by its whole model name: a model whose name merely
261
+ begins with a measured camera's, such as a later "X5 Pro", gets the unverified frame and its
262
+ warning until a recording of it is measured.
263
+
264
+ ## 0.4.0 (2026-10-01)
265
+
266
+ New:
267
+
268
+ - Insta360 X6 recordings play. Their only calibration is a v6 string, now read as the Mei model
269
+ with more terms (ADR 0032); the X6's IMU frame and the radial scale its lenses want are
270
+ measured (ADR 0009, ADR 0023); and its 10-bit HLG video is shown as SDR, as Insta360 Studio
271
+ shows it (ADR 0033).
272
+ - Each of the `ready` event's `tracks` has a `colour`: its primaries, transfer, matrix and range
273
+ as the track's bitstream says (`TrackColour`, with the types `ColourPrimaries`,
274
+ `TransferCharacteristics`, `MatrixCoefficients` and `ColourRange`).
275
+ - `inspectRecording`'s calibration strings include `offsetV6`, and `calibrationVersion` may be
276
+ 6, the v6 string's.
277
+
278
+ What a page may notice:
279
+
280
+ - A recording whose only calibration is a v6 string plays where it failed with
281
+ `no-calibration`.
282
+ - Stabilization samples the gyro half way through each frame's shutter, no longer half a
283
+ readout later. An X5's stabilized picture shifts by that half readout (4 ms at 5.7K60, 10.6 ms
284
+ at 8K30), and a swinging camera's world holds stiller (ADR 0034).
285
+ - A track whose colour the player cannot show as it should is drawn with a
286
+ `recording-degraded` warning: a PQ or linear-light transfer is drawn as recorded, SDR of wider
287
+ primaries than BT.709's is shown as BT.709, HLG of primaries other than BT.709's or BT.2020's
288
+ keeps its gamut.
289
+ - The decoder is told the track's whole colour, not only its range (the range alone where the
290
+ browser's WebCodecs does not know one of its values).
291
+ - Where a browser's decoder converts a track's colour through another matrix than the track's
292
+ own, as Safari's does with the X6's BT.2020, the picture is brought back to the track's.
293
+ - Seeking again and again, or dragging the seek bar, no longer stops playback now and then with
294
+ `decode` ("the audio element failed (media error 3)"): the sound is handed to the browser in
295
+ whole segments, so a seek can no longer cut one in half.
296
+
297
+ ## 0.3.1 (2026-09-30)
298
+
299
+ New:
300
+
301
+ - Every error has a `category`, derived from its code, that says whose side the failure is on:
302
+ `browser`, `recording`, `source`, `usage` or `internal`; `GYRO_VIEW_ERROR_CATEGORIES` and the
303
+ type `GyroViewErrorCategory` list them. The README's "When a recording cannot play" gives the
304
+ codes of each, and what a `<video>` fallback can and cannot do (ADR 0030).
305
+ - The `webcodecs-unavailable` error: the browser has no WebCodecs, on a page not served over
306
+ HTTPS or in an old browser.
307
+
308
+ What a page may notice:
309
+
310
+ - A page on plain HTTP, or a browser without WebCodecs, hears `webcodecs-unavailable` where it
311
+ heard `codec-unsupported`, whose message blamed the codec.
312
+
313
+ ## 0.3.0 (2026-09-30)
314
+
315
+ What a page may notice:
316
+
317
+ - A recording named by URL is downloaded in file order as it plays, the picture and the sound
318
+ from the same bytes, each fetched about once (ADR 0029). Over a simulated link a little
319
+ slower than an X5 recording at its highest setting (200 Mbit/s against 210), it starts in
320
+ half the time, fetches under half the bytes, and after a seek shows the target in half the
321
+ time, asking for nothing of the old position.
322
+
323
+ | State | What it downloads |
324
+ | ---------------------- | --------------------------------------------------------------------- |
325
+ | Loaded, never played | What opening and the first frame need; with `preload="none"` no frame |
326
+ | Playing | Up to 10 s or 128 MiB ahead, whichever is less, topped up as it plays |
327
+ | Paused after playing | On up to that budget, then nothing |
328
+ | A seek | The old position's requests end at once; the target first |
329
+ | Starved by the network | Waits until the next 4 s are downloaded, then plays on |
330
+
331
+ - A range that breaks off or brings nothing for 10 s is asked for again from its next byte.
332
+
333
+ New:
334
+
335
+ - The `source-changed` error: the recording at the URL was replaced while it played, as its
336
+ `ETag` tells, or else its `Last-Modified` and size. Exposing `ETag` across origins is
337
+ optional, and now named in the CORS advice.
338
+
339
+ ## 0.2.0 (2026-09-29)
340
+
341
+ What a page may notice:
342
+
343
+ - The controls are restyled, and fit the player's own width and the pointer (ADR 0028): a
344
+ shaded bar with a thin seek bar, Stabilization and View buttons that show the icon of the
345
+ choice in effect and open menus of the choices with their icons and a line describing each,
346
+ and on a narrow player menus over the whole player and fewer parts; on touch, 44-pixel
347
+ targets.
348
+ - The Stop button is gone; `stop()` and the S key remain. `labels.stop` goes with it.
349
+ - The theme's defaults follow the new look: `--gyro-view-accent` and `--gyro-view-text` are
350
+ white, `--gyro-view-controls-background` is `rgb(0 0 0 / 60%)` and `--gyro-view-radius` is
351
+ `8px`; `--gyro-view-menu-background` is new. A page's own values keep working.
352
+
353
+ New:
354
+
355
+ - `crossorigin` on `<gyro-view>`, with a media element's keywords: `use-credentials` fetches the
356
+ recording, its byte ranges and the other lens's file of a split pair with the visitor's
357
+ cookies, for recordings kept private behind cookies on another origin. `crossOrigin` reflects
358
+ it, `null` while absent. Changing it reloads a recording named by URL; the iframe embed never
359
+ carries it. Nothing changes for a page that does not set it.
360
+ - `credentials` on a `UrlInput` (`player.load({ main: { url, credentials: 'include' } })`), in
361
+ place of the player's shared `http.requestInit.credentials` for that recording.
362
+ - A `cors` error for a request sent with credentials names what the host must add: the page's
363
+ origin by name, not `*`, and `Access-Control-Allow-Credentials: true`.
364
+ - The equirectangular panorama and the raw lenses zoom up to eight times, from four, for fine
365
+ detail in 5.7K and 8K recordings. The normal view keeps its 30 to 120 degrees.
366
+ - `messages` takes `stabilizationModeDescriptions`, `viewModeDescriptions` and `labels.close`.
367
+
368
+ Fixed:
369
+
370
+ - The raw lenses no longer show a faint grey line along the tiles' edges on Apple GPUs, where a
371
+ player's size put an edge between two pixels the GPU shades together.
372
+
373
+ ## 0.1.0 (2026-09-29)
374
+
375
+ The first release:
376
+
377
+ - `<gyro-view>`, registered by `@bubo-squared/gyroview/define` or `defineGyroView()`, safe to
378
+ import while a server renders the page. It runs under a strict CSP (`trusted-types gyroview`,
379
+ no inline styles), speaks the page's language through `messages`, shows visitors plain failure
380
+ texts and names its overlays as parts. It opens on the raw lenses; the view menu offers them
381
+ first, then the equirectangular panorama and the normal view. The stitch reads the legacy
382
+ calibration string's radius as 96 degrees from the lens axis, where Insta360 Studio's own stitch
383
+ puts the far field; `ready` reports `offset` as the calibration version. The lens pose reads
384
+ the calibration's roll mirrored and turns both lenses alike by their yaw and pitch, which
385
+ removes the step at the side seams of the X5 recordings. The `quality`
386
+ attribute (`fast`, `balanced`, `high`, listed in `PICTURE_QUALITIES`, with `setQuality` and
387
+ `qualitychange`) sets how finely
388
+ the lens images are read and how many device pixels are drawn; `balanced` reads them through a
389
+ mip chain along each pixel's footprint, so fine detail no longer shimmers.
390
+ - `createBrowserPlayer`, the player without the element, for an interface of your own, with
391
+ `attachViewGestures` and `attachKeyboard` for the element's gestures and shortcuts.
392
+ - `inspectRecording`, which reads what a recording holds from a file or a URL.
393
+ - `@bubo-squared/gyroview/standalone`, one file with Three.js and mediabunny inside, for a page
394
+ without a bundler.
395
+ - Events in media-element terms, each `warning` with a `code` a page can act on beside its
396
+ message; times, durations and views in plain seconds and degrees.
397
+ - `GyroViewError` and its codes (`GYRO_VIEW_ERROR_CODES`), and the types of the settings,
398
+ metadata, events and inspection, with `GyroViewAttributes` for a framework's JSX declaration
399
+ of the element.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Bubo²
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.