Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove VAMP plugin support. #926

Merged
merged 47 commits into from
Dec 30, 2018
Merged

Remove VAMP plugin support. #926

merged 47 commits into from
Dec 30, 2018

Conversation

rryan
Copy link
Member

@rryan rryan commented Apr 17, 2016

  • Removes VAMP entirely.
  • Moves QM-DSP to lib/qm-dsp.
  • Introduces AnalyzerPlugin, a class that individual algorithms for extracting features can sub-class -- with implementations for Queen Mary beats/key detectors and SoundTouch.
  • AnalyzerBeats / AnalyzerKey use user preferences to decide which AnalyzerPlugin to use.
  • Totally removed manual ConfigKey use for beat / key detection preferences -- now using a wrapper class like @daschuer introduced for ReplayGain preferences.

windowing of buffers.

The Queen Mary detectors expect 50% overlapping windows of samples to be
fed to them. They also use double samples instead of float.
Uses the qm-dsp library to calculate the key mode of the track. This is
a re-write of the VAMP plugin so the parameters used are the same.
Uses SoundTouch and qm-dsp libraries to calculate BPM and do beat
tracking. Replicates the logic of our VAMP plugins so the parameters to
the algorithms are the same.
* Introduce BeatDetectionSettings helper class.
* Remove UserSettingsPointer direct usage from DlgPrefBeats,
  AnalyzerBeats, AnalysisFeature, and Upgrade.
* Delete beat_preferences.h.
* Introduce KeyDetectionSettings.
* Use KeyDetectionSettings in DlgPrefKey and AnalyzerKey.
* Delete key_preferences.h.
@daschuer
Copy link
Member

GitHub:
Sorry, we could not display the entire diff because it was too big.

build/depends.py Outdated
@@ -620,11 +672,13 @@ def sources(self, build):
"preferences/dialog/dlgprefsound.cpp",
"preferences/dialog/dlgprefsounditem.cpp",
"preferences/dialog/dlgprefwaveform.cpp",
'preferences/dialog/dlgprefbeats.cpp',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Singe quotes, here and in some other places below.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch -- done

@daschuer
Copy link
Member

Is it possible to rebase the external code changes out?
Something like a second PR with target rryan:remove-vamp that only contains your own code changes? This would allow us to continue to use GitHub for the review.

@rryan
Copy link
Member Author

rryan commented May 6, 2016

Is it possible to rebase the external code changes out?
Something like a second PR with target rryan:remove-vamp that only contains your own code changes? This would allow us to continue to use GitHub for the review.

The history is already a little complicated to do that. What about using:

git diff rryan/remove-vamp mixxxdj/master src

Or a graphical difftool? The changes to src/ are not that complicated.

@rryan
Copy link
Member Author

rryan commented May 6, 2016

The history is already a little complicated to do that.

Or maybe my git rebase skills are too weak :) I can't think of an easy way. Do you have one?

@ywwg
Copy link
Member

ywwg commented May 6, 2016

You could squash commits that are just basic removal, and squash the other commits that are changes. Github now supports easy viewing of individual commits inside one PR

@ywwg
Copy link
Member

ywwg commented May 6, 2016

(git rebase -i for fun editor-window fine-tuning of the squashing)

@rryan
Copy link
Member Author

rryan commented May 6, 2016

You could squash commits that are just basic removal, and squash the other commits that are changes. Github now supports easy viewing of individual commits inside one PR

Yea, but I don't see how that's different from the situation now (I have a few bulk removal commits and then some smaller ones). Changing the ordering is tricky because there are merge commits with mass removals in master intermingled so reordering goes to hell immediately with git rebase -i.

@rryan rryan closed this May 6, 2016
@rryan
Copy link
Member Author

rryan commented May 6, 2016

Ugh, I'm not good with the fast clicking today :).

@rryan rryan reopened this May 6, 2016
@rryan
Copy link
Member Author

rryan commented May 6, 2016

73bd4a5 is a hairy merge of Uwe's mass moves in master with my mass removals in 2147838.

@daschuer
Copy link
Member

Nothing else from the review: LGTM.
I have not tested it though.

@rryan
Copy link
Member Author

rryan commented Dec 30, 2018

Address sanitizer:

