Răsfoiți Sursa

Clear DSP buffer after each execution

Kelebek1 2 ani în urmă
părinte
comite
ec6ddaf766

+ 9 - 0
src/audio_core/adsp/apps/audio_renderer/audio_renderer.cpp

@@ -77,6 +77,7 @@ void AudioRenderer::Wait() {
                   "{}, got {}",
                   Message::RenderResponse, msg);
     }
+    PostDSPClearCommandBuffer();
 }
 
 void AudioRenderer::Send(Direction dir, u32 message) {
@@ -96,6 +97,14 @@ void AudioRenderer::SetCommandBuffer(s32 session_id, CpuAddr buffer, u64 size, u
     command_buffers[session_id].reset_buffer = reset;
 }
 
+void AudioRenderer::PostDSPClearCommandBuffer() noexcept {
+    for (auto& buffer : command_buffers) {
+        buffer.buffer = 0;
+        buffer.size = 0;
+        buffer.reset_buffer = false;
+    }
+}
+
 u32 AudioRenderer::GetRemainCommandCount(s32 session_id) const noexcept {
     return command_buffers[session_id].remaining_command_count;
 }

+ 2 - 0
src/audio_core/adsp/apps/audio_renderer/audio_renderer.h

@@ -85,6 +85,8 @@ private:
      */
     void CreateSinkStreams();
 
+    void PostDSPClearCommandBuffer() noexcept;
+
     /// Core system
     Core::System& system;
     /// The output sink the AudioRenderer will send samples to