use fframes::MediaProvider;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum PlayerBackend {
#[default]
Auto,
#[cfg(feature = "metal")]
Metal,
#[cfg(feature = "vulkan")]
Vulkan,
Cpu,
}
#[derive(Debug, Clone)]
pub struct PlayerOptions<'a, 'media> {
pub media: Option<&'media dyn MediaProvider<'media>>,
pub load_system_fonts: bool,
pub default_font: &'a str,
pub title: &'a str,
pub window_size: Option<(u32, u32)>,
pub backend: PlayerBackend,
pub autoplay: bool,
pub looping: bool,
pub start_frame: usize,
pub audio: bool,
pub render_threads: Option<usize>,
pub prefetch_frames: usize,
pub audio_mix: fframes::AudioMixOptions,
}
impl Default for PlayerOptions<'_, '_> {
fn default() -> Self {
Self {
media: None,
load_system_fonts: false,
default_font: "Arial",
title: "fframes",
window_size: None,
backend: PlayerBackend::Auto,
autoplay: true,
looping: true,
start_frame: 0,
audio: true,
render_threads: None,
prefetch_frames: 12,
audio_mix: Default::default(),
}
}
}
impl PlayerOptions<'_, '_> {
pub(crate) fn render_threads(&self) -> usize {
self.render_threads
.unwrap_or_else(|| (fframes::get_thread_count() / 2).clamp(1, 8))
.max(1)
}
}