=================================================================
==5508==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6220001365e0 at pc 0x000110c77533 bp 0x70000c682c00 sp 0x70000c682bf8
READ of size 4 at 0x6220001365e0 thread T89
==5508==AddressSanitizer: while reporting a bug found another one. Ignoring.
    #0 0x110c77532 in soundtouch::PeakFinder::getPeakCenter(float const*, int) const PeakFinder.cpp:147
    #1 0x110c77a92 in soundtouch::PeakFinder::detectPeak(float const*, int, int) PeakFinder.cpp:236
    #2 0x110c6f224 in soundtouch::BPMDetect::getBpm() BPMDetect.cpp:536
    #3 0x10f8dfecc in mixxx::AnalyzerSoundTouchBeats::finalize() analyzersoundtouchbeats.cpp:45
    #4 0x10f8ab578 in AnalyzerBeats::finalize(std::__1::shared_ptr<Track>) analyzerbeats.cpp:201
    #5 0x10f8bd638 in AnalyzerThread::doRun() analyzerthread.cpp:168
    #6 0x110a30c21 in WorkerThread::run() workerthread.cpp:63
    #7 0x112250aad  (QtCore:x86_64+0x2daad)
    #8 0x7fff6d4d8660 in _pthread_body (libsystem_pthread.dylib:x86_64+0x3660)
    #9 0x7fff6d4d850c in _pthread_start (libsystem_pthread.dylib:x86_64+0x350c)
    #10 0x7fff6d4d7bf8 in thread_start (libsystem_pthread.dylib:x86_64+0x2bf8)

0x6220001365e0 is located 0 bytes to the right of 5344-byte region [0x622000135100,0x6220001365e0)
allocated by thread T89 here:
    #0 0x113c1d22b in wrap__Znam (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x6422b)
    #1 0x110c6ed17 in soundtouch::BPMDetect::getBpm() BPMDetect.cpp:531
    #2 0x10f8dfecc in mixxx::AnalyzerSoundTouchBeats::finalize() analyzersoundtouchbeats.cpp:45
    #3 0x10f8ab578 in AnalyzerBeats::finalize(std::__1::shared_ptr<Track>) analyzerbeats.cpp:201
    #4 0x10f8bd638 in AnalyzerThread::doRun() analyzerthread.cpp:168
    #5 0x110a30c21 in WorkerThread::run() workerthread.cpp:63
    #6 0x112250aad  (QtCore:x86_64+0x2daad)
    #7 0x7fff6d4d8660 in _pthread_body (libsystem_pthread.dylib:x86_64+0x3660)
    #8 0x7fff6d4d850c in _pthread_start (libsystem_pthread.dylib:x86_64+0x350c)
    #9 0x7fff6d4d7bf8 in thread_start (libsystem_pthread.dylib:x86_64+0x2bf8)

