Skip to content

Migrate to qjs engine#4

Closed
ferranlala wants to merge 7 commits intomasterfrom
migrate-to-QJSEngine
Closed

Migrate to qjs engine#4
ferranlala wants to merge 7 commits intomasterfrom
migrate-to-QJSEngine

Conversation

@ferranlala
Copy link
Copy Markdown
Owner

I use this PR to review my work on this branch and write notes for the final PR to mixxx.


for (const QString& prefixName : scriptFunctionPrefixes) {
QScriptValue prefix = global.property(prefixName);
if (!prefix.isValid() || !prefix.isObject()) {
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

QScriptValue returns an invalid value if property don't exist. QJSValue returns undefined, thus we can just check isObject().

@ferranlala ferranlala force-pushed the migrate-to-QJSEngine branch from c537786 to 84288c7 Compare August 1, 2018 19:02
@ferranlala ferranlala force-pushed the migrate-to-QJSEngine branch 2 times, most recently from a0339e3 to 19e5f43 Compare August 18, 2018 23:30
@ferranlala ferranlala force-pushed the migrate-to-QJSEngine branch from 63af8d7 to f5028f6 Compare August 30, 2018 09:01
Don't bind "this" in beginTimer and makeConnection callbacks

Adapt ControllerEngine::checkException for QJSEngine

Rename checkException to handleEvaluationException
Since QJSEngine takes ownership of exposed QObjects it tried to delete
controller and controllerengine when QJSEngine was destroyed (i.e script reload
and mixxx shutdown). See https://bugreports.qt.io/browse/QTBUG-41171

This also has the benefit that we have a tighter control on what's exposed.
Since Signals and slots, properties and children of object are available
as properties of the created QJSValue, lots of undesired things were leaked
into the JS engine.
@ferranlala ferranlala force-pushed the migrate-to-QJSEngine branch from f5028f6 to db7005c Compare August 30, 2018 09:54
@ferranlala ferranlala closed this Aug 30, 2018
ferranlala pushed a commit that referenced this pull request Apr 22, 2020
…coreaudio

CoreAudio MP3 offsets for Serato cues
ferranlala pushed a commit that referenced this pull request Apr 24, 2021
ferranlala pushed a commit that referenced this pull request Apr 24, 2021
ferranlala pushed a commit that referenced this pull request May 7, 2022
…h sync

When loading a track that is not yet present in the library (and thus
doesn't have any BPM because it hasn't been analyzed yet) while another
deck is playing and both decks have sync enabled, a debug assertion is
triggered:

    DEBUG ASSERT: "isValid()" in function double mixxx::Bpm::value() const at src/track/bpm.h:53
    Aborted (core dumped)

The backtrace looks as follows:

    #0  0x00007f175c87234c in __pthread_kill_implementation () at /usr/lib/libc.so.6
    #1  0x00007f175c8254b8 in raise () at /usr/lib/libc.so.6
    #2  0x00007f175c80f534 in abort () at /usr/lib/libc.so.6
    #3  0x00007f175cf05ee4 in qt_assert(char const*, char const*, int) () at /usr/lib/libQt5Core.so.5
    #4  0x000055deb2e67e1c in mixxx::(anonymous namespace)::handleMessage(QtMsgType, QMessageLogContext const&, QString const&) (type=<optimized out>, context=<optimized out>, input=<optimized out>) at src/util/logging.cpp:355
    #5  0x00007f175cf47128 in  () at /usr/lib/libQt5Core.so.5
    #6  0x00007f175cf3fd8a in  () at /usr/lib/libQt5Core.so.5
    #7  0x00007f175cf06526 in QMessageLogger::critical(char const*, ...) const () at /usr/lib/libQt5Core.so.5
    #8  0x000055deb2e5c720 in mixxx_debug_assert(char const*, char const*, int, char const*) (assertion=assertion@entry=0x55deb39bd0db "isValid()", file=file@entry=0x55deb39bbf30 "src/track/bpm.h", line=line@entry=53, function=function@entry=0x55deb39bbf08 "double mixxx::Bpm::value() const") at gsrc/util/assert.h:9
    #9  0x000055deb2ee7e7e in mixxx_debug_assert_return_true(char const*, char const*, int, char const*) (function=0x55deb39bbf08 "double mixxx::Bpm::value() const", line=53, file=0x55deb39bbf30 "src/track/bpm.h", assertion=0x55deb39bd0db "isValid()") at gsrc/util/assert.h:18
    #10 mixxx::Bpm::value() const (this=<synthetic pointer>) at src/track/bpm.h:53
    #11 mixxx::operator*(mixxx::Bpm, double) (multiple=1, bpm=...) at src/track/bpm.h:160
    #12 SyncControl::setLocalBpm(mixxx::Bpm) (this=<optimized out>, localBpm=...) at src/engine/sync/synccontrol.cpp:567
    #13 0x000055deb34c7ba3 in EngineBuffer::postProcess(int) (this=0x55deb56eb060, iBufferSize=2048) at src/engine/enginebuffer.cpp:1318
    #14 0x000055deb3139023 in EngineMaster::processChannels(int) (this=0x55deb5449440, iBufferSize=<optimized out>) at src/engine/enginemaster.cpp:383
    #15 0x000055deb31394f7 in EngineMaster::process(int) (this=0x55deb5449440, iBufferSize=iBufferSize@entry=2048) at src/engine/enginemaster.cpp:410
    #16 0x000055deb2f91d0b in SoundManager::onDeviceOutputCallback(long) (this=<optimized out>, iFramesPerBuffer=iFramesPerBuffer@entry=1024) at src/soundio/soundmanager.cpp:596
    #17 0x000055deb32dd794 in SoundDevicePortAudio::callbackProcessClkRef(long, float*, float const*, PaStreamCallbackTimeInfo const*, unsigned long) (this=0x55deb553e6b0, framesPerBuffer=1024, out=<optimized out>, in=<optimized out>, timeInfo=<optimized out>, statusFlags=<optimized out>) at src/soundio/sounddeviceportaudio.cpp:965

This happens because `newLocalBpm` is invalid when `localBpm` is
invalid. Trying to do sync decks while no tempo information is available
does not make sense, so we only synchronize decks if the local BPM is
available.
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.

1 participant