]>
Commit | Line | Data |
---|---|---|
1 | From 733f792c6c9d6c850243e794551002358a0b74a5 Mon Sep 17 00:00:00 2001 | |
2 | From: Kostya Shishkov <kostya.shishkov@gmail.com> | |
3 | Date: Wed, 27 Nov 2019 08:22:16 +0100 | |
4 | Subject: [PATCH 3/4] audio: make audio callback a trait instead of a function | |
5 | ||
6 | --- | |
7 | src/sdl/audio.rs | 17 ++++++----------- | |
8 | 1 file changed, 6 insertions(+), 11 deletions(-) | |
9 | ||
10 | diff --git a/src/sdl/audio.rs b/src/sdl/audio.rs | |
11 | index 18a140f..0c2f6cf 100644 | |
12 | --- a/src/sdl/audio.rs | |
13 | +++ b/src/sdl/audio.rs | |
14 | @@ -93,15 +93,16 @@ impl Channels { | |
15 | pub fn count(self) -> c_int { match self { Channels::Mono => 1, Channels::Stereo => 2 } } | |
16 | } | |
17 | ||
18 | -pub type AudioCallback = fn(&mut [u8]); | |
19 | +pub trait AudioCallback { | |
20 | + fn callback(&mut self, out: &mut [u8]); | |
21 | +} | |
22 | ||
23 | -#[derive(Copy)] | |
24 | pub struct DesiredAudioSpec { | |
25 | pub freq: c_int, | |
26 | pub format: AudioFormat, | |
27 | pub channels: Channels, | |
28 | pub samples: u16, | |
29 | - pub callback: AudioCallback, | |
30 | + pub callback: Box<AudioCallback>, | |
31 | } | |
32 | ||
33 | impl DesiredAudioSpec { | |
34 | @@ -123,12 +124,6 @@ impl DesiredAudioSpec { | |
35 | } | |
36 | } | |
37 | ||
38 | -impl Clone for DesiredAudioSpec { | |
39 | - fn clone(&self) -> DesiredAudioSpec { | |
40 | - *self | |
41 | - } | |
42 | -} | |
43 | - | |
44 | #[derive(Copy, Clone)] | |
45 | pub struct ObtainedAudioSpec { | |
46 | pub freq: c_int, | |
47 | @@ -154,9 +149,9 @@ impl ObtainedAudioSpec { | |
48 | ||
49 | extern fn native_callback(userdata: *const c_void, stream: *mut u8, len: c_int) { | |
50 | unsafe { | |
51 | - let callback: Box<AudioCallback> = transmute(userdata); | |
52 | + let mut callback: Box<Box<AudioCallback>> = transmute(userdata); | |
53 | let buffer = transmute((stream, len as usize)); | |
54 | - (*callback)(buffer); | |
55 | + callback.callback(buffer); | |
56 | forget(callback); // Don't free the callback! | |
57 | } | |
58 | } | |
59 | -- | |
60 | 1.7.9.5 | |
61 |