Thread T89 created by T0 here:
    #0 0x113c09676 in wrap_pthread_create (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x50676)
    #1 0x1122512c3 in QThread::start(QThread::Priority) (QtCore:x86_64+0x2e2c3)
    #2 0x10f8e119d in TrackAnalysisScheduler::TrackAnalysisScheduler(Library*, int, QSharedPointer<ConfigObject<ConfigValue> > const&, AnalyzerModeFlags) trackanalysisscheduler.cpp:83
    #3 0x10f8e016f in TrackAnalysisScheduler::createInstance(Library*, int, QSharedPointer<ConfigObject<ConfigValue> > const&, AnalyzerModeFlags) trackanalysisscheduler.cpp:58
    #4 0x10ff4ccdf in AnalysisFeature::analyzeTracks(QList<TrackId>) analysisfeature.cpp:133
    #5 0x1102d622e in AnalysisFeature::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_analysisfeature.cc:109
    #6 0x112430d4a in QMetaObject::activate(QObject*, int, int, void**) (QtCore:x86_64+0x20dd4a)
    #7 0x1102e1140 in DlgAnalysis::analyzeTracks(QList<TrackId>) moc_dlganalysis.cc:275
    #8 0x1101f54c9 in DlgAnalysis::analyze() dlganalysis.cpp:141
    #9 0x1102dfd63 in DlgAnalysis::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_dlganalysis.cc:143
    #10 0x112430d4a in QMetaObject::activate(QObject*, int, int, void**) (QtCore:x86_64+0x20dd4a)
    #11 0x1132e549e  (QtWidgets:x86_64+0xfa49e)
    #12 0x1132e5336  (QtWidgets:x86_64+0xfa336)
    #13 0x1132e659e in QAbstractButton::mouseReleaseEvent(QMouseEvent*) (QtWidgets:x86_64+0xfb59e)
    #14 0x11323668e in QWidget::event(QEvent*) (QtWidgets:x86_64+0x4b68e)
    #15 0x1131fb6ac in QApplicationPrivate::notify_helper(QObject*, QEvent*) (QtWidgets:x86_64+0x106ac)
    #16 0x1131fe4ec in QApplication::notify(QObject*, QEvent*) (QtWidgets:x86_64+0x134ec)
    #17 0x1124001b7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (QtCore:x86_64+0x1dd1b7)
    #18 0x1131fc00f in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (QtWidgets:x86_64+0x1100f)
    #19 0x1132565a6  (QtWidgets:x86_64+0x6b5a6)
    #20 0x1132552a4  (QtWidgets:x86_64+0x6a2a4)
    #21 0x1131fb6ac in QApplicationPrivate::notify_helper(QObject*, QEvent*) (QtWidgets:x86_64+0x106ac)
    #22 0x1131fcafb in QApplication::notify(QObject*, QEvent*) (QtWidgets:x86_64+0x11afb)
    #23 0x1124001b7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (QtCore:x86_64+0x1dd1b7)
    #24 0x1127f6cc9 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (QtGui:x86_64+0x2ecc9)
    #25 0x1127deaca in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (QtGui:x86_64+0x16aca)
    #26 0x119db375d  (libqcocoa.dylib:x86_64+0x2b75d)
    #27 0x119db4020  (libqcocoa.dylib:x86_64+0x2c020)
    #28 0x7fff452bb8f0 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ (CoreFoundation:x86_64h+0xa38f0)
    #29 0x7fff4537530b in __CFRunLoopDoSource0 (CoreFoundation:x86_64h+0x15d30b)
    #30 0x7fff4529e34f in __CFRunLoopDoSources0 (CoreFoundation:x86_64h+0x8634f)
    #31 0x7fff4529d7cc in __CFRunLoopRun (CoreFoundation:x86_64h+0x857cc)
    #32 0x7fff4529d032 in CFRunLoopRunSpecific (CoreFoundation:x86_64h+0x85032)
    #33 0x7fff44587d95 in RunCurrentEventLoopInMode (HIToolbox:x86_64+0x2fd95)
    #34 0x7fff44587a0e in ReceiveNextEventCommon (HIToolbox:x86_64+0x2fa0e)
    #35 0x7fff44587883 in _BlockUntilNextEventMatchingListInModeWithFilter (HIToolbox:x86_64+0x2f883)
    #36 0x7fff42837a72 in _DPSNextEvent (AppKit:x86_64+0x41a72)
    #37 0x7fff42fcde33 in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (AppKit:x86_64+0x7d7e33)
    #38 0x7fff4282c884 in -[NSApplication run] (AppKit:x86_64+0x36884)
    #39 0x119db2e0c  (libqcocoa.dylib:x86_64+0x2ae0c)
    #40 0x1123fbd3d in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (QtCore:x86_64+0x1d8d3d)
    #41 0x1124008b0 in QCoreApplication::exec() (QtCore:x86_64+0x1dd8b0)
    #42 0x10f8350cc in main main.cpp:53
    #43 0x7fff6d1c0014 in start (libdyld.dylib:x86_64+0x1014)

SUMMARY: AddressSanitizer: heap-buffer-overflow PeakFinder.cpp:147 in soundtouch::PeakFinder::getPeakCenter(float const*, int) const
Shadow bytes around the buggy address:
  0x1c4400026c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400026c70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400026c80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400026c90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400026ca0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x1c4400026cb0: 00 00 00 00 00 00 00 00 00 00 00 00[fa]fa fa fa
  0x1c4400026cc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4400026cd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4400026ce0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4400026cf0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4400026d00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==5508==ABORTING

