Age | Commit message (Collapse) | Author |
|
|
|
|
|
Conflicts:
.travis.yml
src/effects/effect.cpp
src/effects/effect.h
src/effects/effectchainmanager.h
src/effects/effectinstantiator.h
src/effects/effectmanifest.h
src/effects/effectrack.cpp
src/effects/native/autopaneffect.cpp
src/effects/native/balanceeffect.cpp
src/effects/native/biquadfullkilleqeffect.h
src/effects/native/bitcrushereffect.cpp
src/effects/native/echoeffect.cpp
src/effects/native/echoeffect.h
src/effects/native/filtereffect.cpp
src/effects/native/flangereffect.cpp
src/effects/native/loudnesscontoureffect.cpp
src/effects/native/phasereffect.cpp
src/effects/native/reverbeffect.cpp
src/effects/native/threebandbiquadeqeffect.h
src/engine/effects/engineeffect.cpp
src/engine/effects/engineeffect.h
src/mixxx.cpp
src/preferences/dialog/dlgpreferences.cpp
src/preferences/dialog/dlgpreferences.h
src/test/metaknob_link_test.cpp
src/test/nativeeffects_test.cpp
|
|
This fixes a crash deleting EffectStates after starting up with an
effect unit assigned to multiple input channels.
EffectChain::enableForInputChannel kept reusing the same array for
EffectStates and putting a pointer to this on the effects MessagePipe.
That assumed that the engine had a chance to process the message to load
the states by calling EffectProcessorImpl::loadStatesForInputChannel
before the next call to EffectChain::enableForInputChannel. On startup,
before the engine starts, this assumption is not true. The result was
that EffectProcessorImpl ended up storing pointers to the same
EffectStates for multiple input channels. This caused a crash when
~EffectProcessorImpl tried to delete the EffectStates for the second
input channel because the EffectState had already been deleted when
deleting the EffectStates for the first input channel.
Fixes https://bugs.launchpad.net/mixxx/+bug/1740531
|
|
... in src/effects/effectchain.cpp
EffectChain::InsertionType had to be moved to src/effects/defs.h to
avoid circular #includes. Made it an enum class while I was at it.
|
|
|
|
|
|
|
|
|
|
|
|
Before, metaknob linkings of every effect in a chain would be reset to
default when loading a different effect to any position in the chain.
Also, the parameter name labels of effects that were not being replaced
would flicker on screen.
fixes
https://bugs.launchpad.net/mixxx/+bug/1655523
|
|
|
|
* Update GroupEffectProcessor, native effects and related code to
refer to channels instead of groups.
* Change most ChannelHandleAndGroup variables to be named handle_group
to hint that it's a pair-like object.
|
|
* Add ChannelHandle, a wrapper class for an integer handle that starts
at 0 and increments.
* Add ChannelHandleFactory for assigning integer handles to group
strings.
* Add ChannelHandleMap, an associative container mapping ChannelHandle
to a template data type T. Backed by a QVarLengthArray with a
pre-allocation of 256. Supports fast O(1) lookups (simple memory
indexing) and amortized O(1) inserts.
* Re-factor engine and effects code to use ChannelHandle.
* Update EffectProcessor to use ChannelHandleMap instead of QHash.
* Update EngineEffectChain to use ChannelHandleMap instead of QLinkedList.
I did two tests -- one with effects inactive and one with effects
active. I measured total-callback processing time improvements of 20%
(1 track, no effects) and 13% (2 tracks, effects enabled). From this I
conclude that the QHash and QLinkedList introduced tons of wasted
cycles (which agrees with my profiling results from a month or two
ago).
Test 1:
* No effects active
* optimize=portable
* single track playing for 1 minute
* began sampling 20 seconds in to get rid of the load-track jitters
Base:
Debug [Main]: Stat("SoundDevicePortAudio::callbackProcess prepare 1, Built-in Output","count=45014,sum=3.82151e+09ns,average=84896ns,min=26393ns,max=429257ns,variance=9.41766e+08ns^2,stddev=30688.2ns")
Experiment:
Debug [Main]: Stat("SoundDevicePortAudio::callbackProcess prepare 1, Built-in Output","count=44856,sum=3.02069e+09ns,average=67342ns,min=20400ns,max=323169ns,variance=5.93287e+08ns^2,stddev=24357.5ns")
Results:
Minimum: reduced by 22.7%
Maximum: reduced by 24.7%
Average: reduced by 20.7%
StdDev: reduced by 20.6%
Test 2:
* One effect active on [Master].
* One effect active on [Channel1]
* optimize=portable
* two tracks playing for 1 minute
* began sampling 20 seconds in to get rid of the load-track jitters
Base:
Debug [Main]: Stat("SoundDevicePortAudio::callbackProcess prepare 1, Built-in Output","count=44937,sum=4.76277e+09ns,average=105988ns,min=38434ns,max=326061ns,variance=1.49815e+09ns^2,stddev=38706ns")
Experiment:
Debug [Main]: Stat("SoundDevicePortAudio::callbackProcess prepare 1, Built-in Output","count=45191,sum=4.15799e+09ns,average=92009.3ns,min=31693ns,max=333664ns,variance=1.11131e+09ns^2,stddev=33336.3ns")
Results:
Minimum: reduced by 17.5%
Maximum: increase by 0.02%
Average: reduced by 13.2%
StdDev: reduced by 13.9%
|
|
delete when using more than one EffectRack"
This reverts commit 2454bb037ceb79726a983ff4b57345beae53f8f5.
Conflicts:
src/effects/effect.cpp
src/effects/effectchain.cpp
src/effects/effectchain.h
src/effects/effectchainslot.cpp
src/effects/effectchainslot.h
src/effects/effectparameter.cpp
src/effects/effectsbackend.cpp
src/effects/effectsbackend.h
src/effects/effectslot.cpp
src/effects/effectslot.h
|
|
|
|
|
|
removed unused EffectChain::removeEffect()
|
|
|
|
|
|
when using more than one EffectRack
|
|
ControlEffectKnob.
|
|
control this state.
|
|
|
|
|
|
|
|
This introduces the concept of racks into the engine.
|
|
When loading a chain into a chain slot, the chain is cloned. This allows loading
the same chain into multiple effect units at once.
|
|
|
|
|
|
|
|
|
|
serialization/de-serialization support.
|
|
send all their existing state right after being added to the engine.
|
|
the property to EngineEffectChain via the SetEffectChainParameters EffectRequest.
|
|
valueChanged/valueChangedFromEngine split prevents circularity here.
|
|
|
|
|
|
|
|
|
|
|
|
instance to all EffectChains.
|
|
|
|
Conflicts:
res/skins/Outline1024x600-Netbook/keylock-off-Ch1.png
res/skins/Outline1024x600-Netbook/keylock-off-Ch2.png
res/skins/Outline1024x600-Netbook/keylock-on-Ch1.png
res/skins/Outline1024x600-Netbook/keylock-on-Ch2.png
|