Browse Source

Fix playback in pulseaudio backend (#577)

* Fix playback in pulseaudio backend

* Add comment regarding safety
Johannesd3 3 years ago
parent
commit
ed20f357dc
1 changed files with 5 additions and 1 deletions
  1. 5 1
      playback/src/audio_backend/pulseaudio.rs

+ 5 - 1
playback/src/audio_backend/pulseaudio.rs

@@ -67,7 +67,11 @@ impl Sink for PulseAudioSink {
 
     fn write(&mut self, data: &[i16]) -> io::Result<()> {
         if let Some(s) = &self.s {
-            let d: &[u8] = unsafe { std::mem::transmute(data) };
+            // SAFETY: An i16 consists of two bytes, so that the given slice can be interpreted
+            // as a byte array of double length. Each byte pointer is validly aligned, and so
+            // is the newly created slice.
+            let d: &[u8] =
+                unsafe { std::slice::from_raw_parts(data.as_ptr() as *const u8, data.len() * 2) };
 
             match s.write(d) {
                 Ok(_) => Ok(()),