@Be-ing
Copy link
Contributor

Be-ing commented Dec 30, 2018

Build warning:

scons: warning: Ignoring missing SConscript 'lin64_build/vamp-plugins/SConscript'
File "/home/be/sw/mixxx/SConstruct", line 100, in <module>

I tried rm -rf lin64_build .sconf_temp .sconsign* and the error still appears.

@rryan
Copy link
Member Author

rryan commented Dec 30, 2018

Hm, happens in master after #1624. Batch analysis with SoundTouch. /cc: @uklotzde

=================================================================
==10350==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62200000bde0 at pc 0x0001559f73e3 bp 0x7000058ed7a0 sp 0x7000058ed798
READ of size 4 at 0x62200000bde0 thread T63
Warning [Engine]: underflowHappened code: 24
Warning [Engine]: underflowHappened code: 6
    #0 0x1559f73e2 in soundtouch::PeakFinder::getPeakCenter(float const*, int) const PeakFinder.cpp:147
    #1 0x1559f7942 in soundtouch::PeakFinder::detectPeak(float const*, int, int) PeakFinder.cpp:236
    #2 0x1559f42b4 in soundtouch::BPMDetect::getBpm() BPMDetect.cpp:536
    #3 0x1559daf17 in MixxxBpmDetection::getRemainingFeatures() MixxxBpmDetection.cpp:240
    #4 0x1458434ee in _VampPlugin::Vamp::PluginAdapterBase::Impl::getRemainingFeatures(_VampPlugin::Vamp::Plugin*) (libvamp-sdk.so:x86_64+0x34ee)
    #5 0x106da4fad in _VampHost::Vamp::PluginHostAdapter::getRemainingFeatures() (libvamp-hostsdk.so:x86_64+0x3fad)
    #6 0x106db645f in _VampHost::Vamp::HostExt::PluginWrapper::getRemainingFeatures() (libvamp-hostsdk.so:x86_64+0x1545f)
    #7 0x106db645f in _VampHost::Vamp::HostExt::PluginWrapper::getRemainingFeatures() (libvamp-hostsdk.so:x86_64+0x1545f)
    #8 0x102ae212d in mixxx::VampPluginAdapter::getRemainingFeatures() vamppluginadapter.cpp:266
    #9 0x102ad7bac in VampAnalyzer::End() vampanalyzer.cpp:220
    #10 0x102a98681 in AnalyzerBeats::finalize(std::__1::shared_ptr<Track>) analyzerbeats.cpp:199
    #11 0x102aad508 in AnalyzerThread::doRun() analyzerthread.cpp:178
    #12 0x103c36421 in WorkerThread::run() workerthread.cpp:63
    #13 0x10543faad  (QtCore:x86_64+0x2daad)
    #14 0x7fff6d4d8660 in _pthread_body (libsystem_pthread.dylib:x86_64+0x3660)
    #15 0x7fff6d4d850c in _pthread_start (libsystem_pthread.dylib:x86_64+0x350c)
    #16 0x7fff6d4d7bf8 in thread_start (libsystem_pthread.dylib:x86_64+0x2bf8)

0x62200000bde0 is located 0 bytes to the right of 5344-byte region [0x62200000a900,0x62200000bde0)
allocated by thread T63 here:
    #0 0x106e3a22b in wrap__Znam (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x6422b)
    #1 0x1559f3da7 in soundtouch::BPMDetect::getBpm() BPMDetect.cpp:531
    #2 0x1559daf17 in MixxxBpmDetection::getRemainingFeatures() MixxxBpmDetection.cpp:240
    #3 0x1458434ee in _VampPlugin::Vamp::PluginAdapterBase::Impl::getRemainingFeatures(_VampPlugin::Vamp::Plugin*) (libvamp-sdk.so:x86_64+0x34ee)
    #4 0x106da4fad in _VampHost::Vamp::PluginHostAdapter::getRemainingFeatures() (libvamp-hostsdk.so:x86_64+0x3fad)
    #5 0x106db645f in _VampHost::Vamp::HostExt::PluginWrapper::getRemainingFeatures() (libvamp-hostsdk.so:x86_64+0x1545f)
    #6 0x106db645f in _VampHost::Vamp::HostExt::PluginWrapper::getRemainingFeatures() (libvamp-hostsdk.so:x86_64+0x1545f)
    #7 0x102ae212d in mixxx::VampPluginAdapter::getRemainingFeatures() vamppluginadapter.cpp:266
    #8 0x102ad7bac in VampAnalyzer::End() vampanalyzer.cpp:220
    #9 0x102a98681 in AnalyzerBeats::finalize(std::__1::shared_ptr<Track>) analyzerbeats.cpp:199
    #10 0x102aad508 in AnalyzerThread::doRun() analyzerthread.cpp:178
    #11 0x103c36421 in WorkerThread::run() workerthread.cpp:63
    #12 0x10543faad  (QtCore:x86_64+0x2daad)
    #13 0x7fff6d4d8660 in _pthread_body (libsystem_pthread.dylib:x86_64+0x3660)
    #14 0x7fff6d4d850c in _pthread_start (libsystem_pthread.dylib:x86_64+0x350c)
    #15 0x7fff6d4d7bf8 in thread_start (libsystem_pthread.dylib:x86_64+0x2bf8)

