fix: restore pre-4.15 Skeleton.width/height contract on iOS (v4.15.6)
v4.15 replaced the old pointForCaptureDevicePointOfInterest-based
mapSkeletonToPreview with direct aspect-fit/fill math and — as a side
effect — changed what Skeleton.width / Skeleton.height mean:
pre-4.15: size of the VISIBLE sensor region projected onto the preview
layer, in preview points.
(abs of pointForCaptureDevicePointOfInterest((0,0))
vs pointForCaptureDevicePointOfInterest((1,1))
= source dims × aspect-fit/fill scale)
v4.15.x: full preview layer bounds in points (too wide in FIT;
too narrow in FILL).
Downstream consumers that normalize via `joint.x / skeleton.width` saw
skeletons drawn at the wrong scale after the bump. Joint x/y values
themselves were unchanged across versions (both return preview points),
so the fix is localized: set width/height = oriW*scale, oriH*scale.
AnalysisObject.boundingBox still goes through the original
pointForCaptureDevicePointOfInterest path (preserved pre-4.15 values);
AnalysisObject.frameSize is unchanged (oriented sensor dims). No
other consumer-visible coord shape changed.
New Skeleton fields (leftHeel / rightHeel / leftToe / rightToe /
leftIndex / rightIndex) are additive — default to null for consumers
that don't reference them.
Version 4.15.6.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>