mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 08:43:47 +02:00
fix teardown of recording and ScriptEngine(s)
This commit is contained in:
parent
467fe56103
commit
a76b50ce33
2 changed files with 157 additions and 135 deletions
|
@ -96,7 +96,6 @@ Agent::Agent(ReceivedMessage& message) :
|
||||||
DependencyManager::set<recording::Recorder>();
|
DependencyManager::set<recording::Recorder>();
|
||||||
DependencyManager::set<recording::ClipCache>();
|
DependencyManager::set<recording::ClipCache>();
|
||||||
|
|
||||||
DependencyManager::set<ScriptCache>();
|
|
||||||
DependencyManager::set<RecordingScriptingInterface>();
|
DependencyManager::set<RecordingScriptingInterface>();
|
||||||
DependencyManager::set<UsersScriptingInterface>();
|
DependencyManager::set<UsersScriptingInterface>();
|
||||||
|
|
||||||
|
@ -177,6 +176,8 @@ void Agent::run() {
|
||||||
// Create ScriptEngines on threaded-assignment thread then move to main thread.
|
// Create ScriptEngines on threaded-assignment thread then move to main thread.
|
||||||
DependencyManager::set<ScriptEngines>(ScriptEngine::AGENT_SCRIPT)->moveToThread(qApp->thread());
|
DependencyManager::set<ScriptEngines>(ScriptEngine::AGENT_SCRIPT)->moveToThread(qApp->thread());
|
||||||
|
|
||||||
|
DependencyManager::set<ScriptCache>();
|
||||||
|
|
||||||
// make sure we request our script once the agent connects to the domain
|
// make sure we request our script once the agent connects to the domain
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
@ -360,6 +361,9 @@ void Agent::scriptRequestFinished() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Agent::executeScript() {
|
void Agent::executeScript() {
|
||||||
|
// the following block is scoped so that any shared pointers we take here
|
||||||
|
// are cleared before we call setFinished at the end of the function
|
||||||
|
{
|
||||||
_scriptEngine = scriptEngineFactory(ScriptEngine::AGENT_SCRIPT, _scriptContents, _payload);
|
_scriptEngine = scriptEngineFactory(ScriptEngine::AGENT_SCRIPT, _scriptContents, _payload);
|
||||||
|
|
||||||
// setup an Avatar for the script to use
|
// setup an Avatar for the script to use
|
||||||
|
@ -385,7 +389,7 @@ void Agent::executeScript() {
|
||||||
_scriptEngine->registerGlobalObject("Users", DependencyManager::get<UsersScriptingInterface>().data());
|
_scriptEngine->registerGlobalObject("Users", DependencyManager::get<UsersScriptingInterface>().data());
|
||||||
|
|
||||||
auto player = DependencyManager::get<recording::Deck>();
|
auto player = DependencyManager::get<recording::Deck>();
|
||||||
connect(player.data(), &recording::Deck::playbackStateChanged, [=] {
|
connect(player.data(), &recording::Deck::playbackStateChanged, [&player, &scriptedAvatar] {
|
||||||
if (player->isPlaying()) {
|
if (player->isPlaying()) {
|
||||||
auto recordingInterface = DependencyManager::get<RecordingScriptingInterface>();
|
auto recordingInterface = DependencyManager::get<RecordingScriptingInterface>();
|
||||||
if (recordingInterface->getPlayFromCurrentLocation()) {
|
if (recordingInterface->getPlayFromCurrentLocation()) {
|
||||||
|
@ -490,7 +494,7 @@ void Agent::executeScript() {
|
||||||
|
|
||||||
DependencyManager::set<AssignmentParentFinder>(_entityViewer.getTree());
|
DependencyManager::set<AssignmentParentFinder>(_entityViewer.getTree());
|
||||||
|
|
||||||
QMetaObject::invokeMethod(&_avatarAudioTimer, "start");
|
_avatarAudioTimer.start();
|
||||||
|
|
||||||
// Agents should run at 45hz
|
// Agents should run at 45hz
|
||||||
static const int AVATAR_DATA_HZ = 45;
|
static const int AVATAR_DATA_HZ = 45;
|
||||||
|
@ -507,7 +511,18 @@ void Agent::executeScript() {
|
||||||
Frame::clearFrameHandler(AUDIO_FRAME_TYPE);
|
Frame::clearFrameHandler(AUDIO_FRAME_TYPE);
|
||||||
Frame::clearFrameHandler(AVATAR_FRAME_TYPE);
|
Frame::clearFrameHandler(AVATAR_FRAME_TYPE);
|
||||||
|
|
||||||
DependencyManager::destroy<RecordingScriptingInterface>();
|
if (recordingInterface->isPlaying()) {
|
||||||
|
recordingInterface->stopPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recordingInterface->isRecording()) {
|
||||||
|
recordingInterface->stopRecording();
|
||||||
|
}
|
||||||
|
|
||||||
|
avatarDataTimer->stop();
|
||||||
|
_avatarAudioTimer.stop();
|
||||||
|
}
|
||||||
|
|
||||||
setFinished(true);
|
setFinished(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -859,17 +874,25 @@ void Agent::aboutToFinish() {
|
||||||
DependencyManager::destroy<SoundCache>();
|
DependencyManager::destroy<SoundCache>();
|
||||||
DependencyManager::destroy<AudioScriptingInterface>();
|
DependencyManager::destroy<AudioScriptingInterface>();
|
||||||
|
|
||||||
|
DependencyManager::destroy<RecordingScriptingInterface>();
|
||||||
DependencyManager::destroy<recording::Deck>();
|
DependencyManager::destroy<recording::Deck>();
|
||||||
DependencyManager::destroy<recording::Recorder>();
|
DependencyManager::destroy<recording::Recorder>();
|
||||||
DependencyManager::destroy<recording::ClipCache>();
|
DependencyManager::destroy<recording::ClipCache>();
|
||||||
DependencyManager::destroy<ScriptEngine>();
|
|
||||||
|
// drop our shared pointer to the script engine, then ask ScriptEngines to shutdown scripting
|
||||||
|
// this ensures that the ScriptEngine goes down before ScriptEngines
|
||||||
|
_scriptEngine.clear();
|
||||||
|
|
||||||
|
{
|
||||||
|
DependencyManager::get<ScriptEngines>()->shutdownScripting();
|
||||||
|
}
|
||||||
|
|
||||||
|
DependencyManager::destroy<ScriptEngines>();
|
||||||
|
|
||||||
DependencyManager::destroy<AssignmentDynamicFactory>();
|
DependencyManager::destroy<AssignmentDynamicFactory>();
|
||||||
|
|
||||||
DependencyManager::destroy<ScriptableAvatar>();
|
DependencyManager::destroy<ScriptableAvatar>();
|
||||||
|
|
||||||
QMetaObject::invokeMethod(&_avatarAudioTimer, "stop");
|
|
||||||
|
|
||||||
// cleanup codec & encoder
|
// cleanup codec & encoder
|
||||||
if (_codec && _encoder) {
|
if (_codec && _encoder) {
|
||||||
_codec->releaseEncoder(_encoder);
|
_codec->releaseEncoder(_encoder);
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include <gpu/Batch.h>
|
#include <gpu/Batch.h>
|
||||||
|
|
||||||
#include <NodeList.h>
|
#include <NodeList.h>
|
||||||
#include <recording/Deck.h>
|
|
||||||
#include <DependencyManager.h>
|
#include <DependencyManager.h>
|
||||||
#include <GeometryUtil.h>
|
#include <GeometryUtil.h>
|
||||||
#include <trackers/FaceTracker.h>
|
#include <trackers/FaceTracker.h>
|
||||||
|
|
Loading…
Reference in a new issue