use std::sync::Arc;
use hang::catalog::{AudioConfig, VideoConfig};
use super::Config;
use super::store::SegmentStore;
const DEFAULT_VIDEO_BITRATE: u64 = 2_000_000;
const DEFAULT_AUDIO_BITRATE: u64 = 128_000;
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum Kind {
Video,
Audio,
}
pub struct Rendition {
pub name: String,
pub kind: Kind,
pub bandwidth: u64,
pub width: Option<u32>,
pub height: Option<u32>,
pub codec: String,
pub store: Arc<SegmentStore>,
}
impl Rendition {
pub(super) fn video(name: String, config: &VideoConfig, cfg: &Config) -> Self {
Self {
name,
kind: Kind::Video,
bandwidth: config.bitrate.unwrap_or(DEFAULT_VIDEO_BITRATE),
width: config.coded_width,
height: config.coded_height,
codec: config.codec.to_string(),
store: Arc::new(SegmentStore::new(Kind::Video, cfg)),
}
}
pub(super) fn audio(name: String, config: &AudioConfig, cfg: &Config) -> Self {
Self {
name,
kind: Kind::Audio,
bandwidth: config.bitrate.unwrap_or(DEFAULT_AUDIO_BITRATE),
width: None,
height: None,
codec: config.codec.to_string(),
store: Arc::new(SegmentStore::new(Kind::Audio, cfg)),
}
}
}