From 144d1b88b0eac8322b352d85b8dd7fb5fd7c45e6 Mon Sep 17 00:00:00 2001 From: Chun-Min Chang Date: Tue, 9 Jul 2019 19:57:02 +0000 Subject: [PATCH] Bug 1530715 - P19: Replace audio_stream_desc_init by create_stream_description. r=padenot Setting variable by the Result value directly is rustier than setting the variable by a mutual reference with a dummy Result that only contains an error. Differential Revision: https://phabricator.services.mozilla.com/D34052 --HG-- extra : moz-landing-system : lando --- .../cubeb-coreaudio-rs/README_MOZILLA | 2 +- .../cubeb-coreaudio-rs/src/backend/mod.rs | 97 +++++++++---------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/media/libcubeb/cubeb-coreaudio-rs/README_MOZILLA b/media/libcubeb/cubeb-coreaudio-rs/README_MOZILLA index 1699a8442d86..a96642c662e3 100644 --- a/media/libcubeb/cubeb-coreaudio-rs/README_MOZILLA +++ b/media/libcubeb/cubeb-coreaudio-rs/README_MOZILLA @@ -3,4 +3,4 @@ git repository using the update.sh script. The cubeb-coreaudio-rs git repository is: https://github.com/ChunMinChang/cubeb-coreaudio-rs -The git commit ID used was 5409c1978185eabb40336c9a1829fc44900ba11c (2019-06-21 14:40:35 -0700) +The git commit ID used was 8c9a507d8c2bcdb6acb24db7bc651bbb2cea933d (2019-06-21 14:40:43 -0700) diff --git a/media/libcubeb/cubeb-coreaudio-rs/src/backend/mod.rs b/media/libcubeb/cubeb-coreaudio-rs/src/backend/mod.rs index dae5168d219f..4451ba6f3db6 100644 --- a/media/libcubeb/cubeb-coreaudio-rs/src/backend/mod.rs +++ b/media/libcubeb/cubeb-coreaudio-rs/src/backend/mod.rs @@ -256,6 +256,48 @@ fn create_device_info(id: AudioDeviceID, devtype: DeviceType) -> Result Result { + assert!(stream_params.rate() > 0); + assert!(stream_params.channels() > 0); + + let mut desc = AudioStreamBasicDescription::default(); + + match stream_params.format() { + SampleFormat::S16LE => { + desc.mBitsPerChannel = 16; + desc.mFormatFlags = kAudioFormatFlagIsSignedInteger; + } + SampleFormat::S16BE => { + desc.mBitsPerChannel = 16; + desc.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsBigEndian; + } + SampleFormat::Float32LE => { + desc.mBitsPerChannel = 32; + desc.mFormatFlags = kAudioFormatFlagIsFloat; + } + SampleFormat::Float32BE => { + desc.mBitsPerChannel = 32; + desc.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsBigEndian; + } + _ => { + return Err(Error::invalid_format()); + } + } + + desc.mFormatID = kAudioFormatLinearPCM; + desc.mFormatFlags |= kLinearPCMFormatFlagIsPacked; + desc.mSampleRate = f64::from(stream_params.rate()); + desc.mChannelsPerFrame = stream_params.channels(); + + desc.mBytesPerFrame = (desc.mBitsPerChannel / 8) * desc.mChannelsPerFrame; + desc.mFramesPerPacket = 1; + desc.mBytesPerPacket = desc.mBytesPerFrame * desc.mFramesPerPacket; + + desc.mReserved = 0; + + Ok(desc) +} + fn set_volume(unit: AudioUnit, volume: f32) -> Result<()> { assert!(!unit.is_null()); let r = audio_unit_set_parameter( @@ -846,49 +888,6 @@ fn audiounit_get_current_channel_layout(output_unit: AudioUnit) -> ChannelLayout audiounit_convert_channel_layout(layout.as_ref()) } -fn audio_stream_desc_init( - ss: &mut AudioStreamBasicDescription, - stream_params: &StreamParams, -) -> Result<()> { - assert!(stream_params.rate() > 0); - assert!(stream_params.channels() > 0); - - match stream_params.format() { - SampleFormat::S16LE => { - ss.mBitsPerChannel = 16; - ss.mFormatFlags = kAudioFormatFlagIsSignedInteger; - } - SampleFormat::S16BE => { - ss.mBitsPerChannel = 16; - ss.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsBigEndian; - } - SampleFormat::Float32LE => { - ss.mBitsPerChannel = 32; - ss.mFormatFlags = kAudioFormatFlagIsFloat; - } - SampleFormat::Float32BE => { - ss.mBitsPerChannel = 32; - ss.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsBigEndian; - } - _ => { - return Err(Error::invalid_format()); - } - } - - ss.mFormatID = kAudioFormatLinearPCM; - ss.mFormatFlags |= kLinearPCMFormatFlagIsPacked; - ss.mSampleRate = f64::from(stream_params.rate()); - ss.mChannelsPerFrame = stream_params.channels(); - - ss.mBytesPerFrame = (ss.mBitsPerChannel / 8) * ss.mChannelsPerFrame; - ss.mFramesPerPacket = 1; - ss.mBytesPerPacket = ss.mBytesPerFrame * ss.mFramesPerPacket; - - ss.mReserved = 0; - - Ok(()) -} - fn audiounit_set_channel_layout( unit: AudioUnit, side: io_side, @@ -3773,13 +3772,13 @@ impl<'ctx> AudioUnitStream<'ctx> { ); // Set format description according to the input params. - if let Err(r) = audio_stream_desc_init(&mut self.input_desc, &self.input_stream_params) { + self.input_desc = create_stream_description(&self.input_stream_params).map_err(|e| { cubeb_log!( "({:p}) Setting format description for input failed.", self as *const AudioUnitStream ); - return Err(r); - } + e + })?; // Use latency to set buffer size assert_ne!(self.latency_frames, 0); @@ -3887,13 +3886,13 @@ impl<'ctx> AudioUnitStream<'ctx> { self.latency_frames ); - if let Err(r) = audio_stream_desc_init(&mut self.output_desc, &self.output_stream_params) { + self.output_desc = create_stream_description(&self.output_stream_params).map_err(|e| { cubeb_log!( "({:p}) Could not initialize the audio stream description.", self as *const AudioUnitStream ); - return Err(r); - } + e + })?; // Get output device sample rate. let mut output_hw_desc = AudioStreamBasicDescription::default();