use std::path::PathBuf;
use super::metadata::{VideoFormat, VideoQuality};
use super::VideoMetadata;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
pub enum CompressionLevel {
#[serde(rename = "low")]
Low,
#[serde(rename = "medium")]
Medium,
#[serde(rename = "high")]
High,
#[serde(rename = "ultra")]
Ultra,
#[serde(rename = "custom")]
Custom(f32), }
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum ProcessingStatus {
#[serde(rename = "pending")]
Pending,
#[serde(rename = "processing")]
Processing {
progress: u8, current_step: String,
},
#[serde(rename = "completed")]
Completed,
#[serde(rename = "failed")]
Failed { error: String },
#[serde(rename = "cancelled")]
Cancelled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessOptions {
pub quality: VideoQuality,
pub format: VideoFormat,
pub compression: CompressionLevel,
pub extract_audio: bool,
pub extract_metadata: bool,
pub resolution: Option<(u32, u32)>,
pub frame_rate: Option<f64>,
pub hardware_acceleration: bool,
pub threads: Option<u32>,
}
impl Default for ProcessOptions {
fn default() -> Self {
Self {
quality: VideoQuality::Medium,
format: VideoFormat::MP4,
compression: CompressionLevel::Medium,
extract_audio: false,
extract_metadata: true,
resolution: None,
frame_rate: None,
hardware_acceleration: true,
threads: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoData {
pub metadata: VideoMetadata,
pub path: PathBuf,
pub is_processed: bool,
pub job_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoOutput {
pub metadata: VideoMetadata,
pub processed_path: PathBuf,
pub status: ProcessingStatus,
pub processing_time: f64,
pub original_path: PathBuf,
pub audio_path: Option<PathBuf>,
pub extracted_metadata: Option<VideoMetadata>,
}