소스 검색

On stop write any chunk(s) left in the period buffer

That should prevent a possible sudden stop
sniperrifle2004 5 년 전
부모
커밋
a68dfa0287
1개의 변경된 파일8개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 1
      playback/src/audio_backend/alsa.rs

+ 8 - 1
playback/src/audio_backend/alsa.rs

@@ -107,7 +107,14 @@ impl Sink for AlsaSink {
 
     fn stop(&mut self) -> io::Result<()> {
         {
-            let pcm = self.pcm.as_ref().unwrap();
+            let pcm = self.pcm.as_mut().unwrap();
+            // Write any leftover data in the period buffer
+            // before draining the actual buffer
+            let io = pcm.io_i16().unwrap();
+            match io.writei(&self.buffer[..self.buffered_data]) {
+                Ok(_) => (),
+                Err(err) => pcm.try_recover(err, false).unwrap(),
+            }
             pcm.drain().unwrap();
         }
         self.pcm = None;