vidsage_core/video/
processor.rs1use std::path::PathBuf;
4
5use super::metadata::{VideoFormat, VideoQuality};
6use super::VideoMetadata;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
11pub enum CompressionLevel {
12 #[serde(rename = "low")]
13 Low,
14 #[serde(rename = "medium")]
15 Medium,
16 #[serde(rename = "high")]
17 High,
18 #[serde(rename = "ultra")]
19 Ultra,
20 #[serde(rename = "custom")]
21 Custom(f32), }
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
26pub enum ProcessingStatus {
27 #[serde(rename = "pending")]
28 Pending,
29 #[serde(rename = "processing")]
30 Processing {
31 progress: u8, current_step: String,
33 },
34 #[serde(rename = "completed")]
35 Completed,
36 #[serde(rename = "failed")]
37 Failed { error: String },
38 #[serde(rename = "cancelled")]
39 Cancelled,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct ProcessOptions {
45 pub quality: VideoQuality,
47
48 pub format: VideoFormat,
50
51 pub compression: CompressionLevel,
53
54 pub extract_audio: bool,
56
57 pub extract_metadata: bool,
59
60 pub resolution: Option<(u32, u32)>,
62
63 pub frame_rate: Option<f64>,
65
66 pub hardware_acceleration: bool,
68
69 pub threads: Option<u32>,
71}
72
73impl Default for ProcessOptions {
74 fn default() -> Self {
75 Self {
76 quality: VideoQuality::Medium,
77 format: VideoFormat::MP4,
78 compression: CompressionLevel::Medium,
79 extract_audio: false,
80 extract_metadata: true,
81 resolution: None,
82 frame_rate: None,
83 hardware_acceleration: true,
84 threads: None,
85 }
86 }
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct VideoData {
92 pub metadata: VideoMetadata,
94
95 pub path: PathBuf,
97
98 pub is_processed: bool,
100
101 pub job_id: Option<String>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct VideoOutput {
108 pub metadata: VideoMetadata,
110
111 pub processed_path: PathBuf,
113
114 pub status: ProcessingStatus,
116
117 pub processing_time: f64,
119
120 pub original_path: PathBuf,
122
123 pub audio_path: Option<PathBuf>,
125
126 pub extracted_metadata: Option<VideoMetadata>,
128}