Add player state module
This commit is contained in:
83
src/player/state.rs
Normal file
83
src/player/state.rs
Normal file
@@ -0,0 +1,83 @@
|
||||
//! Player state management
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum PlaybackState {
|
||||
Stopped,
|
||||
Playing,
|
||||
Paused,
|
||||
}
|
||||
|
||||
impl Default for PlaybackState {
|
||||
fn default() -> Self {
|
||||
Self::Stopped
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct PlayerState {
|
||||
pub playback: PlaybackState,
|
||||
pub current_frame: u64,
|
||||
pub total_frames: u64,
|
||||
pub current_time_ms: u64,
|
||||
pub duration_ms: u64,
|
||||
pub fps: f64,
|
||||
pub volume: f32,
|
||||
pub muted: bool,
|
||||
pub speed: f32,
|
||||
pub show_subtitle: bool,
|
||||
pub show_yolo: bool,
|
||||
pub show_chunks: bool,
|
||||
pub zoom: f32,
|
||||
pub pan_x: f32,
|
||||
pub pan_y: f32,
|
||||
}
|
||||
|
||||
impl Default for PlayerState {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
playback: PlaybackState::Stopped,
|
||||
current_frame: 0,
|
||||
total_frames: 0,
|
||||
current_time_ms: 0,
|
||||
duration_ms: 0,
|
||||
fps: 0.0,
|
||||
volume: 1.0,
|
||||
muted: false,
|
||||
speed: 1.0,
|
||||
show_subtitle: false,
|
||||
show_yolo: false,
|
||||
show_chunks: false,
|
||||
zoom: 1.0,
|
||||
pan_x: 0.0,
|
||||
pan_y: 0.0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PlayerState {
|
||||
pub fn frame_to_time(frame: u64, fps: f64) -> u64 {
|
||||
if fps > 0.0 {
|
||||
((frame as f64 / fps) * 1000.0) as u64
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
pub fn time_to_frame(time_ms: u64, fps: f64) -> u64 {
|
||||
if fps > 0.0 {
|
||||
((time_ms as f64 / 1000.0) * fps) as u64
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
pub fn format_time(ms: u64) -> String {
|
||||
let total_secs = ms / 1000;
|
||||
let hours = total_secs / 3600;
|
||||
let minutes = (total_secs % 3600) / 60;
|
||||
let seconds = total_secs % 60;
|
||||
format!("{:02}:{:02}:{:02}", hours, minutes, seconds)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user