[webaudio] Keep track of whether the HRTF database has already been loaded.

master
Fedor 2020-10-02 10:34:43 +03:00
parent f5425c8ddb
commit 905c84ec47
2 changed files with 11 additions and 1 deletions

View File

@ -1,5 +1,6 @@
/* /*
* Copyright (C) 2010 Google Inc. All rights reserved. * Copyright (C) 2010 Google Inc. All rights reserved.
* Copyright (C) 2020 M. Straver. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@ -72,6 +73,7 @@ HRTFDatabaseLoader::HRTFDatabaseLoader(float sampleRate)
, m_threadLock("HRTFDatabaseLoader") , m_threadLock("HRTFDatabaseLoader")
, m_databaseLoaderThread(nullptr) , m_databaseLoaderThread(nullptr)
, m_databaseSampleRate(sampleRate) , m_databaseSampleRate(sampleRate)
, m_databaseLoaded(false)
{ {
MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(NS_IsMainThread());
} }
@ -164,6 +166,7 @@ void HRTFDatabaseLoader::load()
MOZ_ASSERT(!m_hrtfDatabase.get(), "Called twice"); MOZ_ASSERT(!m_hrtfDatabase.get(), "Called twice");
// Load the default HRTF database. // Load the default HRTF database.
m_hrtfDatabase = HRTFDatabase::create(m_databaseSampleRate); m_hrtfDatabase = HRTFDatabase::create(m_databaseSampleRate);
m_databaseLoaded = true;
// Notifies the main thread of completion. See loadAsynchronously(). // Notifies the main thread of completion. See loadAsynchronously().
Release(); Release();
} }

View File

@ -1,5 +1,6 @@
/* /*
* Copyright (C) 2010 Google Inc. All rights reserved. * Copyright (C) 2010 Google Inc. All rights reserved.
* Copyright (C) 2020 M. Straver. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@ -85,7 +86,12 @@ public:
// on any thread except m_databaseLoaderThread. // on any thread except m_databaseLoaderThread.
void waitForLoaderThreadCompletion(); void waitForLoaderThreadCompletion();
HRTFDatabase* database() { return m_hrtfDatabase.get(); } HRTFDatabase* database() {
if (!m_databaseLoaded) {
return nullptr;
}
return m_hrtfDatabase.get();
}
float databaseSampleRate() const { return m_databaseSampleRate; } float databaseSampleRate() const { return m_databaseSampleRate; }
@ -141,6 +147,7 @@ private:
PRThread* m_databaseLoaderThread; PRThread* m_databaseLoaderThread;
float m_databaseSampleRate; float m_databaseSampleRate;
mozilla::Atomic<bool> m_databaseLoaded;
}; };
} // namespace WebCore } // namespace WebCore