Merge pull request #59413 from ellenhp/preinstance-audio-streams

This commit is contained in:
Rémi Verschelde 2022-03-31 18:49:05 +02:00 committed by GitHub
commit 5c0dccace9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 3 deletions

View File

@ -271,6 +271,9 @@ void AudioStreamPlayer2D::_notification(int p_what) {
}
void AudioStreamPlayer2D::set_stream(Ref<AudioStream> p_stream) {
// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();
AudioServer::get_singleton()->lock();
mix_buffer.resize(AudioServer::get_singleton()->thread_get_mix_buffer_size());
@ -284,7 +287,7 @@ void AudioStreamPlayer2D::set_stream(Ref<AudioStream> p_stream) {
if (p_stream.is_valid()) {
stream = p_stream;
stream_playback = p_stream->instance_playback();
stream_playback = pre_instanced_playback;
}
AudioServer::get_singleton()->unlock();

View File

@ -622,6 +622,9 @@ void AudioStreamPlayer3D::_notification(int p_what) {
}
void AudioStreamPlayer3D::set_stream(Ref<AudioStream> p_stream) {
// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();
AudioServer::get_singleton()->lock();
mix_buffer.resize(AudioServer::get_singleton()->thread_get_mix_buffer_size());
@ -635,7 +638,7 @@ void AudioStreamPlayer3D::set_stream(Ref<AudioStream> p_stream) {
if (p_stream.is_valid()) {
stream = p_stream;
stream_playback = p_stream->instance_playback();
stream_playback = pre_instanced_playback;
}
AudioServer::get_singleton()->unlock();

View File

@ -167,6 +167,9 @@ void AudioStreamPlayer::_notification(int p_what) {
}
void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) {
// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();
AudioServer::get_singleton()->lock();
if (active.is_set() && stream_playback.is_valid() && !stream_paused) {
@ -203,7 +206,7 @@ void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) {
if (p_stream.is_valid()) {
stream = p_stream;
stream_playback = p_stream->instance_playback();
stream_playback = pre_instanced_playback;
}
AudioServer::get_singleton()->unlock();