X-Git-Url: https://code.octet-stream.net/m17rt/blobdiff_plain/b3cb86656d6c820a70ceb5ea1a6d602999eb3c85..d610ea7b4224b89b5a1c481697d6c9e8fa7ce87c:/m17codec2/src/lib.rs?ds=sidebyside diff --git a/m17codec2/src/lib.rs b/m17codec2/src/lib.rs index eb45f77..bfd3095 100755 --- a/m17codec2/src/lib.rs +++ b/m17codec2/src/lib.rs @@ -1,9 +1,12 @@ use codec2::{Codec2, Codec2Mode}; - +use cpal::traits::DeviceTrait; +use cpal::traits::HostTrait; +use cpal::traits::StreamTrait; +use cpal::{Sample, SampleFormat, SampleRate}; +use log::debug; use m17app::adapter::StreamAdapter; use m17app::app::TxHandle; use m17core::protocol::LsfFrame; - use std::collections::VecDeque; use std::fs::File; use std::io::Write; @@ -13,13 +16,6 @@ use std::sync::{ Arc, Mutex, }; -use cpal::traits::DeviceTrait; -use cpal::traits::HostTrait; -use cpal::traits::StreamTrait; -use cpal::{Sample, SampleFormat, SampleRate}; - -use log::debug; - pub fn decode_codec2>(data: &[u8], out_path: P) -> Vec { let codec2 = Codec2::new(Codec2Mode::MODE_3200); let var_name = codec2; @@ -54,6 +50,7 @@ impl Codec2Adapter { codec2: Codec2::new(Codec2Mode::MODE_3200), end_tx: None, })), + // TODO: this doesn't work on rpi. Use default_output_device() by default output_card: "default".to_owned(), } } @@ -135,6 +132,8 @@ fn stream_thread(end: Receiver<()>, state: Arc>, output_card .find(|d| d.name().unwrap() == output_card) .unwrap(); let mut configs = device.supported_output_configs().unwrap(); + // TODO: channels == 1 doesn't work on a Raspberry Pi + // make this configurable and support interleaving LRLR stereo samples if using 2 channels let config = configs .find(|c| c.channels() == 1 && c.sample_format() == SampleFormat::I16) .unwrap() @@ -142,7 +141,12 @@ fn stream_thread(end: Receiver<()>, state: Arc>, output_card let stream = device .build_output_stream( &config.into(), - move |data: &mut [i16], _: &cpal::OutputCallbackInfo| { + move |data: &mut [i16], info: &cpal::OutputCallbackInfo| { + debug!( + "callback {:?} playback {:?}", + info.timestamp().callback, + info.timestamp().playback + ); output_cb(data, &state); }, |e| {