Thread T63 created by T0 here:
    #0 0x106e26676 in wrap_pthread_create (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x50676)
    #1 0x1054402c3 in QThread::start(QThread::Priority) (QtCore:x86_64+0x2e2c3)
    #2 0x102ac650d in TrackAnalysisScheduler::TrackAnalysisScheduler(Library*, int, QSharedPointer<ConfigObject<ConfigValue> > const&, AnalyzerModeFlags) trackanalysisscheduler.cpp:83
    #3 0x102ac54df in TrackAnalysisScheduler::createInstance(Library*, int, QSharedPointer<ConfigObject<ConfigValue> > const&, AnalyzerModeFlags) trackanalysisscheduler.cpp:58
    #4 0x103144f7f in AnalysisFeature::analyzeTracks(QList<TrackId>) analysisfeature.cpp:133
    #5 0x1034ce4ce in AnalysisFeature::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_analysisfeature.cc:109
    #6 0x10561fd4a in QMetaObject::activate(QObject*, int, int, void**) (QtCore:x86_64+0x20dd4a)
    #7 0x1034d93e0 in DlgAnalysis::analyzeTracks(QList<TrackId>) moc_dlganalysis.cc:275
    #8 0x1033ed769 in DlgAnalysis::analyze() dlganalysis.cpp:141
    #9 0x1034d8003 in DlgAnalysis::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_dlganalysis.cc:143
    #10 0x10561fd4a in QMetaObject::activate(QObject*, int, int, void**) (QtCore:x86_64+0x20dd4a)
    #11 0x1064bd49e  (QtWidgets:x86_64+0xfa49e)
    #12 0x1064bd336  (QtWidgets:x86_64+0xfa336)
    #13 0x1064be59e in QAbstractButton::mouseReleaseEvent(QMouseEvent*) (QtWidgets:x86_64+0xfb59e)
    #14 0x10640e68e in QWidget::event(QEvent*) (QtWidgets:x86_64+0x4b68e)
    #15 0x1063d36ac in QApplicationPrivate::notify_helper(QObject*, QEvent*) (QtWidgets:x86_64+0x106ac)
    #16 0x1063d64ec in QApplication::notify(QObject*, QEvent*) (QtWidgets:x86_64+0x134ec)
    #17 0x1055ef1b7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (QtCore:x86_64+0x1dd1b7)
    #18 0x1063d400f in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (QtWidgets:x86_64+0x1100f)
    #19 0x10642e5a6  (QtWidgets:x86_64+0x6b5a6)
    #20 0x10642d2a4  (QtWidgets:x86_64+0x6a2a4)
    #21 0x1063d36ac in QApplicationPrivate::notify_helper(QObject*, QEvent*) (QtWidgets:x86_64+0x106ac)
    #22 0x1063d4afb in QApplication::notify(QObject*, QEvent*) (QtWidgets:x86_64+0x11afb)
    #23 0x1055ef1b7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (QtCore:x86_64+0x1dd1b7)
    #24 0x1059e4cc9 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (QtGui:x86_64+0x2ecc9)
    #25 0x1059ccaca in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (QtGui:x86_64+0x16aca)
    #26 0x10d0cf75d  (libqcocoa.dylib:x86_64+0x2b75d)
    #27 0x10d0d0020  (libqcocoa.dylib:x86_64+0x2c020)
    #28 0x7fff452bb8f0 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ (CoreFoundation:x86_64h+0xa38f0)
    #29 0x7fff4537530b in __CFRunLoopDoSource0 (CoreFoundation:x86_64h+0x15d30b)
    #30 0x7fff4529e34f in __CFRunLoopDoSources0 (CoreFoundation:x86_64h+0x8634f)
    #31 0x7fff4529d7cc in __CFRunLoopRun (CoreFoundation:x86_64h+0x857cc)
    #32 0x7fff4529d032 in CFRunLoopRunSpecific (CoreFoundation:x86_64h+0x85032)
    #33 0x7fff44587d95 in RunCurrentEventLoopInMode (HIToolbox:x86_64+0x2fd95)
    #34 0x7fff44587a0e in ReceiveNextEventCommon (HIToolbox:x86_64+0x2fa0e)
    #35 0x7fff44587883 in _BlockUntilNextEventMatchingListInModeWithFilter (HIToolbox:x86_64+0x2f883)
    #36 0x7fff42837a72 in _DPSNextEvent (AppKit:x86_64+0x41a72)
    #37 0x7fff42fcde33 in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (AppKit:x86_64+0x7d7e33)
    #38 0x7fff4282c884 in -[NSApplication run] (AppKit:x86_64+0x36884)
    #39 0x10d0cee0c  (libqcocoa.dylib:x86_64+0x2ae0c)
    #40 0x1055ead3d in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (QtCore:x86_64+0x1d8d3d)
    #41 0x1055ef8b0 in QCoreApplication::exec() (QtCore:x86_64+0x1dd8b0)
    #42 0x102a4522c in main main.cpp:53
    #43 0x7fff6d1c0014 in start (libdyld.dylib:x86_64+0x1014)

