use std::sync::{Arc, Mutex};
use anyhow::Result;
use slog::Logger;
use tokio::task::LocalSet;
use audio_to_ts::AudioToTs;
use ts_to_audio::TsToAudio;
pub mod audio_to_ts;
pub mod ts_to_audio;
const USUAL_FRAME_SIZE: usize = 48000 / 50;
const MAX_OPUS_FRAME_SIZE: usize = 1275;
#[derive(Clone)]
pub struct AudioData {
pub a2ts: Arc<Mutex<AudioToTs>>,
pub ts2a: Arc<Mutex<TsToAudio>>,
}
pub(crate) fn start(logger: Logger, local_set: &LocalSet) -> Result<AudioData> {
let sdl_context = sdl2::init().unwrap();
let audio_subsystem = sdl_context.audio().unwrap();
if let Ok(video_subsystem) = sdl_context.video() {
video_subsystem.enable_screen_saver();
}
let ts2a = TsToAudio::new(logger.clone(), audio_subsystem.clone(), local_set)?;
let a2ts = AudioToTs::new(logger.clone(), audio_subsystem, local_set)?;
Ok(AudioData { a2ts, ts2a })
}