Fix cross-rate Preserve splices, re-stamp on host-rate change, name the rate refusal

The splice crossfade now counts output frames and stops before the ring's far end (this also fixes a lap at matched rate). The search strides by the rate ratio. The editor takes its time base from its own decode. Same-rate output is pinned to hashes from before the change.
This commit is contained in:
2026-09-25 14:17:11 -04:00
parent ec60cf78c6
commit 64f314a6a4
24 changed files with 592 additions and 183 deletions
+7
View File
@@ -953,6 +953,13 @@ static void testBuildSampleDataRefusesARateNoCaptureCouldHave() {
CHECK(!corrupt.playable());
// Far BELOW the host costs nothing per frame, so it plays.
CHECK(buildSampleData(rc, DecodedPcm{{0.1f}, 1000, {}}, host).playable());
// The shell tells the user WHY through the predicate the build applies, so the message and
// the silence share one boundary.
CHECK(sourceRateSupported(atCeiling, host));
CHECK(!sourceRateSupported(atCeiling + 1, host));
// No host rate reported yet: the file plays at its own rate, whatever that is.
CHECK(sourceRateSupported(atCeiling + 1, 0));
CHECK(buildSampleData(rc, DecodedPcm{{0.1f}, atCeiling + 1, {}}, 0).playable());
}
static void testBuildSampleDataCarriesTheSecondChannel() {