summary refs log tree commit diff
path: root/src/tracks.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracks.rs')
-rw-r--r--src/tracks.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/tracks.rs b/src/tracks.rs
new file mode 100644
index 0000000..4d69e12
--- /dev/null
+++ b/src/tracks.rs
@@ -0,0 +1,38 @@
+use std::collections::BTreeMap;
+
+use relm4::SharedState;
+
+pub type StreamIndex = usize;
+
+#[derive(Debug, Clone)]
+pub struct TrackMetadata {
+    pub language: Option<isolang::Language>,
+    pub title: Option<String>,
+}
+
+#[derive(Debug, Clone)]
+pub struct SubtitleTrack {
+    pub metadata: TrackMetadata,
+    pub cues: Vec<SubtitleCue>,
+}
+
+#[derive(Debug, Clone)]
+pub struct SubtitleCue {
+    pub start: gst::ClockTime,
+    pub end: gst::ClockTime,
+    pub text: String,
+}
+
+pub static SUBTITLE_TRACKS: SharedState<BTreeMap<StreamIndex, SubtitleTrack>> = SharedState::new();
+
+impl TrackMetadata {
+    pub fn from_ffmpeg_stream(stream: &ffmpeg::Stream) -> Self {
+        let language_code = stream.metadata().get("language").map(|s| s.to_string());
+        let title = stream.metadata().get("title").map(|s| s.to_string());
+
+        Self {
+            language: language_code.and_then(|code| isolang::Language::from_639_2b(&code)),
+            title,
+        }
+    }
+}