Merge lp://qastaging/~mixxxdevelopers/mixxx/features_hydra into lp://qastaging/~mixxxdevelopers/mixxx/trunk

Proposed by RJ Skerry-Ryan
Status: Merged
Merged at revision: 2721
Proposed branch: lp://qastaging/~mixxxdevelopers/mixxx/features_hydra
Merge into: lp://qastaging/~mixxxdevelopers/mixxx/trunk
Diff against target: 923 lines (+456/-204)
9 files modified
mixxx/build/depends.py (+0/-1)
mixxx/src/engine/enginechannel.cpp (+0/-11)
mixxx/src/engine/enginechannel.h (+0/-3)
mixxx/src/engine/enginemaster.cpp (+210/-98)
mixxx/src/engine/enginemaster.h (+57/-9)
mixxx/src/engine/enginevolume.cpp (+0/-42)
mixxx/src/engine/enginevolume.h (+0/-36)
mixxx/src/sampleutil.cpp (+149/-0)
mixxx/src/sampleutil.h (+40/-4)
To merge this branch: bzr merge lp://qastaging/~mixxxdevelopers/mixxx/features_hydra
Reviewer Review Type Date Requested Status
Albert Santoni Approve
Review via email: mp+55693@code.qastaging.launchpad.net

Description of the change

Threw together some quick engine changes, but I'd like a review on them because they're substantial:

* Delete EngineVolume -- it was a trivial wrapper around a ControlLogpotmeter

* Make per-channel volume a gain factor when mixing the master output. This eliminates some hackyness w/ EngineChannel::isPFL that has been bugging me and saves 1 pass over every channel buffer.

* Eliminate use of QList in EngineMaster::process(). I noticed from gprof and some of Jus's traces that time spent in the QList in EngineMaster::process was higher than I had expected. Furthermore, allocating a QList on the stack malloc's every callback. It's not desirable if we can get around it. I removed that in favor of a bitvector approach, and I made way for some hard-coding of the mixing of higher #s of decks, because Mixxx will by default come with 6 or 7 EngineChannels turned on in 1.10.0, this is going to be more important than before.

To post a comment you must log in.
Revision history for this message
RJ Skerry-Ryan (rryan) wrote :

BTW, the EngineMaster tests still pass, so I'm pretty confident this is fine for our uses. Something should be done about the 16-deck limit. With an int64, we could support 64-decks. We could also use two to get 128, but those aren't realistic cases for Mixxx right now so I didn't bother.

2721. By RJ Skerry-Ryan

More improvements to EngineMaster. Headphone mixing now goes through the fast-path of mixing channels instead of being added one by one (this has the added benefit of unifying the mixing code used for both the master and headphone channels). Added special-casing for the mixing of up to 7 channels. Folded the master volume into the master mixing step so we save a pass over the buffer there.

Revision history for this message
RJ Skerry-Ryan (rryan) wrote :

Many more improvements now. I think this tightens up the EngineMaster code quite a bit. Headphone and master mixing are both done through the same codepath now. I also shaved another pass off by folding the master volume into the master mixing step. Headphone mixing is now faster because it uses the hard-coded mixing steps instead of the N-pass adding.

2722. By RJ Skerry-Ryan

Forgot a return value, and for some braindead reason GCC compiled it.

Revision history for this message
Albert Santoni (gamegod) wrote :

I checked the coefficients and looked over the code, didn't see anything that looks out of place. Though we haven't measured the performance gains, this is definitely a step in the right direction.

Thanks RJ!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
The diff is not available at this time. You can reload the page or download it.