From dae7bf8674af2c08494c76863431d2531274792a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 20 May 2013 11:48:50 -0700 Subject: [PATCH 1/2] use AgentList defaults when AIM has no socket or address set --- interface/src/Application.cpp | 6 ++++-- libraries/audio/src/AudioInjectionManager.cpp | 19 +++++++++++++++++++ libraries/audio/src/AudioInjectionManager.h | 3 ++- libraries/shared/src/AgentList.cpp | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1f34ed3c09..ed9d4a3235 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -150,8 +150,8 @@ Application::Application(int& argc, char** argv) : _packetCount(0), _packetsPerSecond(0), _bytesPerSecond(0), - _bytesCount(0) { - + _bytesCount(0) +{ gettimeofday(&_applicationStartupTime, NULL); printLog("Interface Startup:\n"); @@ -167,7 +167,9 @@ Application::Application(int& argc, char** argv) : if (portStr) { listenPort = atoi(portStr); } + AgentList::createInstance(AGENT_TYPE_AVATAR, listenPort); + _enableNetworkThread = !cmdOptionExists(argc, constArgv, "--nonblocking"); if (!_enableNetworkThread) { AgentList::getInstance()->getAgentSocket()->setBlocking(false); diff --git a/libraries/audio/src/AudioInjectionManager.cpp b/libraries/audio/src/AudioInjectionManager.cpp index ce252afd23..275161730e 100644 --- a/libraries/audio/src/AudioInjectionManager.cpp +++ b/libraries/audio/src/AudioInjectionManager.cpp @@ -9,12 +9,16 @@ #include #include "SharedUtil.h" +#include "AgentList.h" +#include "AgentTypes.h" +#include "Agent.h" #include "PacketHeaders.h" #include "AudioInjectionManager.h" UDPSocket* AudioInjectionManager::_injectorSocket = NULL; sockaddr AudioInjectionManager::_destinationSocket; +bool AudioInjectionManager::_isDestinationSocketExplicit = false; AudioInjector* AudioInjectionManager::_injectors[50] = {}; AudioInjector* AudioInjectionManager::injectorWithSamplesFromFile(const char* filename) { @@ -39,9 +43,24 @@ AudioInjector* AudioInjectionManager::injectorWithCapacity(int capacity) { return NULL; } +void AudioInjectionManager::setDestinationSocket(sockaddr& destinationSocket) { + _destinationSocket = destinationSocket; + _isDestinationSocketExplicit = true; +} + void* AudioInjectionManager::injectAudioViaThread(void* args) { AudioInjector* injector = (AudioInjector*) args; + // if we don't have an injectorSocket then grab the one from the agent list + if (!_injectorSocket) { + _injectorSocket = AgentList::getInstance()->getAgentSocket(); + } + + // if we don't have an explicit destination socket then pull active socket for current audio mixer from agent list + if (!_isDestinationSocketExplicit) { + _destinationSocket = *AgentList::getInstance()->soloAgentOfType(AGENT_TYPE_AUDIO_MIXER)->getActiveSocket(); + } + injector->injectAudio(_injectorSocket, &_destinationSocket); // if this an injector inside the injection manager's array we're responsible for deletion diff --git a/libraries/audio/src/AudioInjectionManager.h b/libraries/audio/src/AudioInjectionManager.h index 3297305475..8cb9614811 100644 --- a/libraries/audio/src/AudioInjectionManager.h +++ b/libraries/audio/src/AudioInjectionManager.h @@ -24,12 +24,13 @@ public: static void threadInjector(AudioInjector* injector); static void setInjectorSocket(UDPSocket* injectorSocket) { _injectorSocket = injectorSocket;} - static void setDestinationSocket(sockaddr& destinationSocket) { _destinationSocket = destinationSocket; } + static void setDestinationSocket(sockaddr& destinationSocket); private: static void* injectAudioViaThread(void* args); static UDPSocket* _injectorSocket; static sockaddr _destinationSocket; + static bool _isDestinationSocketExplicit; static AudioInjector* _injectors[MAX_CONCURRENT_INJECTORS]; }; diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index c667f733a4..3da956a04a 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -10,6 +10,7 @@ #include #include #include + #include "AgentList.h" #include "AgentTypes.h" #include "PacketHeaders.h" From d6ceca4f4bffbaa88fa4d641be5adf292c31a831 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 20 May 2013 12:16:56 -0700 Subject: [PATCH 2/2] move constructor for AvatarData to implemenation file --- libraries/avatars/src/AvatarData.cpp | 29 ++++++++++++++++++++++++++++ libraries/avatars/src/AvatarData.h | 26 +------------------------ 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 2e11e8aa84..d644be8c7c 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -19,6 +19,35 @@ using namespace std; using avatars_lib::printLog; +AvatarData::AvatarData() : + _handPosition(0,0,0), + _bodyYaw(-90.0), + _bodyPitch(0.0), + _bodyRoll(0.0), + _headYaw(0), + _headPitch(0), + _headRoll(0), + _headLeanSideways(0), + _headLeanForward(0), + _audioLoudness(0), + _handState(0), + _cameraPosition(0,0,0), + _cameraDirection(0,0,0), + _cameraUp(0,0,0), + _cameraRight(0,0,0), + _cameraFov(0.0f), + _cameraAspectRatio(0.0f), + _cameraNearClip(0.0f), + _cameraFarClip(0.0f), + _keyState(NO_KEY_DOWN), + _wantResIn(false), + _wantColor(true), + _wantDelta(false) +{ + +} + + int packFloatAngleToTwoByte(unsigned char* buffer, float angle) { const float ANGLE_CONVERSION_RATIO = (std::numeric_limits::max() / 360.0); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 89fa8c70a3..eeb2e1eb7e 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -28,31 +28,7 @@ enum KeyState class AvatarData : public AgentData { public: - AvatarData() : - _handPosition(0,0,0), - _bodyYaw(-90.0), - _bodyPitch(0.0), - _bodyRoll(0.0), - _headYaw(0), - _headPitch(0), - _headRoll(0), - _headLeanSideways(0), - _headLeanForward(0), - _audioLoudness(0), - _handState(0), - _cameraPosition(0,0,0), - _cameraDirection(0,0,0), - _cameraUp(0,0,0), - _cameraRight(0,0,0), - _cameraFov(0.0f), - _cameraAspectRatio(0.0f), - _cameraNearClip(0.0f), - _cameraFarClip(0.0f), - _keyState(NO_KEY_DOWN), - _wantResIn(false), - _wantColor(true), - _wantDelta(false) - { }; + AvatarData(); const glm::vec3& getPosition() const { return _position; } void setPosition(const glm::vec3 position) { _position = position; }