Merge pull request #4283 from birarda/master

fix for ASI playSound called from same thread
This commit is contained in:
Clément Brisset 2015-02-16 09:12:59 -08:00
commit 84bd1aeedf
3 changed files with 22 additions and 25 deletions

View file

@ -31,18 +31,15 @@ AudioScriptingInterface::AudioScriptingInterface() :
}
ScriptAudioInjector* AudioScriptingInterface::playSound(Sound* sound, const AudioInjectorOptions& injectorOptions) {
AudioInjector* injector = NULL;
QMetaObject::invokeMethod(this, "invokedPlaySound", Qt::BlockingQueuedConnection,
Q_RETURN_ARG(AudioInjector*, injector),
if (QThread::currentThread() != thread()) {
ScriptAudioInjector* injector = NULL;
QMetaObject::invokeMethod(this, "playSound", Qt::BlockingQueuedConnection,
Q_RETURN_ARG(ScriptAudioInjector*, injector),
Q_ARG(Sound*, sound), Q_ARG(const AudioInjectorOptions&, injectorOptions));
if (injector) {
return new ScriptAudioInjector(injector);
} else {
return NULL;
}
return injector;
}
AudioInjector* AudioScriptingInterface::invokedPlaySound(Sound* sound, const AudioInjectorOptions& injectorOptions) {
if (sound) {
// stereo option isn't set from script, this comes from sound metadata or filename
AudioInjectorOptions optionsCopy = injectorOptions;
@ -65,7 +62,7 @@ AudioInjector* AudioScriptingInterface::invokedPlaySound(Sound* sound, const Aud
injectorThread->start();
return injector;
return new ScriptAudioInjector(injector);
} else {
qDebug() << "AudioScriptingInterface::playSound called with null Sound object.";

View file

@ -33,9 +33,6 @@ signals:
void mutedByMixer();
void environmentMuted();
private slots:
AudioInjector* invokedPlaySound(Sound* sound, const AudioInjectorOptions& injectorOptions);
private:
AudioScriptingInterface();
AbstractAudioInterface* _localAudioInterface;

View file

@ -13,7 +13,9 @@
QScriptValue injectorToScriptValue(QScriptEngine* engine, ScriptAudioInjector* const& in) {
// when the script goes down we want to cleanup the injector
QObject::connect(engine, &QScriptEngine::destroyed, in, &ScriptAudioInjector::stopInjectorImmediately);
QObject::connect(engine, &QScriptEngine::destroyed, in, &ScriptAudioInjector::stopInjectorImmediately,
Qt::DirectConnection);
return engine->newQObject(in, QScriptEngine::ScriptOwnership);
}
@ -36,5 +38,6 @@ ScriptAudioInjector::~ScriptAudioInjector() {
}
void ScriptAudioInjector::stopInjectorImmediately() {
qDebug() << "ScriptAudioInjector::stopInjectorImmediately called to stop audio injector immediately.";
_injector->stopAndDeleteLater();
}