summaryrefslogtreecommitdiffstats
path: root/src/effects/effectchain.h
AgeCommit message (Collapse)Author
2020-07-31Rename handle_group to handleGroup globallyxerus2000
2018-05-31rename effect chain "insertion type" to "mix mode"Be
2018-05-01Merge remote-tracking branch 'upstream/master' into lv2_support2Daniel Schürmann
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
2018-01-04decouple EffectStatesMapArray from EffectChainbe_
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
2017-12-21fix compilation warning about deleting forward declared EffectStatebe_
... 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.
2017-12-16move ownership of EffectStatesMaps and EffectStatesMapArrays to EffectChainbe_
2017-12-16miscellaneous code cleanupbe_
2017-12-15clarify function namesbe_
2017-04-26Refresh loaded effects if Parameter/Slot asignement has changed in LV2 prefsDaniel Schürmann
2017-01-19save/load effect parameter state to XML on shutdown/startupbe_
2017-01-12reload only effect being updated instead of each effect in chainbe_
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
2015-12-27Rename src/util.h to src/util/class.h.RJ Ryan
2015-02-24Naming refactors.RJ Ryan
* 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.
2015-02-24Refactor use of strings in the engine. 10-20% callback speed improvement.RJ Ryan
* 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%
2014-11-13Revert "user plain pointers for Effect, this fixes a segfault due to double ↵Daniel Schürmann
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
2014-11-12renamed signal form effectAdded() to effectsChanged()Daniel Schürmann
2014-11-11Introduced EffectChain::removeEffect()Daniel Schürmann
2014-11-10delete replaced effect, delete effects in EffectChain::~EffectChain() and ↵Daniel Schürmann
removed unused EffectChain::removeEffect()
2014-11-09removed unused function EffectChain::getEffect()Daniel Schürmann
2014-11-09renamed effectNumber to effectSlotNumberDaniel Schürmann
2014-11-09user plein pointers for Effect, this fixes a segfault due to double delete ↵Daniel Schürmann
when using more than one EffectRack
2014-03-28Re-factor effect parameter linking so that value interpolation is done by ↵RJ Ryan
ControlEffectKnob.
2014-03-22Add 'enabled' state to Effects and an 'enabled' control to EffectSlot to ↵RJ Ryan
control this state.
2014-03-22Remove chains and effects by index instead of pointer.RJ Ryan
2014-03-21Add EffectChain::replaceEffect for swapping one effect for another.RJ Ryan
2014-03-16Make Effect responsible for adding itself to a chain in the engine.RJ Ryan
2014-03-16Add in-order processing of effect chains in their racks.RJ Ryan
This introduces the concept of racks into the engine.
2014-03-16Introduce the concept of EffectChain prototypes.RJ Ryan
When loading a chain into a chain slot, the chain is cloned. This allows loading the same chain into multiple effect units at once.
2014-02-19Basic EffectChainSlot tests that exercise the control interface.RJ Ryan
2014-02-19Allow controlling of EffectChain insertion type via chain slot control API.RJ Ryan
2014-01-18Add description to EffectChain.RJ Ryan
2014-01-12Make EffectChain emit its update signals when it is changed.RJ Ryan
2013-12-17Add quick and dirty EffectChain / Effect / EffectParameter XML ↵RJ Ryan
serialization/de-serialization support.
2013-12-01Fix goofy initialization order requirements for EffectChains by making them ↵RJ Ryan
send all their existing state right after being added to the engine.
2013-12-01Add InsertionType property to EffectChain for insert vs. send effects. Send ↵RJ Ryan
the property to EngineEffectChain via the SetEffectChainParameters EffectRequest.
2013-11-30Listen for updates to EffectChain properties in EffectChainSlot. ↵RJ Ryan
valueChanged/valueChangedFromEngine split prevents circularity here.
2013-11-30Send updates when EffectChain parameters change.RJ Ryan
2013-11-30Escape mutex hell. Remove mutexes from the Effect*Slot.RJ Ryan
2013-11-30Add mix accessor/setter in EffectChain.RJ Ryan
2013-11-30Add enabled/enabledForGroup tracking to EffectChain.RJ Ryan
2013-11-30Write EffectChain updates to the EngineEffectsManager.RJ Ryan
2013-11-30Make id required for creating an EffectChain. Add an EngineEffectChain ↵RJ Ryan
instance to all EffectChains.
2013-11-24Comment run. Remove locking from places that won't need it anymore.RJ Ryan
2013-06-19Merge branch 'master' into features_effectsRJ Ryan
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