mirror of
https://github.com/freemkv/libfreemkv.git
synced 2026-10-07 18:13:10 +00:00
The PlayItem STN (stream-number) table offset was hard-coded to 32, which is only correct for a single-angle PlayItem. A multi-angle PlayItem inserts number_of_angles(1) + flags(1) + (number_of_angles-1) angle references (10 bytes each) right after still_time, so its STN begins at 32 + 2 + (number_of_angles-1)*10. The fixed offset lands inside that angle block and misreads the stream counts as garbage (e.g. n_video=51 on Spider-Man 3 UHD 00245/00246.mpls, number_of_angles=2 => real offset 44), dropping every stream including the primary video. That makes DiscTitle::has_video() return false, which drops a multi-angle/seamless-branch feature from the disc's nav candidate set and loses it in main-title selection. Compute the STN offset from is_multi_angle (bit 4 of item[10]) + number_of _angles. Add a regression test building a 2-angle PlayItem and asserting the video stream is found past the angle block. Validated on a 92-disc real UHD/BD corpus (offline scan): 0 main-feature pick changes vs baseline, 3 multi-angle titles (Spider-Man 3 244/245/246) recover has_video. Adds examples/corpus_titledump.rs as the regression tool.