rskit_media/stream/
track.rs1use std::time::Duration;
4
5use serde::{Deserialize, Serialize};
6
7use crate::{
8 audio::{ChannelLayout, SampleRate},
9 codec::{Codec, CodecLevel, CodecProfile},
10 color::{ColorRange, ColorSpace, PixelFormat},
11 spatial::{FrameRate, Resolution},
12 types::TrackKind,
13};
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Track {
18 pub index: usize,
20 pub kind: TrackKind,
22 pub codec: Option<Codec>,
24 pub bitrate: Option<u64>,
26 pub language: Option<String>,
28 pub is_default: bool,
30 pub title: Option<String>,
32 pub duration: Option<Duration>,
34 pub video: Option<VideoTrackInfo>,
36 pub audio: Option<AudioTrackInfo>,
38 pub subtitle: Option<SubtitleTrackInfo>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct VideoTrackInfo {
45 pub resolution: Resolution,
47 pub frame_rate: Option<FrameRate>,
49 pub pixel_format: Option<PixelFormat>,
51 pub rotation: Option<i16>,
53 pub color_space: Option<ColorSpace>,
55 pub color_range: Option<ColorRange>,
57 pub bit_depth: Option<u8>,
59 pub profile: Option<CodecProfile>,
61 pub level: Option<CodecLevel>,
63 pub hdr: Option<HdrMetadata>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct HdrMetadata {
70 pub format: HdrFormat,
72 pub mastering_display: Option<MasteringDisplay>,
74 pub content_light_level: Option<ContentLightLevel>,
76}
77
78#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
80pub enum HdrFormat {
81 Hdr10,
83 Hdr10Plus,
85 DolbyVision,
87 Hlg,
89 Pq,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct MasteringDisplay {
96 pub primaries: Option<[(f64, f64); 3]>,
98 pub white_point: Option<(f64, f64)>,
100 pub luminance: Option<(f64, f64)>,
102}
103
104#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
106pub struct ContentLightLevel {
107 pub max_cll: u32,
109 pub max_fall: u32,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize)]
115pub struct AudioTrackInfo {
116 pub sample_rate: SampleRate,
118 pub channels: ChannelLayout,
120 pub bit_depth: Option<u8>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
126pub struct SubtitleTrackInfo {
127 pub format: String,
129 pub forced: bool,
131}