@displayxr/inline3d 1.49.2 → 1.49.3

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 CHANGED
@@ -5,6 +5,24 @@ entry points (`.`, `./three`) are frozen for 1.x, while the **scene subpaths** (
5
5
  `./splat`, `./model`) are a preview tier whose options may change in any release. Entries below say
6
6
  which tier they touch, because that is what tells you whether an upgrade can move your pixels.
7
7
 
8
+ ## 1.49.3 — 2026-11-04
9
+
10
+ ### Fixed — a camera view is not "woven" before the camera's first frame; `frameAgeMs` tells a stalled track (`.`, `./camera`, `./call`)
11
+
12
+ Core and preview tier. A camera view (`addCameraView`, and the call's self view, which is one)
13
+ registers its tile on the wall with an SBS buffer it fills from the camera. That buffer started
14
+ as a blank default 300x150 canvas, and the wall counted any image source as a stereo frame, so
15
+ `firstWoven` settled `woven: true` (`hold-elapsed`) on a tile that had never shown the camera.
16
+ On an Android 3D tablet whose camera track was `live` but delivered no frames, the call reported
17
+ the self view woven over a black tile.
18
+
19
+ - **Core:** an `addImage` source that is a canvas or image with no pixels (0x0) is not a stereo
20
+ frame: `firstWoven` / `rewoven()` wait for one. Sources that report no size keep the old rule.
21
+ - **`./camera`:** the woven buffer starts 0x0 until the first camera frame is painted into it.
22
+ - **New: `view.frameAgeMs`** and `weaveState().frameAgeMs` (also `call.diagnostics().self`): ms
23
+ since the camera last delivered a new frame to the view, null before the first. A stalled track
24
+ keeps its last frame on screen; a growing age is how a page shows "no video".
25
+
8
26
  ## 1.49.2 — 2026-11-04
9
27
 
10
28
  ### Fixed — the camera probe waits for the DisplayXR 3D camera before opening a plain lens (`./camera`, `./call`)
package/camera.d.ts CHANGED
@@ -285,6 +285,11 @@ export interface CameraViewWeaveState {
285
285
  firstWoven: { woven: boolean; confirmed: boolean; reason: string | null; ms: number } | 'pending' | null;
286
286
  /** Layer re-registrations attempted after a `'layer-failed'` (bounded; reset by a woven result). */
287
287
  layerRetries: number;
288
+ /**
289
+ * Milliseconds since the camera last delivered a new frame to the view, or null before the first.
290
+ * A stalled track keeps its last frame on screen; a growing age is how a page shows "no video".
291
+ */
292
+ frameAgeMs: number | null;
288
293
  }
289
294
 
290
295
  /** A self view from {@link addCameraView}. */