fix(m10): item-scope take-FX fingerprint; Windows path case-fold; comments

Item scope now reads the active take's FX chain via TakeFX_* (new
fxChainIdentityForItems helper), not the owning track's chain.
normalizeSlashes lowercases on _WIN32 for detectParent. Stale
comments corrected; case-fold tests added.
This commit is contained in:
2026-07-26 18:03:20 -04:00
parent 20018c1df2
commit 7d0fcc49ac
8 changed files with 177 additions and 38 deletions
+13 -7
View File
@@ -22,20 +22,26 @@
#include "provenance.h"
class MediaTrack;
class MediaItem;
namespace reasampler {
class BankBook;
// The in-scope FX-chain identity of a source track, folded to the pure
// provenance string. For TRACK scope this is the track's own FX chain; for ITEM
// scope the take/item FX are the in-scope chain — but item/take FX are not
// enumerable via the TrackFX_* family, so an item-scope capture folds an EMPTY
// chain identity (the drift signal then keys on scope + range only, which is
// honest: we do not claim to fingerprint take FX we cannot read). TRACK scope reads
// TrackFX_GetCount / GetFXName / GetFXGUID / GetEnabled in chain order.
// The in-scope FX-chain identity of a source track (Track scope), folded to the
// pure provenance string. Reads the track's own FX chain via TrackFX_GetCount /
// TrackFX_GetFXName / TrackFX_GetFXGUID / TrackFX_GetEnabled in chain order.
std::string fxChainIdentityForTrack(MediaTrack* tr);
// The in-scope FX-chain identity for Item scope: enumerates each item's active
// take FX chain via TakeFX_GetCount / TakeFX_GetFXName / TakeFX_GetFXGUID /
// TakeFX_GetEnabled, in item order then FX order, combined with
// combineChainIdentities so distinct per-item partitions never collide. Returns
// the combined identity string (empty combined identity for a no-FX or no-item
// set). The items vector is the same source-item set the shell collected for the
// item-scope capture (selected items whose owning tracks were also collected).
std::string fxChainIdentityForItems(const std::vector<MediaItem*>& items);
// Reads the media-file path of every SELECTED media item's active take source
// (GetMediaItemTake_Source -> GetMediaSourceFileName), normalized to forward-slash.
// Unresolvable items (no take / no source / empty name) are omitted — never an