Merge branch 'master' into grab-clone

This commit is contained in:
Menithal 2017-02-23 20:33:48 +02:00
commit d59e2ca01a
8 changed files with 44 additions and 24 deletions

View file

@ -148,13 +148,22 @@ MyAvatar::MyAvatar(RigPointer rig) :
auto player = DependencyManager::get<Deck>(); auto player = DependencyManager::get<Deck>();
auto recorder = DependencyManager::get<Recorder>(); auto recorder = DependencyManager::get<Recorder>();
connect(player.data(), &Deck::playbackStateChanged, [=] { connect(player.data(), &Deck::playbackStateChanged, [=] {
if (player->isPlaying()) { bool isPlaying = player->isPlaying();
if (isPlaying) {
auto recordingInterface = DependencyManager::get<RecordingScriptingInterface>(); auto recordingInterface = DependencyManager::get<RecordingScriptingInterface>();
if (recordingInterface->getPlayFromCurrentLocation()) { if (recordingInterface->getPlayFromCurrentLocation()) {
setRecordingBasis(); setRecordingBasis();
} }
} else { } else {
clearRecordingBasis(); clearRecordingBasis();
useFullAvatarURL(_fullAvatarURLFromPreferences, _fullAvatarModelName);
}
auto audioIO = DependencyManager::get<AudioClient>();
audioIO->setIsPlayingBackRecording(isPlaying);
if (_rig) {
_rig->setEnableAnimations(!isPlaying);
} }
}); });
@ -180,8 +189,8 @@ MyAvatar::MyAvatar(RigPointer rig) :
if (recordingInterface->getPlayerUseSkeletonModel() && dummyAvatar.getSkeletonModelURL().isValid() && if (recordingInterface->getPlayerUseSkeletonModel() && dummyAvatar.getSkeletonModelURL().isValid() &&
(dummyAvatar.getSkeletonModelURL() != getSkeletonModelURL())) { (dummyAvatar.getSkeletonModelURL() != getSkeletonModelURL())) {
// FIXME
//myAvatar->useFullAvatarURL() setSkeletonModelURL(dummyAvatar.getSkeletonModelURL());
} }
if (recordingInterface->getPlayerUseDisplayName() && dummyAvatar.getDisplayName() != getDisplayName()) { if (recordingInterface->getPlayerUseDisplayName() && dummyAvatar.getDisplayName() != getDisplayName()) {
@ -204,6 +213,11 @@ MyAvatar::MyAvatar(RigPointer rig) :
// head orientation // head orientation
_headData->setLookAtPosition(headData->getLookAtPosition()); _headData->setLookAtPosition(headData->getLookAtPosition());
} }
auto jointData = dummyAvatar.getRawJointData();
if (jointData.length() > 0 && _rig) {
_rig->copyJointsFromJointData(jointData);
}
}); });
connect(rig.get(), SIGNAL(onLoadComplete()), this, SIGNAL(onLoadComplete())); connect(rig.get(), SIGNAL(onLoadComplete()), this, SIGNAL(onLoadComplete()));
@ -471,7 +485,9 @@ void MyAvatar::simulate(float deltaTime) {
{ {
PerformanceTimer perfTimer("joints"); PerformanceTimer perfTimer("joints");
// copy out the skeleton joints from the model // copy out the skeleton joints from the model
_rig->copyJointsIntoJointData(_jointData); if (_rigEnabled) {
_rig->copyJointsIntoJointData(_jointData);
}
} }
{ {

View file

@ -485,6 +485,7 @@ private:
std::unordered_set<int> _headBoneSet; std::unordered_set<int> _headBoneSet;
RigPointer _rig; RigPointer _rig;
bool _prevShouldDrawHead; bool _prevShouldDrawHead;
bool _rigEnabled { true };
bool _enableDebugDrawDefaultPose { false }; bool _enableDebugDrawDefaultPose { false };
bool _enableDebugDrawAnimPose { false }; bool _enableDebugDrawAnimPose { false };

View file

@ -483,6 +483,10 @@ void Rig::setEnableInverseKinematics(bool enable) {
_enableInverseKinematics = enable; _enableInverseKinematics = enable;
} }
void Rig::setEnableAnimations(bool enable) {
_enabledAnimations = enable;
}
AnimPose Rig::getAbsoluteDefaultPose(int index) const { AnimPose Rig::getAbsoluteDefaultPose(int index) const {
if (_animSkeleton && index >= 0 && index < _animSkeleton->getNumJoints()) { if (_animSkeleton && index >= 0 && index < _animSkeleton->getNumJoints()) {
return _absoluteDefaultPoses[index]; return _absoluteDefaultPoses[index];
@ -907,7 +911,7 @@ void Rig::updateAnimations(float deltaTime, glm::mat4 rootTransform) {
setModelOffset(rootTransform); setModelOffset(rootTransform);
if (_animNode) { if (_animNode && _enabledAnimations) {
PerformanceTimer perfTimer("handleTriggers"); PerformanceTimer perfTimer("handleTriggers");
updateAnimationStateHandlers(); updateAnimationStateHandlers();

View file

@ -210,6 +210,7 @@ public:
void computeAvatarBoundingCapsule(const FBXGeometry& geometry, float& radiusOut, float& heightOut, glm::vec3& offsetOut) const; void computeAvatarBoundingCapsule(const FBXGeometry& geometry, float& radiusOut, float& heightOut, glm::vec3& offsetOut) const;
void setEnableInverseKinematics(bool enable); void setEnableInverseKinematics(bool enable);
void setEnableAnimations(bool enable);
const glm::mat4& getGeometryToRigTransform() const { return _geometryToRigTransform; } const glm::mat4& getGeometryToRigTransform() const { return _geometryToRigTransform; }
@ -314,6 +315,7 @@ protected:
int32_t _numOverrides { 0 }; int32_t _numOverrides { 0 };
bool _lastEnableInverseKinematics { true }; bool _lastEnableInverseKinematics { true };
bool _enableInverseKinematics { true }; bool _enableInverseKinematics { true };
bool _enabledAnimations { true };
mutable uint32_t _jointNameWarningCount { 0 }; mutable uint32_t _jointNameWarningCount { 0 };

View file

@ -39,13 +39,10 @@
#include <plugins/CodecPlugin.h> #include <plugins/CodecPlugin.h>
#include <plugins/PluginManager.h> #include <plugins/PluginManager.h>
#include <udt/PacketHeaders.h> #include <udt/PacketHeaders.h>
#include <PositionalAudioStream.h>
#include <SettingHandle.h> #include <SettingHandle.h>
#include <SharedUtil.h> #include <SharedUtil.h>
#include <UUID.h>
#include <Transform.h> #include <Transform.h>
#include "PositionalAudioStream.h"
#include "AudioClientLogging.h" #include "AudioClientLogging.h"
#include "AudioLogging.h" #include "AudioLogging.h"
@ -294,12 +291,12 @@ QString friendlyNameForAudioDevice(IMMDevice* pEndpoint) {
IPropertyStore* pPropertyStore; IPropertyStore* pPropertyStore;
pEndpoint->OpenPropertyStore(STGM_READ, &pPropertyStore); pEndpoint->OpenPropertyStore(STGM_READ, &pPropertyStore);
pEndpoint->Release(); pEndpoint->Release();
pEndpoint = NULL; pEndpoint = nullptr;
PROPVARIANT pv; PROPVARIANT pv;
PropVariantInit(&pv); PropVariantInit(&pv);
HRESULT hr = pPropertyStore->GetValue(PKEY_Device_FriendlyName, &pv); HRESULT hr = pPropertyStore->GetValue(PKEY_Device_FriendlyName, &pv);
pPropertyStore->Release(); pPropertyStore->Release();
pPropertyStore = NULL; pPropertyStore = nullptr;
deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal); deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal);
if (!IsWindows8OrGreater()) { if (!IsWindows8OrGreater()) {
// Windows 7 provides only the 31 first characters of the device name. // Windows 7 provides only the 31 first characters of the device name.
@ -313,9 +310,9 @@ QString friendlyNameForAudioDevice(IMMDevice* pEndpoint) {
QString AudioClient::friendlyNameForAudioDevice(wchar_t* guid) { QString AudioClient::friendlyNameForAudioDevice(wchar_t* guid) {
QString deviceName; QString deviceName;
HRESULT hr = S_OK; HRESULT hr = S_OK;
CoInitialize(NULL); CoInitialize(nullptr);
IMMDeviceEnumerator* pMMDeviceEnumerator = NULL; IMMDeviceEnumerator* pMMDeviceEnumerator = nullptr;
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pMMDeviceEnumerator); CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pMMDeviceEnumerator);
IMMDevice* pEndpoint; IMMDevice* pEndpoint;
hr = pMMDeviceEnumerator->GetDevice(guid, &pEndpoint); hr = pMMDeviceEnumerator->GetDevice(guid, &pEndpoint);
if (hr == E_NOTFOUND) { if (hr == E_NOTFOUND) {
@ -325,7 +322,7 @@ QString AudioClient::friendlyNameForAudioDevice(wchar_t* guid) {
deviceName = ::friendlyNameForAudioDevice(pEndpoint); deviceName = ::friendlyNameForAudioDevice(pEndpoint);
} }
pMMDeviceEnumerator->Release(); pMMDeviceEnumerator->Release();
pMMDeviceEnumerator = NULL; pMMDeviceEnumerator = nullptr;
CoUninitialize(); CoUninitialize();
return deviceName; return deviceName;
} }
@ -968,8 +965,7 @@ void AudioClient::handleLocalEchoAndReverb(QByteArray& inputByteArray) {
} }
void AudioClient::handleAudioInput() { void AudioClient::handleAudioInput() {
if (!_inputDevice || _isPlayingBackRecording) {
if (!_inputDevice) {
return; return;
} }

View file

@ -147,6 +147,8 @@ public:
void setPositionGetter(AudioPositionGetter positionGetter) { _positionGetter = positionGetter; } void setPositionGetter(AudioPositionGetter positionGetter) { _positionGetter = positionGetter; }
void setOrientationGetter(AudioOrientationGetter orientationGetter) { _orientationGetter = orientationGetter; } void setOrientationGetter(AudioOrientationGetter orientationGetter) { _orientationGetter = orientationGetter; }
void setIsPlayingBackRecording(bool isPlayingBackRecording) { _isPlayingBackRecording = isPlayingBackRecording; }
Q_INVOKABLE void setAvatarBoundingBoxParameters(glm::vec3 corner, glm::vec3 scale); Q_INVOKABLE void setAvatarBoundingBoxParameters(glm::vec3 corner, glm::vec3 scale);
void checkDevices(); void checkDevices();
@ -369,10 +371,12 @@ private:
QVector<QString> _inputDevices; QVector<QString> _inputDevices;
QVector<QString> _outputDevices; QVector<QString> _outputDevices;
bool _hasReceivedFirstPacket = false; bool _hasReceivedFirstPacket { false };
QVector<AudioInjector*> _activeLocalAudioInjectors; QVector<AudioInjector*> _activeLocalAudioInjectors;
bool _isPlayingBackRecording { false };
CodecPluginPointer _codec; CodecPluginPointer _codec;
QString _selectedCodecName; QString _selectedCodecName;
Encoder* _encoder { nullptr }; // for outbound mic stream Encoder* _encoder { nullptr }; // for outbound mic stream

View file

@ -91,4 +91,4 @@ void injectorOptionsFromScriptValue(const QScriptValue& object, AudioInjectorOpt
qCWarning(audio) << "Unknown audio injector option:" << it.name(); qCWarning(audio) << "Unknown audio injector option:" << it.name();
} }
} }
} }

View file

@ -12,14 +12,14 @@
HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
Script.include("/~/system/libraries/toolBars.js"); Script.include("/~/system/libraries/toolBars.js");
var recordingFile = "recording.rec"; var recordingFile = "recording.hfr";
function setPlayerOptions() { function setPlayerOptions() {
Recording.setPlayFromCurrentLocation(true); Recording.setPlayFromCurrentLocation(true);
Recording.setPlayerUseDisplayName(false); Recording.setPlayerUseDisplayName(false);
Recording.setPlayerUseAttachments(false); Recording.setPlayerUseAttachments(false);
Recording.setPlayerUseHeadModel(false); Recording.setPlayerUseHeadModel(false);
Recording.setPlayerUseSkeletonModel(false); Recording.setPlayerUseSkeletonModel(true);
} }
var windowDimensions = Controller.getViewportDimensions(); var windowDimensions = Controller.getViewportDimensions();
@ -142,7 +142,6 @@ function setupTimer() {
backgroundAlpha: 1.0, backgroundAlpha: 1.0,
visible: true visible: true
}); });
} }
function updateTimer() { function updateTimer() {
@ -272,7 +271,7 @@ function mousePressEvent(event) {
} }
} else if (loadIcon === toolBar.clicked(clickedOverlay)) { } else if (loadIcon === toolBar.clicked(clickedOverlay)) {
if (!Recording.isRecording() && !Recording.isPlaying()) { if (!Recording.isRecording() && !Recording.isPlaying()) {
recordingFile = Window.browse("Load recorcding from file", ".", "Recordings (*.hfr *.rec *.HFR *.REC)"); recordingFile = Window.browse("Load recording from file", ".", "Recordings (*.hfr *.rec *.HFR *.REC)");
if (!(recordingFile === "null" || recordingFile === null || recordingFile === "")) { if (!(recordingFile === "null" || recordingFile === null || recordingFile === "")) {
Recording.loadRecording(recordingFile); Recording.loadRecording(recordingFile);
} }
@ -345,5 +344,3 @@ Script.scriptEnding.connect(scriptEnding);
// Should be called last to put everything into position // Should be called last to put everything into position
moveUI(); moveUI();