SUMMARY: AddressSanitizer: heap-buffer-overflow PeakFinder.cpp:147 in soundtouch::PeakFinder::getPeakCenter(float const*, int) const
Shadow bytes around the buggy address:
  0x1c4400001760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400001770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400001780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4400001790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c44000017a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x1c44000017b0: 00 00 00 00 00 00 00 00 00 00 00 00[fa]fa fa fa
  0x1c44000017c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c44000017d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c44000017e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c44000017f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4400001800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb

@Be-ing
Copy link
Contributor

Be-ing commented Dec 30, 2018

Remove VAMP dependency from Ubuntu AppVeyor dependency list.

@rryan
Copy link
Member Author

rryan commented Dec 30, 2018

Remove VAMP dependency from Ubuntu AppVeyor dependency list.

Oops, bad merge at some point.

@rryan
Copy link
Member Author

rryan commented Dec 30, 2018

Build warning:

scons: warning: Ignoring missing SConscript 'lin64_build/vamp-plugins/SConscript'
File "/home/be/sw/mixxx/SConstruct", line 100, in <module>

I tried rm -rf lin64_build .sconf_temp .sconsign* and the error still appears.

Hm, also a bad merge. Fixed.

@Be-ing
Copy link
Contributor

Be-ing commented Dec 30, 2018

Batch analysis goes fwoosh!! 🙌
screenshot from 2018-12-30 10-56-43

@Be-ing
Copy link
Contributor

Be-ing commented Dec 30, 2018

Analyzing 4026 tracks with a fresh settings directory on my quad core Intel Core i7 8550U went from ~7 hours with #1624 to ~1.5 hours with this branch! 🙌 LGTM, although I think it would be good if @uklotzde checked that the merge conflicts were resolved correctly before merging this to master.

@rryan
Copy link
Member Author

rryan commented Dec 30, 2018

although I think it would be good if @uklotzde checked that the merge conflicts were resolved correctly before merging this to master.

The conflicts were actually pretty minimal, we touched mostly disjoint sets of files -- the only place we conflicted was where we both fixed the same issue in src/library/analysisfeature.h and I just reverted my changes in favor of @uklotzde's.

@Be-ing
Copy link
Contributor

