Record the live box arrow grid so replay matches live paint
Box analysis used the finger sample grid, so replay packed arrows into the contact zone. The pass now stores draw_arrows cells; stale box caches miss and re-run. Verified with shared and Studio tests, including a live-vs-replay canvas check.
This commit is contained in:
@@ -13,9 +13,8 @@ The inputs are real: the 33-frame box recording under ``dist/`` (its own ``frame
|
||||
``session.json`` and ``raw_0001.mp4``) and the shipped finger configuration and asset
|
||||
bundle. The pass is driven with the **box** chain on it for the offset and round-trip
|
||||
checks, and with the **finger** chain on the same footage for the keyframe, reset and
|
||||
size checks — the finger chain over box footage is exactly what the Step 0 measurement
|
||||
did, and it is the only way to get a validity mask (and therefore a static candidate
|
||||
grid) out of this recording.
|
||||
size checks. The finger chain is what produces a validity mask; the box chain's
|
||||
painter grid is static without one.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -530,14 +529,16 @@ def test_the_stored_size_is_the_measured_encoding(box_pass, finger_pass):
|
||||
_, box = box_pass
|
||||
box_reader = AnalysisReader(box.directory)
|
||||
try:
|
||||
# The box chain has no validity mask, so there is no digest and every frame
|
||||
# carries its own grid keyframe: 4,882 B of record per frame at 400 candidates,
|
||||
# plus whatever depth it carries.
|
||||
# The box chain has no validity mask. Its sample grid is the live painter's
|
||||
# (spacing 20 over the 365 stitch, every cell kept): 18 x 18 = 324 candidates,
|
||||
# one keyframe, and the per-frame record is values plus whatever depth it carries.
|
||||
frames = list(box_reader.frames())
|
||||
assert {item.candidates for item in frames} == {324}
|
||||
assert box_reader.frame_record_bytes == sum(
|
||||
32 + 400 * 12 + 50 + item.depth_stored_bytes
|
||||
for item in box_reader.frames()
|
||||
frame_payload_bytes(324, with_validity=False) + item.depth_stored_bytes
|
||||
for item in frames
|
||||
)
|
||||
assert box_reader.keyframe_counts == {"grid": 26}
|
||||
assert box_reader.keyframe_counts == {"grid": 1}
|
||||
assert box_reader.mask() is None
|
||||
finally:
|
||||
box_reader.close()
|
||||
|
||||
Reference in New Issue
Block a user