@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.
- package/CHANGELOG.md +399 -0
- package/LICENSE +21 -0
- package/README.md +313 -2
- package/dist/define.d.ts +3 -0
- package/dist/define.js +4 -0
- package/dist/index.d.ts +1204 -0
- package/dist/index.js +12 -0
- package/dist/packages/adapters/blob/src/BlobRandomAccessSource.js +36 -0
- package/dist/packages/adapters/fetch/src/HttpByteStream.js +173 -0
- package/dist/packages/adapters/fetch/src/HttpRangeSource.js +37 -0
- package/dist/packages/adapters/fetch/src/HttpResource.js +227 -0
- package/dist/packages/adapters/fetch/src/HttpResourceLocator.js +35 -0
- package/dist/packages/adapters/fetch/src/contentRange.js +15 -0
- package/dist/packages/adapters/fetch/src/httpRequest.js +136 -0
- package/dist/packages/adapters/fetch/src/passingFailures.js +23 -0
- package/dist/packages/adapters/fetch/src/rangeFailures.js +16 -0
- package/dist/packages/adapters/fetch/src/recordingVersion.js +37 -0
- package/dist/packages/adapters/mediabunny/src/MediabunnyAudioPackager.js +162 -0
- package/dist/packages/adapters/mediabunny/src/MediabunnyCodecReader.js +93 -0
- package/dist/packages/adapters/mediabunny/src/SegmentChannel.js +135 -0
- package/dist/packages/adapters/mediabunny/src/bufferSources.js +12 -0
- package/dist/packages/adapters/mediabunny/src/decoderConfigurations.js +43 -0
- package/dist/packages/adapters/mediabunny/src/trackColour.js +20 -0
- package/dist/packages/adapters/mse-audio/src/MediaSourceAudioClock.js +138 -0
- package/dist/packages/adapters/mse-audio/src/SourceBufferFeeder.js +263 -0
- package/dist/packages/adapters/mse-audio/src/events.js +26 -0
- package/dist/packages/adapters/mse-audio/src/mediaSourceSupport.js +81 -0
- package/dist/packages/adapters/three/src/ThreeFrameRenderer.js +215 -0
- package/dist/packages/adapters/three/src/compileAndProve.js +14 -0
- package/dist/packages/adapters/three/src/conversionUniforms.js +60 -0
- package/dist/packages/adapters/three/src/drawSchedules.js +13 -0
- package/dist/packages/adapters/three/src/fullscreenPass.js +52 -0
- package/dist/packages/adapters/three/src/glslLiterals.js +10 -0
- package/dist/packages/adapters/three/src/lensTextures.js +34 -0
- package/dist/packages/adapters/three/src/matrixCorrections.js +34 -0
- package/dist/packages/adapters/three/src/pictureMaterials.js +44 -0
- package/dist/packages/adapters/three/src/renderInto.js +15 -0
- package/dist/packages/adapters/three/src/rendererParts.js +108 -0
- package/dist/packages/adapters/three/src/rendererUniforms.js +176 -0
- package/dist/packages/adapters/three/src/samplingStrategies.js +26 -0
- package/dist/packages/adapters/three/src/scissorBox.js +20 -0
- package/dist/packages/adapters/three/src/seamMeter/SeamMeterPass.js +85 -0
- package/dist/packages/adapters/three/src/seamMeter/rowMeans.js +42 -0
- package/dist/packages/adapters/three/src/shaderPrograms.js +68 -0
- package/dist/packages/adapters/three/src/shaders/analysis.frag.js +4 -0
- package/dist/packages/adapters/three/src/shaders/displayConversion.js +4 -0
- package/dist/packages/adapters/three/src/shaders/equirectangularRays.js +4 -0
- package/dist/packages/adapters/three/src/shaders/fixedJoin.js +4 -0
- package/dist/packages/adapters/three/src/shaders/fullscreen.vert.js +4 -0
- package/dist/packages/adapters/three/src/shaders/header.js +4 -0
- package/dist/packages/adapters/three/src/shaders/lensModels.js +4 -0
- package/dist/packages/adapters/three/src/shaders/lensSampling.js +4 -0
- package/dist/packages/adapters/three/src/shaders/lensTextures.js +4 -0
- package/dist/packages/adapters/three/src/shaders/rawLenses.frag.js +4 -0
- package/dist/packages/adapters/three/src/shaders/rectilinearRays.js +4 -0
- package/dist/packages/adapters/three/src/shaders/screenAreas.js +4 -0
- package/dist/packages/adapters/three/src/shaders/stitch.frag.js +4 -0
- package/dist/packages/adapters/three/src/threeMatrix.js +10 -0
- package/dist/packages/adapters/three/src/webglRenderer.js +37 -0
- package/dist/packages/adapters/webcodecs/src/WebCodecsVideoDecoderPort.js +152 -0
- package/dist/packages/adapters/webcodecs/src/colorSpaceOf.js +32 -0
- package/dist/packages/core/src/application/download/BlockStore.js +97 -0
- package/dist/packages/core/src/application/download/DownloadedAudioSamples.js +50 -0
- package/dist/packages/core/src/application/download/DownloadedVideoTrack.js +122 -0
- package/dist/packages/core/src/application/download/FileDownload.js +208 -0
- package/dist/packages/core/src/application/download/RecordingBuffer.js +22 -0
- package/dist/packages/core/src/application/download/SampleCursor.js +89 -0
- package/dist/packages/core/src/application/download/SourceByteStream.js +46 -0
- package/dist/packages/core/src/application/download/Transfers.js +82 -0
- package/dist/packages/core/src/application/download/startFileDownload.js +37 -0
- package/dist/packages/core/src/application/gainMatching/GainMatching.js +76 -0
- package/dist/packages/core/src/application/gainMatching/GainMatchingFrameSink.js +80 -0
- package/dist/packages/core/src/application/gainMatching/referenceLensOf.js +18 -0
- package/dist/packages/core/src/application/playback/Buffering.js +54 -0
- package/dist/packages/core/src/application/playback/ClockStart.js +55 -0
- package/dist/packages/core/src/application/playback/ClockWatch.js +76 -0
- package/dist/packages/core/src/application/playback/DecodePipeline.js +234 -0
- package/dist/packages/core/src/application/playback/DecodeRun.js +108 -0
- package/dist/packages/core/src/application/playback/FramePairQueue.js +93 -0
- package/dist/packages/core/src/application/playback/FramePairer.js +77 -0
- package/dist/packages/core/src/application/playback/PictureOnScreen.js +56 -0
- package/dist/packages/core/src/application/playback/PlaybackSession.js +410 -0
- package/dist/packages/core/src/application/playback/SeekOrder.js +35 -0
- package/dist/packages/core/src/application/playback/SessionLifecycle.js +42 -0
- package/dist/packages/core/src/application/playback/StartGate.js +69 -0
- package/dist/packages/core/src/application/playback/TimeUpdates.js +31 -0
- package/dist/packages/core/src/application/playback/WallClock.js +46 -0
- package/dist/packages/core/src/application/playback/keyframeTimeAt.js +15 -0
- package/dist/packages/core/src/application/playback/probeDecoding.js +182 -0
- package/dist/packages/core/src/application/recording/frameTimesOf.js +21 -0
- package/dist/packages/core/src/application/recording/inspectLayout.js +21 -0
- package/dist/packages/core/src/application/recording/inspectRecording.js +125 -0
- package/dist/packages/core/src/application/recording/locateOtherLensFile.js +18 -0
- package/dist/packages/core/src/application/recording/motionOf.js +43 -0
- package/dist/packages/core/src/application/recording/readRecording.js +31 -0
- package/dist/packages/core/src/application/recording/readRecordingFiles.js +130 -0
- package/dist/packages/core/src/application/recording/readSampleTable.js +27 -0
- package/dist/packages/core/src/application/recording/timeRecording.js +57 -0
- package/dist/packages/core/src/application/stabilization/StabilizingFrameSink.js +33 -0
- package/dist/packages/core/src/domain/colour/DisplayConversion.js +137 -0
- package/dist/packages/core/src/domain/colour/TrackColour.js +38 -0
- package/dist/packages/core/src/domain/colour/gainMatch.js +64 -0
- package/dist/packages/core/src/domain/colour/matrixCorrection.js +76 -0
- package/dist/packages/core/src/domain/container/KeyframeRule.js +7 -0
- package/dist/packages/core/src/domain/container/SampleTable.js +29 -0
- package/dist/packages/core/src/domain/container/TrackSampleTable.js +96 -0
- package/dist/packages/core/src/domain/container/presentationOrder.js +10 -0
- package/dist/packages/core/src/domain/download/DownloadPolicy.js +84 -0
- package/dist/packages/core/src/domain/download/isReadyToResume.js +27 -0
- package/dist/packages/core/src/domain/download/planDownloads.js +175 -0
- package/dist/packages/core/src/domain/download/trackNeeds.js +32 -0
- package/dist/packages/core/src/domain/format/boxes/BoxLayout.js +7 -0
- package/dist/packages/core/src/domain/format/boxes/boxConstants.js +16 -0
- package/dist/packages/core/src/domain/format/boxes/boxHeader.js +44 -0
- package/dist/packages/core/src/domain/format/boxes/scanBoxes.js +32 -0
- package/dist/packages/core/src/domain/format/calibration/CalibrationVersion.js +16 -0
- package/dist/packages/core/src/domain/format/calibration/layouts/CalibrationStringLayout.js +34 -0
- package/dist/packages/core/src/domain/format/calibration/layouts/LegacyCalibrationLayout.js +46 -0
- package/dist/packages/core/src/domain/format/calibration/layouts/MeiCalibrationLayout.js +121 -0
- package/dist/packages/core/src/domain/format/calibration/layouts/PolynomialCalibrationLayout.js +46 -0
- package/dist/packages/core/src/domain/format/calibration/offsetTokens.js +94 -0
- package/dist/packages/core/src/domain/format/calibration/parseOffsetString.js +77 -0
- package/dist/packages/core/src/domain/format/calibration/selectCalibration.js +59 -0
- package/dist/packages/core/src/domain/format/calibration/v6TermReading.js +20 -0
- package/dist/packages/core/src/domain/format/captureOrigin.js +34 -0
- package/dist/packages/core/src/domain/format/constants.js +35 -0
- package/dist/packages/core/src/domain/format/info/calibrationSources.js +27 -0
- package/dist/packages/core/src/domain/format/info/infoFields.js +116 -0
- package/dist/packages/core/src/domain/format/info/parseInfoRecord.js +107 -0
- package/dist/packages/core/src/domain/format/info/readInfoRecord.js +14 -0
- package/dist/packages/core/src/domain/format/layout/detectLensLayout.js +133 -0
- package/dist/packages/core/src/domain/format/mp4/hevcCodecString.js +161 -0
- package/dist/packages/core/src/domain/format/mp4/keyframeRules.js +81 -0
- package/dist/packages/core/src/domain/format/mp4/movieBoxes.js +52 -0
- package/dist/packages/core/src/domain/format/mp4/mp4BoxTypes.js +46 -0
- package/dist/packages/core/src/domain/format/mp4/mp4Layouts.js +183 -0
- package/dist/packages/core/src/domain/format/mp4/parseMovie.js +72 -0
- package/dist/packages/core/src/domain/format/mp4/readTable.js +31 -0
- package/dist/packages/core/src/domain/format/mp4/sampleLocations.js +76 -0
- package/dist/packages/core/src/domain/format/mp4/sampleTiming.js +120 -0
- package/dist/packages/core/src/domain/format/mp4/trackHeaders.js +88 -0
- package/dist/packages/core/src/domain/format/naming/RecordingFileName.js +70 -0
- package/dist/packages/core/src/domain/format/records/TrailerRecords.js +100 -0
- package/dist/packages/core/src/domain/format/records/exposure/parseExposureRecord.js +48 -0
- package/dist/packages/core/src/domain/format/records/gyro/FloatGyroSampleLayout.js +38 -0
- package/dist/packages/core/src/domain/format/records/gyro/RawGyroSampleLayout.js +55 -0
- package/dist/packages/core/src/domain/format/records/gyro/SampleColumns.js +89 -0
- package/dist/packages/core/src/domain/format/records/gyro/gyroLayouts.js +12 -0
- package/dist/packages/core/src/domain/format/records/gyro/parseGyroRecord.js +138 -0
- package/dist/packages/core/src/domain/format/records/trim/parseTrimRecord.js +24 -0
- package/dist/packages/core/src/domain/format/trailer/RecordHeader.js +23 -0
- package/dist/packages/core/src/domain/format/trailer/Trailer.js +23 -0
- package/dist/packages/core/src/domain/format/trailer/TrailerFooter.js +27 -0
- package/dist/packages/core/src/domain/format/trailer/locateRecords.js +80 -0
- package/dist/packages/core/src/domain/format/trailer/parseRecordIndex.js +28 -0
- package/dist/packages/core/src/domain/format/trailer/readTrailer.js +60 -0
- package/dist/packages/core/src/domain/motion/exposure/ExposureRecord.js +48 -0
- package/dist/packages/core/src/domain/motion/gyro/GyroTrack.js +70 -0
- package/dist/packages/core/src/domain/motion/gyro/medianStep.js +11 -0
- package/dist/packages/core/src/domain/motion/gyro/repairedTimeline.js +101 -0
- package/dist/packages/core/src/domain/motion/imu/ImuFrame.js +166 -0
- package/dist/packages/core/src/domain/motion/mounting/Mounting.js +131 -0
- package/dist/packages/core/src/domain/motion/orientation/OrientationTrack.js +142 -0
- package/dist/packages/core/src/domain/motion/orientation/estimateGyroBias.js +72 -0
- package/dist/packages/core/src/domain/motion/orientation/gravity.js +97 -0
- package/dist/packages/core/src/domain/motion/stabilization/Stabilizer.js +13 -0
- package/dist/packages/core/src/domain/motion/stabilization/stabilizers.js +86 -0
- package/dist/packages/core/src/domain/motion/timing/CaptureClock.js +41 -0
- package/dist/packages/core/src/domain/motion/timing/FrameTimes.js +85 -0
- package/dist/packages/core/src/domain/motion/timing/frameTimeSources.js +58 -0
- package/dist/packages/core/src/domain/motion/timing/resolveFrameTimes.js +68 -0
- package/dist/packages/core/src/domain/optics/EquidistantModel.js +34 -0
- package/dist/packages/core/src/domain/optics/MeiDistortion.js +27 -0
- package/dist/packages/core/src/domain/optics/MeiModel.js +27 -0
- package/dist/packages/core/src/domain/optics/PolynomialModel.js +39 -0
- package/dist/packages/core/src/domain/optics/lensPose.js +49 -0
- package/dist/packages/core/src/domain/optics/opticsConstants.js +5 -0
- package/dist/packages/core/src/domain/optics/scaledProjection.js +30 -0
- package/dist/packages/core/src/domain/playback/PlayerState.js +83 -0
- package/dist/packages/core/src/domain/rendition/RenditionSpan.js +70 -0
- package/dist/packages/core/src/domain/stitching/LensLayout.js +21 -0
- package/dist/packages/core/src/domain/stitching/StitchingSetup.js +87 -0
- package/dist/packages/core/src/domain/stitching/seamRing.js +4 -0
- package/dist/packages/core/src/domain/view/Framing.js +37 -0
- package/dist/packages/core/src/domain/view/Picture.js +12 -0
- package/dist/packages/core/src/domain/view/PictureQuality.js +26 -0
- package/dist/packages/core/src/domain/view/ViewMode.js +9 -0
- package/dist/packages/core/src/domain/view/ViewState.js +54 -0
- package/dist/packages/core/src/domain/view/lensTilesView.js +64 -0
- package/dist/packages/core/src/domain/view/magnification.js +103 -0
- package/dist/packages/core/src/domain/view/motionLookView.js +100 -0
- package/dist/packages/core/src/domain/view/normalView.js +37 -0
- package/dist/packages/core/src/domain/view/panoramaView.js +95 -0
- package/dist/packages/core/src/domain/view/rectilinear.js +53 -0
- package/dist/packages/core/src/domain/view/screenLayout.js +129 -0
- package/dist/packages/core/src/domain/view/screenLook.js +74 -0
- package/dist/packages/core/src/domain/view/viewGestures.js +104 -0
- package/dist/packages/core/src/domain/view/viewModes.js +31 -0
- package/dist/packages/core/src/ports/FramePair.js +6 -0
- package/dist/packages/core/src/shared/async/Deferred.js +42 -0
- package/dist/packages/core/src/shared/async/RunStop.js +40 -0
- package/dist/packages/core/src/shared/async/iteration.js +24 -0
- package/dist/packages/core/src/shared/binary/ByteRange.js +50 -0
- package/dist/packages/core/src/shared/binary/ByteRangeSet.js +85 -0
- package/dist/packages/core/src/shared/binary/ByteReader.js +104 -0
- package/dist/packages/core/src/shared/binary/concatenated.js +15 -0
- package/dist/packages/core/src/shared/errors/GyroViewError.js +140 -0
- package/dist/packages/core/src/shared/errors/reportLater.js +11 -0
- package/dist/packages/core/src/shared/events/Outbox.js +68 -0
- package/dist/packages/core/src/shared/events/TypedEmitter.js +55 -0
- package/dist/packages/core/src/shared/keysOf.js +10 -0
- package/dist/packages/core/src/shared/lazy.js +11 -0
- package/dist/packages/core/src/shared/mapRecord.js +11 -0
- package/dist/packages/core/src/shared/math/Matrix3.js +121 -0
- package/dist/packages/core/src/shared/math/Quaternion.js +133 -0
- package/dist/packages/core/src/shared/math/Vector3.js +58 -0
- package/dist/packages/core/src/shared/math/clamp.js +9 -0
- package/dist/packages/core/src/shared/math/countAtOrBelow.js +31 -0
- package/dist/packages/core/src/shared/math/minimum.js +17 -0
- package/dist/packages/core/src/shared/protobuf/ProtobufMessage.js +143 -0
- package/dist/packages/core/src/shared/protobuf/wireFormat.js +16 -0
- package/dist/packages/core/src/shared/text/urlPath.js +31 -0
- package/dist/packages/core/src/shared/text/utf8.js +12 -0
- package/dist/packages/core/src/shared/units/angle.js +22 -0
- package/dist/packages/core/src/shared/units/time.js +13 -0
- package/dist/packages/player/src/PlayerSource.js +14 -0
- package/dist/packages/player/src/browserPlayer.js +20 -0
- package/dist/packages/player/src/choices.js +24 -0
- package/dist/packages/player/src/composition/AnimationFrameDraws.js +38 -0
- package/dist/packages/player/src/composition/BrowserAttitudeSensor.js +191 -0
- package/dist/packages/player/src/composition/Disposables.js +31 -0
- package/dist/packages/player/src/composition/DrawingBufferFit.js +119 -0
- package/dist/packages/player/src/composition/animationFrames.js +9 -0
- package/dist/packages/player/src/composition/attitudeSensor.js +18 -0
- package/dist/packages/player/src/composition/browserPorts.js +80 -0
- package/dist/packages/player/src/composition/buildPipeline.js +186 -0
- package/dist/packages/player/src/composition/ensureDecodable.js +62 -0
- package/dist/packages/player/src/composition/openInputs.js +120 -0
- package/dist/packages/player/src/composition/openRecording.js +41 -0
- package/dist/packages/player/src/composition/readInputs.js +25 -0
- package/dist/packages/player/src/composition/renditionFrames.js +160 -0
- package/dist/packages/player/src/controls/ChoiceMenu.js +125 -0
- package/dist/packages/player/src/controls/FullscreenButton.js +29 -0
- package/dist/packages/player/src/controls/MotionLookButton.js +34 -0
- package/dist/packages/player/src/controls/PictureMenus.js +60 -0
- package/dist/packages/player/src/controls/SeekBar.js +126 -0
- package/dist/packages/player/src/controls/SoundControls.js +43 -0
- package/dist/packages/player/src/controls/TransportButtons.js +28 -0
- package/dist/packages/player/src/controls/ViewGestures.js +135 -0
- package/dist/packages/player/src/controls/Wording.js +79 -0
- package/dist/packages/player/src/controls/controlParts.js +38 -0
- package/dist/packages/player/src/controls/controls.js +4 -0
- package/dist/packages/player/src/controls/controlsBar.js +33 -0
- package/dist/packages/player/src/controls/controlsMarkup.js +100 -0
- package/dist/packages/player/src/controls/customControls.js +43 -0
- package/dist/packages/player/src/controls/formatTime.js +19 -0
- package/dist/packages/player/src/controls/icons.js +66 -0
- package/dist/packages/player/src/controls/keyboard.js +120 -0
- package/dist/packages/player/src/controls/messages.js +130 -0
- package/dist/packages/player/src/controls/nativeFullscreen.js +27 -0
- package/dist/packages/player/src/controls/parseMarkup.js +30 -0
- package/dist/packages/player/src/controls/resetViewButton.js +11 -0
- package/dist/packages/player/src/controls/sliderFill.js +15 -0
- package/dist/packages/player/src/element/ElementLoads.js +130 -0
- package/dist/packages/player/src/element/FullscreenToggle.js +93 -0
- package/dist/packages/player/src/element/GyroViewElement.js +358 -0
- package/dist/packages/player/src/element/IdleWatcher.js +71 -0
- package/dist/packages/player/src/element/PlayerCanvas.js +72 -0
- package/dist/packages/player/src/element/TypedEventElement.js +22 -0
- package/dist/packages/player/src/element/accessibleRegion.js +19 -0
- package/dist/packages/player/src/element/attributeNames.js +62 -0
- package/dist/packages/player/src/element/attributes.js +123 -0
- package/dist/packages/player/src/element/defineGyroView.js +20 -0
- package/dist/packages/player/src/element/earlyProperties.js +35 -0
- package/dist/packages/player/src/element/elementProperties.js +34 -0
- package/dist/packages/player/src/element/elementSource.js +39 -0
- package/dist/packages/player/src/element/fetchProperty.js +48 -0
- package/dist/packages/player/src/element/liveSettings.js +137 -0
- package/dist/packages/player/src/element/playbackAttributes.js +52 -0
- package/dist/packages/player/src/element/playerEventMirror.js +33 -0
- package/dist/packages/player/src/element/reflectedProperties.js +96 -0
- package/dist/packages/player/src/element/styles.js +4 -0
- package/dist/packages/player/src/element/template.js +46 -0
- package/dist/packages/player/src/inspectRecording.js +21 -0
- package/dist/packages/player/src/player/FrameLoop.js +35 -0
- package/dist/packages/player/src/player/MotionLook.js +150 -0
- package/dist/packages/player/src/player/PictureSettings.js +59 -0
- package/dist/packages/player/src/player/PlaybackStarts.js +38 -0
- package/dist/packages/player/src/player/Player.js +379 -0
- package/dist/packages/player/src/player/PlayerEvents.js +28 -0
- package/dist/packages/player/src/player/PlayerPhase.js +38 -0
- package/dist/packages/player/src/player/PlayerSound.js +60 -0
- package/dist/packages/player/src/player/PlayerView.js +143 -0
- package/dist/packages/player/src/player/SessionRelay.js +74 -0
- package/dist/packages/player/src/player/StatusAnnouncer.js +29 -0
- package/dist/packages/player/src/player/ensureFinite.js +26 -0
- package/dist/packages/player/src/player/loadRecording.js +47 -0
- package/dist/packages/player/src/player/transportEvents.js +30 -0
- package/dist/packages/player/src/player/viewAngles.js +17 -0
- package/dist/packages/player/src/rendition.js +52 -0
- package/dist/standalone.js +5633 -0
- 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.
|