Skip to content

Commit 8946e4e

Browse files
committed
[*] refactor: video-editor
1 parent 8adcbf3 commit 8946e4e

File tree

3 files changed

+29
-40
lines changed

3 files changed

+29
-40
lines changed

lib/video-editor/examples/play_video_track_demo.rs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,33 +37,27 @@ impl VideoViewerApp {
3737

3838
// ===== 添加 Overlay 轨道 1: 图片 overlay (最上层) =====
3939
let overlay_image_path = PathBuf::from("data").join("test.png");
40-
let overlay_image_duration = Duration::from_secs(3);
41-
42-
let overlay_image_metadata = Arc::new(get_metadata(&overlay_image_path).unwrap());
43-
4440
if !overlay_image_path.exists() {
4541
log::warn!(
4642
"Image file not found: {}, using default metadata",
4743
overlay_image_path.display()
4844
);
4945
}
5046

47+
let overlay_image_duration = Duration::from_secs(3);
48+
let overlay_image_metadata = Arc::new(get_metadata(&overlay_image_path).unwrap());
49+
5150
let overlay_image_segment = Arc::new(Segment::new(
5251
Duration::from_secs_f64(0.5), // 从 0.5 秒开始
5352
overlay_image_duration,
5453
overlay_image_metadata.clone(),
5554
));
5655

57-
let overlay_image_inner_track = InnerTrack {
58-
metadata: overlay_image_metadata,
59-
segments: vec![overlay_image_segment],
60-
duration: Duration::from_secs_f64(0.5) + overlay_image_duration,
61-
};
62-
63-
let overlay_image_track = OverlayTrack {
64-
hiding: false,
65-
track: overlay_image_inner_track,
66-
};
56+
let overlay_image_track = OverlayTrack::new(
57+
overlay_image_metadata,
58+
Duration::from_secs_f64(0.5) + overlay_image_duration,
59+
vec![overlay_image_segment],
60+
);
6761

6862
manager.add_track(Track::Overlay(Arc::new(overlay_image_track)));
6963
log::info!(

lib/video-editor/src/tracks/overlay_track.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::{
44
subtitle::{renderer::render_text_to_image, style::SubtitleStyle},
55
traits::{OverlayImageData, VideoFilterConfig},
66
},
7+
metadata::Metadata,
78
tracks::{segment::Segment, track::InnerTrack, video_frame_cache::VideoImage},
89
};
910
use image::RgbaImage;
@@ -16,7 +17,11 @@ pub struct OverlayTrack {
1617
}
1718

1819
impl OverlayTrack {
19-
pub fn new(track: InnerTrack) -> Self {
20+
pub fn new(metadata: Arc<Metadata>, duration: Duration, segments: Vec<Arc<Segment>>) -> Self {
21+
Self::new_with_inner(InnerTrack::new(metadata, duration, segments))
22+
}
23+
24+
pub fn new_with_inner(track: InnerTrack) -> Self {
2025
Self {
2126
hiding: false,
2227
track,

lib/video-editor/src/tracks/track.rs

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ pub struct InnerTrack {
2424
pub segments: Vec<Arc<Segment>>,
2525
}
2626

27+
impl InnerTrack {
28+
pub fn new(metadata: Arc<Metadata>, duration: Duration, segments: Vec<Arc<Segment>>) -> Self {
29+
Self {
30+
metadata,
31+
duration,
32+
segments,
33+
}
34+
}
35+
}
36+
2737
impl Track {
2838
pub fn new<P: AsRef<Path>>(path: P) -> Result<Vec<Track>> {
2939
let path = path.as_ref();
@@ -39,11 +49,7 @@ impl Track {
3949

4050
Ok(vec![Track::Video(Arc::new(VideoTrack {
4151
hiding: false,
42-
track: InnerTrack {
43-
duration,
44-
metadata: metadata.clone(),
45-
segments: vec![video_segment],
46-
},
52+
track: InnerTrack::new(metadata.clone(), duration, vec![video_segment]),
4753
}))])
4854
}
4955
MetadataType::Text => {
@@ -52,11 +58,7 @@ impl Track {
5258

5359
Ok(vec![Track::Overlay(Arc::new(OverlayTrack {
5460
hiding: false,
55-
track: InnerTrack {
56-
duration,
57-
metadata: metadata.clone(),
58-
segments: vec![text_segment],
59-
},
61+
track: InnerTrack::new(metadata.clone(), duration, vec![text_segment]),
6062
}))])
6163
}
6264
MetadataType::Image => {
@@ -65,11 +67,7 @@ impl Track {
6567

6668
Ok(vec![Track::Overlay(Arc::new(OverlayTrack {
6769
hiding: false,
68-
track: InnerTrack {
69-
duration,
70-
metadata: metadata.clone(),
71-
segments: vec![image_segment],
72-
},
70+
track: InnerTrack::new(metadata.clone(), duration, vec![image_segment]),
7371
}))])
7472
}
7573
MetadataType::Audio => {
@@ -78,11 +76,7 @@ impl Track {
7876

7977
Ok(vec![Track::Audio(Arc::new(AudioTrack {
8078
hiding: false,
81-
track: InnerTrack {
82-
duration,
83-
metadata: metadata.clone(),
84-
segments: vec![audio_segment],
85-
},
79+
track: InnerTrack::new(metadata.clone(), duration, vec![audio_segment]),
8680
}))])
8781
}
8882
MetadataType::Subtitle => {
@@ -859,11 +853,7 @@ impl Track {
859853
Ok(vec![Track::Subtitle(Arc::new(SubtitleTrack {
860854
hiding: false,
861855
subtitles: entries,
862-
track: InnerTrack {
863-
duration: total_duration,
864-
metadata,
865-
segments,
866-
},
856+
track: InnerTrack::new(metadata, total_duration, segments),
867857
}))])
868858
}
869859
}

0 commit comments

Comments
 (0)