use alloc::string::String;
use alloc::sync::Arc;
use alloc::vec::Vec;
use broadcast_hls::MediaType;
use transmux::TrackId;
use transmux::DisplayInfo;
use transmux::Sample;
use transmux::TrackSpec;
#[derive(Debug, Clone, PartialEq, Default)]
pub struct VariantPolicy {
pub max_bandwidth: Option<u32>,
pub max_height: Option<u32>,
pub supported_codecs: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct VariantInfo {
pub url: String,
pub bandwidth: u32,
pub average_bandwidth: Option<u32>,
pub resolution: Option<(u32, u32)>,
pub codecs: Option<String>,
pub audio_group: Option<String>,
pub subtitles_group: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct RenditionInfo {
pub media_type: MediaType,
pub group_id: String,
pub name: String,
pub language: Option<String>,
pub default: bool,
pub autoselect: bool,
pub url: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct MasterSelection {
pub variants: Vec<VariantInfo>,
pub chosen: usize,
pub renditions: Vec<RenditionInfo>,
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum Output {
Init(Vec<u8>),
Samples {
track_id: TrackId,
samples: Vec<Sample>,
},
Discontinuity,
EndOfStream,
Tracks(Vec<TrackSpec>),
DisplayChanged {
track_id: TrackId,
pts: Option<i64>,
display: Arc<DisplayInfo>,
},
TrackDropped {
track_id: TrackId,
stream_type: Option<u8>,
},
TrackSkipped {
track_id: Option<TrackId>,
fourcc: String,
reason: String,
},
FragmentDamaged {
id: crate::client::ResourceId,
skipped: usize,
},
Master(MasterSelection),
}