mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-29 20:42:56 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi into ambient
This commit is contained in:
commit
c5b5aa93b1
21 changed files with 84 additions and 64 deletions
|
@ -584,6 +584,7 @@ void Agent::setIsAvatar(bool isAvatar) {
|
||||||
void Agent::sendAvatarIdentityPacket() {
|
void Agent::sendAvatarIdentityPacket() {
|
||||||
if (_isAvatar) {
|
if (_isAvatar) {
|
||||||
auto scriptedAvatar = DependencyManager::get<ScriptableAvatar>();
|
auto scriptedAvatar = DependencyManager::get<ScriptableAvatar>();
|
||||||
|
scriptedAvatar->markIdentityDataChanged();
|
||||||
scriptedAvatar->sendIdentityPacket();
|
scriptedAvatar->sendIdentityPacket();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,13 +38,14 @@
|
||||||
#include "AudioMixer.h"
|
#include "AudioMixer.h"
|
||||||
|
|
||||||
static const float DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE = 0.5f; // attenuation = -6dB * log2(distance)
|
static const float DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE = 0.5f; // attenuation = -6dB * log2(distance)
|
||||||
|
static const int DISABLE_STATIC_JITTER_FRAMES = -1;
|
||||||
static const float DEFAULT_NOISE_MUTING_THRESHOLD = 1.0f;
|
static const float DEFAULT_NOISE_MUTING_THRESHOLD = 1.0f;
|
||||||
static const QString AUDIO_MIXER_LOGGING_TARGET_NAME = "audio-mixer";
|
static const QString AUDIO_MIXER_LOGGING_TARGET_NAME = "audio-mixer";
|
||||||
static const QString AUDIO_ENV_GROUP_KEY = "audio_env";
|
static const QString AUDIO_ENV_GROUP_KEY = "audio_env";
|
||||||
static const QString AUDIO_BUFFER_GROUP_KEY = "audio_buffer";
|
static const QString AUDIO_BUFFER_GROUP_KEY = "audio_buffer";
|
||||||
static const QString AUDIO_THREADING_GROUP_KEY = "audio_threading";
|
static const QString AUDIO_THREADING_GROUP_KEY = "audio_threading";
|
||||||
|
|
||||||
int AudioMixer::_numStaticJitterFrames{ -1 };
|
int AudioMixer::_numStaticJitterFrames{ DISABLE_STATIC_JITTER_FRAMES };
|
||||||
float AudioMixer::_noiseMutingThreshold{ DEFAULT_NOISE_MUTING_THRESHOLD };
|
float AudioMixer::_noiseMutingThreshold{ DEFAULT_NOISE_MUTING_THRESHOLD };
|
||||||
float AudioMixer::_attenuationPerDoublingInDistance{ DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE };
|
float AudioMixer::_attenuationPerDoublingInDistance{ DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE };
|
||||||
std::map<QString, std::shared_ptr<CodecPlugin>> AudioMixer::_availableCodecs{ };
|
std::map<QString, std::shared_ptr<CodecPlugin>> AudioMixer::_availableCodecs{ };
|
||||||
|
@ -56,7 +57,12 @@ QVector<AudioMixer::ReverbSettings> AudioMixer::_zoneReverbSettings;
|
||||||
AudioMixer::AudioMixer(ReceivedMessage& message) :
|
AudioMixer::AudioMixer(ReceivedMessage& message) :
|
||||||
ThreadedAssignment(message) {
|
ThreadedAssignment(message) {
|
||||||
|
|
||||||
|
// Always clear settings first
|
||||||
|
// This prevents previous assignment settings from sticking around
|
||||||
|
clearDomainSettings();
|
||||||
|
|
||||||
// hash the available codecs (on the mixer)
|
// hash the available codecs (on the mixer)
|
||||||
|
_availableCodecs.clear(); // Make sure struct is clean
|
||||||
auto codecPlugins = PluginManager::getInstance()->getCodecPlugins();
|
auto codecPlugins = PluginManager::getInstance()->getCodecPlugins();
|
||||||
std::for_each(codecPlugins.cbegin(), codecPlugins.cend(),
|
std::for_each(codecPlugins.cbegin(), codecPlugins.cend(),
|
||||||
[&](const CodecPluginPointer& codec) {
|
[&](const CodecPluginPointer& codec) {
|
||||||
|
@ -232,7 +238,7 @@ void AudioMixer::sendStatsPacket() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// general stats
|
// general stats
|
||||||
statsObject["useDynamicJitterBuffers"] = _numStaticJitterFrames == -1;
|
statsObject["useDynamicJitterBuffers"] = _numStaticJitterFrames == DISABLE_STATIC_JITTER_FRAMES;
|
||||||
|
|
||||||
statsObject["threads"] = _slavePool.numThreads();
|
statsObject["threads"] = _slavePool.numThreads();
|
||||||
|
|
||||||
|
@ -490,6 +496,16 @@ int AudioMixer::prepareFrame(const SharedNodePointer& node, unsigned int frame)
|
||||||
return data->checkBuffersBeforeFrameSend();
|
return data->checkBuffersBeforeFrameSend();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioMixer::clearDomainSettings() {
|
||||||
|
_numStaticJitterFrames = DISABLE_STATIC_JITTER_FRAMES;
|
||||||
|
_attenuationPerDoublingInDistance = DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE;
|
||||||
|
_noiseMutingThreshold = DEFAULT_NOISE_MUTING_THRESHOLD;
|
||||||
|
_codecPreferenceOrder.clear();
|
||||||
|
_audioZones.clear();
|
||||||
|
_zoneSettings.clear();
|
||||||
|
_zoneReverbSettings.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void AudioMixer::parseSettingsObject(const QJsonObject &settingsObject) {
|
void AudioMixer::parseSettingsObject(const QJsonObject &settingsObject) {
|
||||||
qDebug() << "AVX2 Support:" << (cpuSupportsAVX2() ? "enabled" : "disabled");
|
qDebug() << "AVX2 Support:" << (cpuSupportsAVX2() ? "enabled" : "disabled");
|
||||||
|
|
||||||
|
@ -525,7 +541,7 @@ void AudioMixer::parseSettingsObject(const QJsonObject &settingsObject) {
|
||||||
qDebug() << "Static desired jitter buffer frames:" << _numStaticJitterFrames;
|
qDebug() << "Static desired jitter buffer frames:" << _numStaticJitterFrames;
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Disabling dynamic jitter buffers.";
|
qDebug() << "Disabling dynamic jitter buffers.";
|
||||||
_numStaticJitterFrames = -1;
|
_numStaticJitterFrames = DISABLE_STATIC_JITTER_FRAMES;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for deprecated audio settings
|
// check for deprecated audio settings
|
||||||
|
|
|
@ -79,6 +79,7 @@ private:
|
||||||
QString percentageForMixStats(int counter);
|
QString percentageForMixStats(int counter);
|
||||||
|
|
||||||
void parseSettingsObject(const QJsonObject& settingsObject);
|
void parseSettingsObject(const QJsonObject& settingsObject);
|
||||||
|
void clearDomainSettings();
|
||||||
|
|
||||||
float _trailingMixRatio { 0.0f };
|
float _trailingMixRatio { 0.0f };
|
||||||
float _throttlingRatio { 0.0f };
|
float _throttlingRatio { 0.0f };
|
||||||
|
|
|
@ -431,7 +431,7 @@ static const QString STATE_ADVANCED_MOVEMENT_CONTROLS = "AdvancedMovement";
|
||||||
static const QString STATE_GROUNDED = "Grounded";
|
static const QString STATE_GROUNDED = "Grounded";
|
||||||
static const QString STATE_NAV_FOCUSED = "NavigationFocused";
|
static const QString STATE_NAV_FOCUSED = "NavigationFocused";
|
||||||
|
|
||||||
bool setupEssentials(int& argc, char** argv) {
|
bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
|
||||||
const char** constArgv = const_cast<const char**>(argv);
|
const char** constArgv = const_cast<const char**>(argv);
|
||||||
const char* portStr = getCmdOption(argc, constArgv, "--listenPort");
|
const char* portStr = getCmdOption(argc, constArgv, "--listenPort");
|
||||||
const int listenPort = portStr ? atoi(portStr) : INVALID_PORT;
|
const int listenPort = portStr ? atoi(portStr) : INVALID_PORT;
|
||||||
|
@ -458,7 +458,7 @@ bool setupEssentials(int& argc, char** argv) {
|
||||||
|
|
||||||
static const auto SUPPRESS_SETTINGS_RESET = "--suppress-settings-reset";
|
static const auto SUPPRESS_SETTINGS_RESET = "--suppress-settings-reset";
|
||||||
bool suppressPrompt = cmdOptionExists(argc, const_cast<const char**>(argv), SUPPRESS_SETTINGS_RESET);
|
bool suppressPrompt = cmdOptionExists(argc, const_cast<const char**>(argv), SUPPRESS_SETTINGS_RESET);
|
||||||
bool previousSessionCrashed = CrashHandler::checkForResetSettings(suppressPrompt);
|
bool previousSessionCrashed = CrashHandler::checkForResetSettings(runningMarkerExisted, suppressPrompt);
|
||||||
|
|
||||||
DependencyManager::registerInheritance<LimitedNodeList, NodeList>();
|
DependencyManager::registerInheritance<LimitedNodeList, NodeList>();
|
||||||
DependencyManager::registerInheritance<AvatarHashMap, AvatarManager>();
|
DependencyManager::registerInheritance<AvatarHashMap, AvatarManager>();
|
||||||
|
@ -563,11 +563,11 @@ const bool DEFAULT_DESKTOP_TABLET_BECOMES_TOOLBAR = true;
|
||||||
const bool DEFAULT_HMD_TABLET_BECOMES_TOOLBAR = false;
|
const bool DEFAULT_HMD_TABLET_BECOMES_TOOLBAR = false;
|
||||||
const bool DEFAULT_PREFER_AVATAR_FINGER_OVER_STYLUS = false;
|
const bool DEFAULT_PREFER_AVATAR_FINGER_OVER_STYLUS = false;
|
||||||
|
|
||||||
Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bool runningMarkerExisted) :
|
||||||
QApplication(argc, argv),
|
QApplication(argc, argv),
|
||||||
_window(new MainWindow(desktop())),
|
_window(new MainWindow(desktop())),
|
||||||
_sessionRunTimer(startupTimer),
|
_sessionRunTimer(startupTimer),
|
||||||
_previousSessionCrashed(setupEssentials(argc, argv)),
|
_previousSessionCrashed(setupEssentials(argc, argv, runningMarkerExisted)),
|
||||||
_undoStackScriptingInterface(&_undoStack),
|
_undoStackScriptingInterface(&_undoStack),
|
||||||
_entitySimulation(new PhysicalEntitySimulation()),
|
_entitySimulation(new PhysicalEntitySimulation()),
|
||||||
_physicsEngine(new PhysicsEngine(Vectors::ZERO)),
|
_physicsEngine(new PhysicsEngine(Vectors::ZERO)),
|
||||||
|
@ -6428,7 +6428,7 @@ void Application::takeSnapshot(bool notify, bool includeAnimated, float aspectRa
|
||||||
if (!includeAnimated) {
|
if (!includeAnimated) {
|
||||||
// Tell the dependency manager that the capture of the still snapshot has taken place.
|
// Tell the dependency manager that the capture of the still snapshot has taken place.
|
||||||
emit DependencyManager::get<WindowScriptingInterface>()->stillSnapshotTaken(path, notify);
|
emit DependencyManager::get<WindowScriptingInterface>()->stillSnapshotTaken(path, notify);
|
||||||
} else {
|
} else if (!SnapshotAnimated::isAlreadyTakingSnapshotAnimated()) {
|
||||||
// Get an animated GIF snapshot and save it
|
// Get an animated GIF snapshot and save it
|
||||||
SnapshotAnimated::saveSnapshotAnimated(path, aspectRatio, qApp, DependencyManager::get<WindowScriptingInterface>());
|
SnapshotAnimated::saveSnapshotAnimated(path, aspectRatio, qApp, DependencyManager::get<WindowScriptingInterface>());
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,7 @@ public:
|
||||||
static void initPlugins(const QStringList& arguments);
|
static void initPlugins(const QStringList& arguments);
|
||||||
static void shutdownPlugins();
|
static void shutdownPlugins();
|
||||||
|
|
||||||
Application(int& argc, char** argv, QElapsedTimer& startup_time);
|
Application(int& argc, char** argv, QElapsedTimer& startup_time, bool runningMarkerExisted);
|
||||||
~Application();
|
~Application();
|
||||||
|
|
||||||
void postLambdaEvent(std::function<void()> f) override;
|
void postLambdaEvent(std::function<void()> f) override;
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <RunningMarker.h>
|
#include <RunningMarker.h>
|
||||||
|
|
||||||
bool CrashHandler::checkForResetSettings(bool suppressPrompt) {
|
bool CrashHandler::checkForResetSettings(bool wasLikelyCrash, bool suppressPrompt) {
|
||||||
Settings settings;
|
Settings settings;
|
||||||
settings.beginGroup("Developer");
|
settings.beginGroup("Developer");
|
||||||
QVariant displayCrashOptions = settings.value(MenuOption::DisplayCrashOptions);
|
QVariant displayCrashOptions = settings.value(MenuOption::DisplayCrashOptions);
|
||||||
|
@ -39,9 +39,6 @@ bool CrashHandler::checkForResetSettings(bool suppressPrompt) {
|
||||||
// If option does not exist in Interface.ini so assume default behavior.
|
// If option does not exist in Interface.ini so assume default behavior.
|
||||||
bool displaySettingsResetOnCrash = !displayCrashOptions.isValid() || displayCrashOptions.toBool();
|
bool displaySettingsResetOnCrash = !displayCrashOptions.isValid() || displayCrashOptions.toBool();
|
||||||
|
|
||||||
QFile runningMarkerFile(RunningMarker::getMarkerFilePath(RUNNING_MARKER_FILENAME));
|
|
||||||
bool wasLikelyCrash = runningMarkerFile.exists();
|
|
||||||
|
|
||||||
if (suppressPrompt) {
|
if (suppressPrompt) {
|
||||||
return wasLikelyCrash;
|
return wasLikelyCrash;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
class CrashHandler {
|
class CrashHandler {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static bool checkForResetSettings(bool suppressPrompt = false);
|
static bool checkForResetSettings(bool wasLikelyCrash, bool suppressPrompt = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum Action {
|
enum Action {
|
||||||
|
|
|
@ -192,6 +192,7 @@ int main(int argc, const char* argv[]) {
|
||||||
int exitCode;
|
int exitCode;
|
||||||
{
|
{
|
||||||
RunningMarker runningMarker(nullptr, RUNNING_MARKER_FILENAME);
|
RunningMarker runningMarker(nullptr, RUNNING_MARKER_FILENAME);
|
||||||
|
bool runningMarkerExisted = runningMarker.fileExists();
|
||||||
runningMarker.writeRunningMarkerFile();
|
runningMarker.writeRunningMarkerFile();
|
||||||
|
|
||||||
bool noUpdater = parser.isSet(noUpdaterOption);
|
bool noUpdater = parser.isSet(noUpdaterOption);
|
||||||
|
@ -202,7 +203,7 @@ int main(int argc, const char* argv[]) {
|
||||||
SandboxUtils::runLocalSandbox(serverContentPath, true, RUNNING_MARKER_FILENAME, noUpdater);
|
SandboxUtils::runLocalSandbox(serverContentPath, true, RUNNING_MARKER_FILENAME, noUpdater);
|
||||||
}
|
}
|
||||||
|
|
||||||
Application app(argc, const_cast<char**>(argv), startupTime);
|
Application app(argc, const_cast<char**>(argv), startupTime, runningMarkerExisted);
|
||||||
|
|
||||||
// Now that the main event loop is setup, launch running marker thread
|
// Now that the main event loop is setup, launch running marker thread
|
||||||
runningMarker.startRunningMarker();
|
runningMarker.startRunningMarker();
|
||||||
|
|
|
@ -51,6 +51,7 @@ private:
|
||||||
static void processFrames();
|
static void processFrames();
|
||||||
public:
|
public:
|
||||||
static void saveSnapshotAnimated(QString pathStill, float aspectRatio, Application* app, QSharedPointer<WindowScriptingInterface> dm);
|
static void saveSnapshotAnimated(QString pathStill, float aspectRatio, Application* app, QSharedPointer<WindowScriptingInterface> dm);
|
||||||
|
static bool isAlreadyTakingSnapshotAnimated() { return snapshotAnimatedFirstFrameTimestamp != 0; };
|
||||||
static Setting::Handle<bool> alsoTakeAnimatedSnapshot;
|
static Setting::Handle<bool> alsoTakeAnimatedSnapshot;
|
||||||
static Setting::Handle<float> snapshotAnimatedDuration;
|
static Setting::Handle<float> snapshotAnimatedDuration;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1506,6 +1506,7 @@ bool AudioClient::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDevice
|
||||||
|
|
||||||
// cleanup any previously initialized device
|
// cleanup any previously initialized device
|
||||||
if (_audioOutput) {
|
if (_audioOutput) {
|
||||||
|
_audioOutputIODevice.close();
|
||||||
_audioOutput->stop();
|
_audioOutput->stop();
|
||||||
|
|
||||||
//must be deleted in next eventloop cycle when its called from notify()
|
//must be deleted in next eventloop cycle when its called from notify()
|
||||||
|
|
|
@ -94,7 +94,6 @@ public:
|
||||||
_audio(audio), _unfulfilledReads(0) {}
|
_audio(audio), _unfulfilledReads(0) {}
|
||||||
|
|
||||||
void start() { open(QIODevice::ReadOnly | QIODevice::Unbuffered); }
|
void start() { open(QIODevice::ReadOnly | QIODevice::Unbuffered); }
|
||||||
void stop() { close(); }
|
|
||||||
qint64 readData(char * data, qint64 maxSize) override;
|
qint64 readData(char * data, qint64 maxSize) override;
|
||||||
qint64 writeData(const char * data, qint64 maxSize) override { return 0; }
|
qint64 writeData(const char * data, qint64 maxSize) override { return 0; }
|
||||||
int getRecentUnfulfilledReads() { int unfulfilledReads = _unfulfilledReads; _unfulfilledReads = 0; return unfulfilledReads; }
|
int getRecentUnfulfilledReads() { int unfulfilledReads = _unfulfilledReads; _unfulfilledReads = 0; return unfulfilledReads; }
|
||||||
|
|
|
@ -184,6 +184,11 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<storage::FileStorage> KtxStorage::maybeOpenFile() const {
|
std::shared_ptr<storage::FileStorage> KtxStorage::maybeOpenFile() const {
|
||||||
|
// 1. Try to get the shared ptr
|
||||||
|
// 2. If it doesn't exist, grab the mutex around its creation
|
||||||
|
// 3. If it was created before we got the mutex, return it
|
||||||
|
// 4. Otherwise, create it
|
||||||
|
|
||||||
std::shared_ptr<storage::FileStorage> file = _cacheFile.lock();
|
std::shared_ptr<storage::FileStorage> file = _cacheFile.lock();
|
||||||
if (file) {
|
if (file) {
|
||||||
return file;
|
return file;
|
||||||
|
@ -205,7 +210,6 @@ std::shared_ptr<storage::FileStorage> KtxStorage::maybeOpenFile() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const {
|
PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const {
|
||||||
storage::StoragePointer result;
|
|
||||||
auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face);
|
auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face);
|
||||||
auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face);
|
auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face);
|
||||||
if (faceSize != 0 && faceOffset != 0) {
|
if (faceSize != 0 && faceOffset != 0) {
|
||||||
|
@ -221,7 +225,7 @@ PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const {
|
||||||
qWarning() << "Failed to get a valid file out of maybeOpenFile " << QString::fromStdString(_filename);
|
qWarning() << "Failed to get a valid file out of maybeOpenFile " << QString::fromStdString(_filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size KtxStorage::getMipFaceSize(uint16 level, uint8 face) const {
|
Size KtxStorage::getMipFaceSize(uint16 level, uint8 face) const {
|
||||||
|
@ -255,8 +259,18 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor
|
||||||
}
|
}
|
||||||
|
|
||||||
auto file = maybeOpenFile();
|
auto file = maybeOpenFile();
|
||||||
|
if (!file) {
|
||||||
|
qWarning() << "Failed to open file to assign mip data " << QString::fromStdString(_filename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto imageData = file->mutableData();
|
auto fileData = file->mutableData();
|
||||||
|
if (!fileData) {
|
||||||
|
qWarning() << "Failed to get mutable data for " << QString::fromStdString(_filename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto imageData = fileData;
|
||||||
imageData += ktx::KTX_HEADER_SIZE + _ktxDescriptor->header.bytesOfKeyValueData + _ktxDescriptor->images[level]._imageOffset;
|
imageData += ktx::KTX_HEADER_SIZE + _ktxDescriptor->header.bytesOfKeyValueData + _ktxDescriptor->images[level]._imageOffset;
|
||||||
imageData += ktx::IMAGE_SIZE_WIDTH;
|
imageData += ktx::IMAGE_SIZE_WIDTH;
|
||||||
|
|
||||||
|
@ -271,7 +285,7 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor
|
||||||
memcpy(imageData, storage->data(), storage->size());
|
memcpy(imageData, storage->data(), storage->size());
|
||||||
_minMipLevelAvailable = level;
|
_minMipLevelAvailable = level;
|
||||||
if (_offsetToMinMipKV > 0) {
|
if (_offsetToMinMipKV > 0) {
|
||||||
auto minMipKeyData = file->mutableData() + ktx::KTX_HEADER_SIZE + _offsetToMinMipKV;
|
auto minMipKeyData = fileData + ktx::KTX_HEADER_SIZE + _offsetToMinMipKV;
|
||||||
memcpy(minMipKeyData, (void*)&_minMipLevelAvailable, 1);
|
memcpy(minMipKeyData, (void*)&_minMipLevelAvailable, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,8 @@ namespace ktx {
|
||||||
|
|
||||||
for (size_t i = 0; i < descriptors.size(); ++i) {
|
for (size_t i = 0; i < descriptors.size(); ++i) {
|
||||||
auto ptr = reinterpret_cast<uint32_t*>(currentDestPtr);
|
auto ptr = reinterpret_cast<uint32_t*>(currentDestPtr);
|
||||||
*ptr = descriptors[i]._imageSize;
|
uint32_t imageFaceSize = descriptors[i]._faceSize;
|
||||||
|
*ptr = imageFaceSize; // the imageSize written in the ktx is the FACE size
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
ptr++;
|
ptr++;
|
||||||
|
|
|
@ -30,9 +30,9 @@
|
||||||
#include "udt/PacketHeaders.h"
|
#include "udt/PacketHeaders.h"
|
||||||
|
|
||||||
#if USE_STABLE_GLOBAL_SERVICES
|
#if USE_STABLE_GLOBAL_SERVICES
|
||||||
const QString DEFAULT_HIFI_ADDRESS = "hifi://welcome";
|
const QString DEFAULT_HIFI_ADDRESS = "hifi://welcome/hello";
|
||||||
#else
|
#else
|
||||||
const QString DEFAULT_HIFI_ADDRESS = "hifi://dev-welcome";
|
const QString DEFAULT_HIFI_ADDRESS = "hifi://dev-welcome/hello";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const QString ADDRESS_MANAGER_SETTINGS_GROUP = "AddressManager";
|
const QString ADDRESS_MANAGER_SETTINGS_GROUP = "AddressManager";
|
||||||
|
|
|
@ -53,6 +53,11 @@ RunningMarker::~RunningMarker() {
|
||||||
_runningMarkerThread->deleteLater();
|
_runningMarkerThread->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RunningMarker::fileExists() const {
|
||||||
|
QFile runningMarkerFile(getFilePath());
|
||||||
|
return runningMarkerFile.exists();
|
||||||
|
}
|
||||||
|
|
||||||
void RunningMarker::writeRunningMarkerFile() {
|
void RunningMarker::writeRunningMarkerFile() {
|
||||||
QFile runningMarkerFile(getFilePath());
|
QFile runningMarkerFile(getFilePath());
|
||||||
|
|
||||||
|
@ -69,7 +74,7 @@ void RunningMarker::deleteRunningMarkerFile() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString RunningMarker::getFilePath() {
|
QString RunningMarker::getFilePath() const {
|
||||||
return QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + _name;
|
return QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + _name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,11 @@ public:
|
||||||
|
|
||||||
void startRunningMarker();
|
void startRunningMarker();
|
||||||
|
|
||||||
QString getFilePath();
|
QString getFilePath() const;
|
||||||
static QString getMarkerFilePath(QString name);
|
static QString getMarkerFilePath(QString name);
|
||||||
|
|
||||||
|
bool fileExists() const;
|
||||||
|
|
||||||
void writeRunningMarkerFile();
|
void writeRunningMarkerFile();
|
||||||
void deleteRunningMarkerFile();
|
void deleteRunningMarkerFile();
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,15 @@ StoragePointer FileStorage::create(const QString& filename, size_t size, const u
|
||||||
}
|
}
|
||||||
|
|
||||||
FileStorage::FileStorage(const QString& filename) : _file(filename) {
|
FileStorage::FileStorage(const QString& filename) : _file(filename) {
|
||||||
if (_file.open(QFile::ReadOnly)) {
|
bool opened = _file.open(QFile::ReadWrite);
|
||||||
|
if (opened) {
|
||||||
|
_hasWriteAccess = true;
|
||||||
|
} else {
|
||||||
|
_hasWriteAccess = false;
|
||||||
|
opened = _file.open(QFile::ReadOnly);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opened) {
|
||||||
_mapped = _file.map(0, _file.size());
|
_mapped = _file.map(0, _file.size());
|
||||||
if (_mapped) {
|
if (_mapped) {
|
||||||
_valid = true;
|
_valid = true;
|
||||||
|
@ -92,34 +100,3 @@ FileStorage::~FileStorage() {
|
||||||
_file.close();
|
_file.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileStorage::ensureWriteAccess() {
|
|
||||||
if (_hasWriteAccess) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_mapped) {
|
|
||||||
if (!_file.unmap(_mapped)) {
|
|
||||||
throw std::runtime_error("Unable to unmap file");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_file.isOpen()) {
|
|
||||||
_file.close();
|
|
||||||
}
|
|
||||||
_valid = false;
|
|
||||||
_mapped = nullptr;
|
|
||||||
|
|
||||||
if (_file.open(QFile::ReadWrite)) {
|
|
||||||
_mapped = _file.map(0, _file.size());
|
|
||||||
if (_mapped) {
|
|
||||||
_valid = true;
|
|
||||||
_hasWriteAccess = true;
|
|
||||||
} else {
|
|
||||||
qCWarning(storagelogging) << "Failed to map file " << _file.fileName();
|
|
||||||
throw std::runtime_error("Failed to map file");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qCWarning(storagelogging) << "Failed to open file " << _file.fileName();
|
|
||||||
throw std::runtime_error("Failed to open file");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -60,11 +60,10 @@ namespace storage {
|
||||||
FileStorage& operator=(const FileStorage& other) = delete;
|
FileStorage& operator=(const FileStorage& other) = delete;
|
||||||
|
|
||||||
const uint8_t* data() const override { return _mapped; }
|
const uint8_t* data() const override { return _mapped; }
|
||||||
uint8_t* mutableData() override { ensureWriteAccess(); return _mapped; }
|
uint8_t* mutableData() override { return _hasWriteAccess ? _mapped : nullptr; }
|
||||||
size_t size() const override { return _file.size(); }
|
size_t size() const override { return _file.size(); }
|
||||||
operator bool() const override { return _valid; }
|
operator bool() const override { return _valid; }
|
||||||
private:
|
private:
|
||||||
void ensureWriteAccess();
|
|
||||||
|
|
||||||
bool _valid { false };
|
bool _valid { false };
|
||||||
bool _hasWriteAccess { false };
|
bool _hasWriteAccess { false };
|
||||||
|
|
|
@ -44,6 +44,7 @@ function showSetupComplete() {
|
||||||
'<p>Snapshot location set.</p>' +
|
'<p>Snapshot location set.</p>' +
|
||||||
'<p>Press the big red button to take a snap!</p>' +
|
'<p>Press the big red button to take a snap!</p>' +
|
||||||
'</div>';
|
'</div>';
|
||||||
|
document.getElementById("snap-button").disabled = false;
|
||||||
}
|
}
|
||||||
function showSnapshotInstructions() {
|
function showSnapshotInstructions() {
|
||||||
var snapshotImagesDiv = document.getElementById("snapshot-images");
|
var snapshotImagesDiv = document.getElementById("snapshot-images");
|
||||||
|
@ -69,7 +70,6 @@ function login() {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
function clearImages() {
|
function clearImages() {
|
||||||
document.getElementById("snap-button").disabled = false;
|
|
||||||
var snapshotImagesDiv = document.getElementById("snapshot-images");
|
var snapshotImagesDiv = document.getElementById("snapshot-images");
|
||||||
snapshotImagesDiv.classList.remove("snapshotInstructions");
|
snapshotImagesDiv.classList.remove("snapshotInstructions");
|
||||||
while (snapshotImagesDiv.hasChildNodes()) {
|
while (snapshotImagesDiv.hasChildNodes()) {
|
||||||
|
@ -300,7 +300,7 @@ function addImage(image_data, isLoggedIn, canShare, isGifLoading, isShowingPrevi
|
||||||
if (!isGifLoading) {
|
if (!isGifLoading) {
|
||||||
appendShareBar(id, isLoggedIn, canShare, isGif, blastButtonDisabled, hifiButtonDisabled, canBlast);
|
appendShareBar(id, isLoggedIn, canShare, isGif, blastButtonDisabled, hifiButtonDisabled, canBlast);
|
||||||
}
|
}
|
||||||
if (!isGifLoading && !isShowingPreviousImages) {
|
if (!isGifLoading || (isShowingPreviousImages && !image_data.story_id)) {
|
||||||
shareForUrl(id);
|
shareForUrl(id);
|
||||||
}
|
}
|
||||||
if (isShowingPreviousImages && isLoggedIn && image_data.story_id) {
|
if (isShowingPreviousImages && isLoggedIn && image_data.story_id) {
|
||||||
|
@ -650,6 +650,7 @@ window.onload = function () {
|
||||||
shareForUrl("p1");
|
shareForUrl("p1");
|
||||||
appendShareBar("p1", messageOptions.isLoggedIn, messageOptions.canShare, true, false, false, messageOptions.canBlast);
|
appendShareBar("p1", messageOptions.isLoggedIn, messageOptions.canShare, true, false, false, messageOptions.canBlast);
|
||||||
document.getElementById("p1").classList.remove("processingGif");
|
document.getElementById("p1").classList.remove("processingGif");
|
||||||
|
document.getElementById("snap-button").disabled = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
imageCount = message.image_data.length;
|
imageCount = message.image_data.length;
|
||||||
|
@ -688,6 +689,9 @@ function takeSnapshot() {
|
||||||
type: "snapshot",
|
type: "snapshot",
|
||||||
action: "takeSnapshot"
|
action: "takeSnapshot"
|
||||||
}));
|
}));
|
||||||
|
if (document.getElementById('stillAndGif').checked === true) {
|
||||||
|
document.getElementById("snap-button").disabled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function testInBrowser(test) {
|
function testInBrowser(test) {
|
||||||
|
|
|
@ -138,10 +138,10 @@ function onMessage(message) {
|
||||||
isLoggedIn = Account.isLoggedIn();
|
isLoggedIn = Account.isLoggedIn();
|
||||||
if (isLoggedIn) {
|
if (isLoggedIn) {
|
||||||
print('Sharing snapshot with audience "for_url":', message.data);
|
print('Sharing snapshot with audience "for_url":', message.data);
|
||||||
Window.shareSnapshot(message.data, message.href || href);
|
Window.shareSnapshot(message.data, Settings.getValue("previousSnapshotHref"));
|
||||||
} else {
|
} else {
|
||||||
shareAfterLogin = true;
|
shareAfterLogin = true;
|
||||||
snapshotToShareAfterLogin.push({ path: message.data, href: message.href || href });
|
snapshotToShareAfterLogin.push({ path: message.data, href: Settings.getValue("previousSnapshotHref") });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -349,6 +349,7 @@ function takeSnapshot() {
|
||||||
// We will record snapshots based on the starting location. That could change, e.g., when recording a .gif.
|
// We will record snapshots based on the starting location. That could change, e.g., when recording a .gif.
|
||||||
// Even the domainId could change (e.g., if the user falls into a teleporter while recording).
|
// Even the domainId could change (e.g., if the user falls into a teleporter while recording).
|
||||||
href = location.href;
|
href = location.href;
|
||||||
|
Settings.setValue("previousSnapshotHref", href);
|
||||||
domainId = location.domainId;
|
domainId = location.domainId;
|
||||||
Settings.setValue("previousSnapshotDomainID", domainId);
|
Settings.setValue("previousSnapshotDomainID", domainId);
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ const appIcon = path.join(__dirname, '../resources/console.png');
|
||||||
const DELETE_LOG_FILES_OLDER_THAN_X_SECONDS = 60 * 60 * 24 * 7; // 7 Days
|
const DELETE_LOG_FILES_OLDER_THAN_X_SECONDS = 60 * 60 * 24 * 7; // 7 Days
|
||||||
const LOG_FILE_REGEX = /(domain-server|ac-monitor|ac)-.*-std(out|err).txt/;
|
const LOG_FILE_REGEX = /(domain-server|ac-monitor|ac)-.*-std(out|err).txt/;
|
||||||
|
|
||||||
const HOME_CONTENT_URL = "http://cdn.highfidelity.com/content-sets/home-tutorial-RC39.tar.gz";
|
const HOME_CONTENT_URL = "http://cdn.highfidelity.com/content-sets/home-tutorial-RC40.tar.gz";
|
||||||
|
|
||||||
function getBuildInfo() {
|
function getBuildInfo() {
|
||||||
var buildInfoPath = null;
|
var buildInfoPath = null;
|
||||||
|
|
Loading…
Reference in a new issue