@@ -218,9 +218,9 @@ impl AudioOutputDevice for DirectSoundDevice {
218218 DataSender {
219219 buffer,
220220 notify_points,
221+ data_buffer : vec ! [ 0.0 ; channel_sample_count * channels_count]
222+ . into_boxed_slice ( ) ,
221223 data_callback,
222- channels_count,
223- channel_sample_count,
224224 is_running : is_running. clone ( ) ,
225225 }
226226 . run_in_thread ( ) ,
@@ -257,9 +257,8 @@ impl Drop for DirectSoundDevice {
257257struct DataSender < C > {
258258 buffer : * mut IDirectSoundBuffer ,
259259 notify_points : [ * mut c_void ; 2 ] ,
260+ data_buffer : Box < [ f32 ] > ,
260261 data_callback : C ,
261- channels_count : usize ,
262- channel_sample_count : usize ,
263262 is_running : Arc < AtomicBool > ,
264263}
265264
@@ -278,27 +277,25 @@ where
278277 }
279278
280279 unsafe fn run_send_loop ( & mut self ) {
281- let mut data_buffer = vec ! [ 0.0 ; self . channel_sample_count * self . channels_count ] ;
282- let device_buffer_half_len_bytes = ( data_buffer. len ( ) * size_of :: < DeviceSample > ( ) ) as DWORD ;
280+ let device_buffer_half_len_bytes =
281+ ( self . data_buffer . len ( ) * size_of :: < DeviceSample > ( ) ) as DWORD ;
283282
284283 while self . is_running . load ( Ordering :: SeqCst ) {
285- ( self . data_callback ) ( & mut data_buffer) ;
284+ ( self . data_callback ) ( & mut self . data_buffer ) ;
286285
287286 // Wait and send.
288287 const WAIT_OBJECT_1 : u32 = WAIT_OBJECT_0 + 1 ;
289288 match WaitForMultipleObjects ( 2 , self . notify_points . as_ptr ( ) , 0 , INFINITE ) {
290- WAIT_OBJECT_0 => self . write (
291- device_buffer_half_len_bytes,
292- device_buffer_half_len_bytes,
293- & data_buffer,
294- ) ,
295- WAIT_OBJECT_1 => self . write ( 0 , device_buffer_half_len_bytes, & data_buffer) ,
289+ WAIT_OBJECT_0 => {
290+ self . write ( device_buffer_half_len_bytes, device_buffer_half_len_bytes)
291+ }
292+ WAIT_OBJECT_1 => self . write ( 0 , device_buffer_half_len_bytes) ,
296293 _ => panic ! ( "Unknown buffer point!" ) ,
297294 }
298295 }
299296 }
300297
301- unsafe fn write ( & self , offset_bytes : DWORD , len_bytes : DWORD , data_buffer : & [ f32 ] ) {
298+ unsafe fn write ( & self , offset_bytes : DWORD , len_bytes : DWORD ) {
302299 let mut size = 0 ;
303300 let mut device_buffer = null_mut ( ) ;
304301 check (
@@ -317,12 +314,15 @@ where
317314
318315 let device_buffer_slice = std:: slice:: from_raw_parts_mut :: < DeviceSample > (
319316 device_buffer as * mut _ ,
320- data_buffer. len ( ) ,
317+ self . data_buffer . len ( ) ,
321318 ) ;
322319
323- debug_assert_eq ! ( size as usize , data_buffer. len( ) * size_of:: <DeviceSample >( ) ) ;
324- debug_assert_eq ! ( device_buffer_slice. len( ) , data_buffer. len( ) ) ;
325- for ( in_sample, out_sample) in data_buffer. iter ( ) . zip ( device_buffer_slice) {
320+ debug_assert_eq ! (
321+ size as usize ,
322+ self . data_buffer. len( ) * size_of:: <DeviceSample >( )
323+ ) ;
324+ debug_assert_eq ! ( device_buffer_slice. len( ) , self . data_buffer. len( ) ) ;
325+ for ( in_sample, out_sample) in self . data_buffer . iter ( ) . zip ( device_buffer_slice) {
326326 * out_sample = ( in_sample * DeviceSample :: MAX as f32 ) as DeviceSample ;
327327 }
328328
0 commit comments