Fix bug introduced in CR

This commit is contained in:
Atlante45 2014-08-18 21:06:32 -07:00
parent 45ccb01297
commit 29830916ba

View file

@ -182,7 +182,7 @@ qint64 Player::elapsed() const {
} }
glm::quat Player::getHeadRotation() { glm::quat Player::getHeadRotation() {
if (computeCurrentFrame()) { if (!computeCurrentFrame()) {
qWarning() << "Incorrect use of Player::getHeadRotation()"; qWarning() << "Incorrect use of Player::getHeadRotation()";
return glm::quat(); return glm::quat();
} }
@ -195,7 +195,7 @@ glm::quat Player::getHeadRotation() {
} }
float Player::getLeanSideways() { float Player::getLeanSideways() {
if (computeCurrentFrame()) { if (!computeCurrentFrame()) {
qWarning() << "Incorrect use of Player::getLeanSideways()"; qWarning() << "Incorrect use of Player::getLeanSideways()";
return 0.0f; return 0.0f;
} }
@ -204,7 +204,7 @@ float Player::getLeanSideways() {
} }
float Player::getLeanForward() { float Player::getLeanForward() {
if (computeCurrentFrame()) { if (!computeCurrentFrame()) {
qWarning() << "Incorrect use of Player::getLeanForward()"; qWarning() << "Incorrect use of Player::getLeanForward()";
return 0.0f; return 0.0f;
} }
@ -216,13 +216,16 @@ void Player::startPlaying() {
if (_recording && _recording->getFrameNumber() > 0) { if (_recording && _recording->getFrameNumber() > 0) {
qDebug() << "Recorder::startPlaying()"; qDebug() << "Recorder::startPlaying()";
_currentFrame = 0; _currentFrame = 0;
// Setup audio thread
_audioThread = new QThread();
_options.setPosition(_avatar->getPosition()); _options.setPosition(_avatar->getPosition());
_options.setOrientation(_avatar->getOrientation()); _options.setOrientation(_avatar->getOrientation());
_injector.reset(new AudioInjector(_recording->getAudio(), _options)); _injector.reset(new AudioInjector(_recording->getAudio(), _options), &QObject::deleteLater);
_audioThread = new QThread();
_injector->moveToThread(_audioThread); _injector->moveToThread(_audioThread);
_audioThread->start(); _audioThread->start();
QMetaObject::invokeMethod(_injector.data(), "injectAudio", Qt::QueuedConnection); QMetaObject::invokeMethod(_injector.data(), "injectAudio", Qt::QueuedConnection);
_timer.start(); _timer.start();
} }
} }
@ -232,7 +235,6 @@ void Player::stopPlaying() {
return; return;
} }
qDebug() << "Recorder::stopPlaying()";
_timer.invalidate(); _timer.invalidate();
_avatar->clearJointsData(); _avatar->clearJointsData();
@ -242,6 +244,7 @@ void Player::stopPlaying() {
_injector.clear(); _injector.clear();
_audioThread->exit(); _audioThread->exit();
_audioThread->deleteLater(); _audioThread->deleteLater();
qDebug() << "Recorder::stopPlaying()";
} }
void Player::loadFromFile(QString file) { void Player::loadFromFile(QString file) {
@ -259,7 +262,7 @@ void Player::loadRecording(RecordingPointer recording) {
void Player::play() { void Player::play() {
computeCurrentFrame(); computeCurrentFrame();
if (_currentFrame < 0 || _currentFrame >= _recording->getFrameNumber()) { if (_currentFrame < 0 || _currentFrame >= _recording->getFrameNumber() - 1) {
// If it's the end of the recording, stop playing // If it's the end of the recording, stop playing
stopPlaying(); stopPlaying();
return; return;
@ -283,6 +286,10 @@ void Player::play() {
HeadData* head = const_cast<HeadData*>(_avatar->getHeadData()); HeadData* head = const_cast<HeadData*>(_avatar->getHeadData());
head->setBlendshapeCoefficients(_recording->getFrame(_currentFrame).getBlendshapeCoefficients()); head->setBlendshapeCoefficients(_recording->getFrame(_currentFrame).getBlendshapeCoefficients());
} }
_options.setPosition(_avatar->getPosition());
_options.setOrientation(_avatar->getOrientation());
_injector->setOptions(_options);
} }
bool Player::computeCurrentFrame() { bool Player::computeCurrentFrame() {
@ -294,7 +301,7 @@ bool Player::computeCurrentFrame() {
_currentFrame = 0; _currentFrame = 0;
} }
while (_currentFrame < _recording->getFrameNumber() && while (_currentFrame < _recording->getFrameNumber() - 1 &&
_recording->getFrameTimestamp(_currentFrame) < _timer.elapsed()) { _recording->getFrameTimestamp(_currentFrame) < _timer.elapsed()) {
++_currentFrame; ++_currentFrame;
} }