Rebase off new alsa-rs impl

This commit is contained in:
Richard Dodd 2020-04-15 18:41:40 +01:00
parent 608d23adc6
commit 86079e6439
1 changed files with 6 additions and 3 deletions

View File

@ -8,7 +8,7 @@ use crate::{
StreamConfig, StreamError, SupportedStreamConfig, SupportedStreamConfigRange, StreamConfig, StreamError, SupportedStreamConfig, SupportedStreamConfigRange,
SupportedStreamConfigsError, SupportedStreamConfigsError,
}; };
use std::cmp; use std::{cmp, mem};
use std::sync::Arc; use std::sync::Arc;
use std::thread::{self, JoinHandle}; use std::thread::{self, JoinHandle};
use std::vec::IntoIter as VecIntoIter; use std::vec::IntoIter as VecIntoIter;
@ -775,7 +775,7 @@ fn set_hw_params_from_format<'a>(
config: &StreamConfig, config: &StreamConfig,
sample_format: SampleFormat, sample_format: SampleFormat,
) -> Result<alsa::pcm::HwParams<'a>, BackendSpecificError> { ) -> Result<alsa::pcm::HwParams<'a>, BackendSpecificError> {
let hw_params = alsa::pcm::HwParams::any(pcm_handle)?; let mut hw_params = alsa::pcm::HwParams::any(pcm_handle)?;
hw_params.set_access(alsa::pcm::Access::RWInterleaved)?; hw_params.set_access(alsa::pcm::Access::RWInterleaved)?;
let sample_format = if cfg!(target_endian = "big") { let sample_format = if cfg!(target_endian = "big") {
@ -797,7 +797,10 @@ fn set_hw_params_from_format<'a>(
hw_params.set_channels(config.channels as u32)?; hw_params.set_channels(config.channels as u32)?;
// If this isn't set manually a overlarge buffer may be used causing audio delay // If this isn't set manually a overlarge buffer may be used causing audio delay
hw_params.set_buffer_time_near(100_000, alsa::ValueOr::Nearest)?; let mut hw_params_copy = hw_params.clone();
if let Err(_) = hw_params.set_buffer_time_near(100_000, alsa::ValueOr::Nearest) {
mem::swap(&mut hw_params_copy, &mut hw_params);
}
pcm_handle.hw_params(&hw_params)?; pcm_handle.hw_params(&hw_params)?;