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

View File

@ -1,5 +1,6 @@
/*
* 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
* modification, are permitted provided that the following conditions
@ -85,7 +86,12 @@ public:
// on any thread except m_databaseLoaderThread.
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; }
@ -141,6 +147,7 @@ private:
PRThread* m_databaseLoaderThread;
float m_databaseSampleRate;
mozilla::Atomic<bool> m_databaseLoaded;
};
} // namespace WebCore