diff --git a/src/audio_core/device/audio_buffers.h b/src/audio_core/device/audio_buffers.h index 0ee3225bf6..34a396e2dc 100644 --- a/src/audio_core/device/audio_buffers.h +++ b/src/audio_core/device/audio_buffers.h @@ -113,6 +113,8 @@ public: break; } + session.ReleaseBuffer(buffers[index]); + ReleaseBuffer(index, core_timing.GetGlobalTimeNs().count()); buffer_released = true; } diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp index 3655ae8f69..2c41e7f2c8 100644 --- a/src/audio_core/sink/sink_stream.cpp +++ b/src/audio_core/sink/sink_stream.cpp @@ -151,7 +151,17 @@ void SinkStream::ProcessAudioIn(std::span input_buffer, std::size_t n playing_buffer.consumed = true; } - std::memcpy(&last_frame[0], &input_buffer[(frames_written - 1) * frame_size], frame_size_bytes); + if (frames_written > 0) { + std::memcpy(&last_frame[0], &input_buffer[(frames_written - 1) * frame_size], frame_size_bytes); + } + + // update sample counts für audio-ins + { + std::scoped_lock lk{sample_count_lock}; + last_sample_count_update_time = system.CoreTiming().GetGlobalTimeNs(); + min_played_sample_count = max_played_sample_count; + max_played_sample_count += frames_written; + } } void SinkStream::ProcessAudioOutAndRender(std::span output_buffer, std::size_t num_frames) {