Be-ing commented Dec 30, 2018

Okay, I'll merge this now.

@Be-ing Be-ing merged commit 18e9314 into mixxxdj:master Dec 30, 2018
@Be-ing
Copy link
Contributor

Be-ing commented Dec 30, 2018

Ubuntu Jenkins build failed. I think it's related to this, but I'm not certain:

make[1]: Leaving directory '/build/mixxx-2.3.0~alpha~pre'
   dh_install
dh_install: Cannot find (any matches for) "usr/lib/mixxx" (tried in ., debian/tmp)

dh_install: mixxx missing files: usr/lib/mixxx
dh_install: missing files, aborting
debian/rules:34: recipe for target 'binary' failed
make: *** [binary] Error 25
dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2
I: copying local configuration
E: Failed autobuilding of package
I: unmounting dev/ptmx filesystem
I: unmounting dev/pts filesystem
I: unmounting dev/shm filesystem
I: unmounting proc filesystem
I: unmounting sys filesystem
I: cleaning the build env 
I: removing directory /var/cache/pbuilder/build//28332 and its subdirectories
* Build failed.

scons: *** [lin64_build/blah] Exception : Ubuntu package build failed.
Traceback (most recent call last):
  File "/usr/lib/scons/SCons/Action.py", line 1197, in execute
    result = self.execfunction(target=target, source=rsources, env=env)
  File "/home/mixxx/workspace/master-release/architecture/amd64/platform/ubuntu/SConscript", line 1129, in BuildUbuntuPackage
    raise Exception('Ubuntu package build failed.')
Exception: Ubuntu package build failed.
scons: building terminated because of errors.
OSError: [Errno 2] No such file or directory: '.sconsign.dblite':
  File "/usr/lib/scons/SCons/Script/Main.py", line 1376:
    _exec_main(parser, values)
  File "/usr/lib/scons/SCons/Script/Main.py", line 1339:
    _main(parser)
  File "/usr/lib/scons/SCons/Script/Main.py", line 1103:
    nodes = _build_targets(fs, options, targets, target_top)
  File "/usr/lib/scons/SCons/Script/Main.py", line 1313:
    jobs.run(postfunc = jobs_postfunc)
  File "/usr/lib/scons/SCons/Job.py", line 113:
    postfunc()
  File "/usr/lib/scons/SCons/Script/Main.py", line 1310:
    SCons.SConsign.write()
  File "/usr/lib/scons/SCons/SConsign.py", line 116:
    syncmethod()
  File "/usr/lib/scons/SCons/dblite.py", line 157:
    self._os_unlink(self._file_name)
Exception OSError: (2, 'No such file or directory', '.sconsign.dblite') in <bound method dblite.__del__ of <SCons.dblite.dblite object at 0x7fab0419ce10>> ignored
Build step 'Execute shell' marked build as failure
[WARNINGS] Skipping publisher since build result is FAILURE
Recording test results
ERROR: Step ?Publish JUnit test result report? failed: No test report files were found. Configuration error?
SSH: Current build result is [FAILURE], not going to run.
Finished: FAILURE

https://builds.renegadetech.mixxx.org/job/master-release/architecture=amd64,platform=ubuntu/732/console

@uklotzde
Copy link
Contributor

getRemainingFeatures()

I remember that we experienced crashes once in a while in getRemainingFeatures() when running the VAMP plugins in a multi-threaded scenario without additional synchronization!

@uklotzde
Copy link
Contributor

I also noticed that the legacy SoundTouch beat detector was selected as the default instead of VAMP QM after starting Mixxx with this PR merged.

@Be-ing
Copy link
Contributor

Be-ing commented Dec 31, 2018

I also noticed that the legacy SoundTouch beat detector was selected as the default instead of VAMP QM after starting Mixxx with this PR merged.

That was due to an incorrect merge conflict resolution and fixed in 260071e. I suggest doing a clean checkout of current master for testing.

Be-ing added a commit to Be-ing/mixxx that referenced this pull request Apr 21, 2020
I think this was a regression when removing VAMP plugins in
PR mixxxdj#926. The AllowBpmAboveRange setting is not exposed in the
preferences window and I never recall it being shown to the user,
nor anyone asking for it, so remove it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants