Skip to content

Integrate feature set and harden Bungee audio - #23

Open
0cwa wants to merge 163 commits into
mixxx/mainfrom
pr/combined-pr14-features
Open

Integrate feature set and harden Bungee audio#23
0cwa wants to merge 163 commits into
mixxx/mainfrom
pr/combined-pr14-features

Conversation

@0cwa

@0cwa 0cwa commented Aug 19, 2026

Copy link
Copy Markdown
Owner

Summary

This PR integrates the selected feature work from 0cwa/mixxx#14 on top of the PR20 head:

  • memory-cue creation, navigation, editing, waveform marks, controller mappings, and Rekordbox import;
  • the narrow Rekordbox USB key-sorting/schema fix, while preserving PR20's existing import guards;
  • waveform downbeat and 16-beat markers with the related beat-grid and LateNight skin updates;
  • a Bungee low-latency audio-cutout fix that preserves the ReadAhead cursor and loop/jump transaction across asynchronous cache misses;
  • atomic retry staging and safe Bungee reset/flush handling;
  • CMake BUNGEE defaulting to ON, so CI/CD configurations without an explicit override build Bungee.

The branch is based on PR20 commit 045eecd2bf354c9b9be7a21a93854f96ed1c83cb and integrates the feature commits selectively because PR14's current head conflicts with PR20.

Local validation

  • Native mixxx-build target build: cmake --build build --target mixxx-test --parallel 2 — passed.
  • Focused native feature coverage: BeatsTest.*:EngineSyncTest.* — 95 tests passed (one disabled).
  • Flatpak Builder packaging in mixxx-build with the Mixxx Flatpak manifest and Qt 6.10/Bungee — all 1,137 build targets compiled and the application exported successfully.
  • Bungee-enabled mixxx-test build with ccache disabled — passed.
  • Focused Bungee/ReadAhead/CachingReader run — 38/38 tests passed, including retry transaction and seek-cancellation regressions.
  • git diff --check — passed.

Known validation blocker

The full Flatpak CTest phase previously ran 1,260 enabled tests: 1,258 passed and two segfaulted in existing replay-gain/controller-screen tests:

  • ControllerScriptEngineLegacyTest.screenWillSentRawDataIfConfigured
  • AdjustReplayGainTest.AdjustReplayGainUpdatesPregain

The controller-screen test passes when isolated. The replay-gain test reproduces locally in the mixxx-build container, and A/B probing shows that registering an additional EngineControl exposes the failure; no safe root-cause fix was established. This remains a pre-existing validation issue for the broader feature branch.

Pre-existing local AGENTS.md changes and src/test/echoreverbchain_test.cpp were deliberately excluded.

acolombier and others added 30 commits January 25, 2026 21:32
Add the Bungee scaler implementation and wire it into Mixxx's keylock engine path without carrying vendored Bungee source.
Add regression coverage for Bungee keylock scaler selection and buffer-window accounting behavior.
Resolve Bungee through package, vcpkg, or module discovery and normalize every provider to the Bungee::Bungee target.
Add the pinned ExternalProject fallback and permanent Bungee/pffft patch homes so non-vcpkg builds do not depend on the temporary overlay.
Default Bungee on, seed preference defaults, and keep Dual-threaded Stereo UI state consistent with the selected keylock engine.
Document the cleanup point in the clean stack: this branch was built without tracking lib/bungee source, and dependency paths now resolve through package, vcpkg, module, or source-fetch providers.
Add Flatpak Eigen3, pffft, and Bungee modules before Mixxx and point Bungee patches at the permanent cmake/patches/bungee home.
Add the Bungee ASan workflow, dependency path filters, sanitizer source-fetch environment, and build workflow coverage.
Document Bungee build modes, dependency fallback prerequisites, Flatpak/CI notes, and the runtime invariants maintainers need for validation.
@0cwa

0cwa commented Aug 26, 2026

Copy link
Copy Markdown
Owner Author

CodeRabbit disposition audit at PR23 head c93db5c0; the confirmed fixes are included in PR31 head 842644d.

Confirmed fixed in PR31: 3217, 3223, 3253, 3277.

All other reviewed non-outdated roots are stale or intentional:

  • Stale — build/tooling, vendored/offline dependency behavior, and CI checks: 3181, 3190, 3195, 3200, 3201, 3204.
  • Stale — translation/theme labeling and compile guards: 3209, 3210.
  • Stale — audio recovery, guards/lifetime, and reconfiguration paths: 3214, 3230, 3234, 3235, 3240, 3248.
  • Stale — state/history/cue and model verification: 3251, 3258, 3260, 3261, 3266, 3267, 3270, 3271, 3273, 3274, 3276.
  • Intentional — feature gating/build policy: 3198; invalid-state and retry semantics: 3212, 3237; negative visual/preroll positions required by engine semantics: 3245; platform temporary-path behavior: 3269.

0cwa added 16 commits August 29, 2026 21:18
Give synthesized memory-cue waveform marks the identity used by the until-next renderer so they participate in countdown selection. Cover the synthesized mark with a deterministic regression test.
Integrate the QML compatibility and migration-preservation follow-ups from the selector source worktree.
Integrate independent hot-cue, memory-cue, intro, and outro countdown settings and marker eligibility corrections.
Provide the shared indicator controls required by the player and effect setup while preserving the existing interface test sequence.
Use the production Qt Quick Controls style in the fixture so the test does not depend on platform-native indicator creation. Materialize QObject child lists before iterating to avoid Clazy range-loop detachment warnings.
0cwa pushed a commit that referenced this pull request Aug 31, 2026
0cwa added 7 commits August 31, 2026 11:54
Fall back to the public QML key property when the imported control type cannot be recovered by C++ RTTI. This keeps the zoom reclamping test deterministic across Qt runtimes.
Read the existing WaveformDisplay object alias from the created test object instead of declaring an alias to a nested component alias. Older Qt rejects that fixture alias before the waveform display can load.
Find the QML ControlProxy by its stable key in the test object tree so the Qt 6.4 fixture does not depend on a nested property alias.
Use the actual ControlProxy object name so the test does not depend on recursive key lookup across Qt versions.
Load the skin waveform wrapper explicitly and expose its nested control proxy through a typed QML property so the Qt 6.4 test can inspect the real control.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants