Skip to main content

nominal_api/conjure/objects/datasource/
video_segments_metadata.rs

1/// Segment metadata for video files.
2/// Lightweight version that excludes bounds and RID since those are stored elsewhere.
3#[derive(
4    Debug,
5    Clone,
6    conjure_object::serde::Serialize,
7    conjure_object::serde::Deserialize,
8    conjure_object::private::DeriveWith,
9    Copy
10)]
11#[serde(crate = "conjure_object::serde")]
12#[derive_with(PartialEq, Eq, PartialOrd, Ord, Hash)]
13#[conjure_object::private::staged_builder::staged_builder]
14#[builder(crate = conjure_object::private::staged_builder, update, inline)]
15pub struct VideoSegmentsMetadata {
16    #[serde(rename = "numFrames")]
17    num_frames: i32,
18    #[serde(rename = "numSegments")]
19    num_segments: i32,
20    #[serde(rename = "scaleFactor")]
21    #[derive_with(with = conjure_object::private::DoubleWrapper)]
22    scale_factor: f64,
23    #[serde(rename = "mediaDurationSeconds")]
24    #[derive_with(with = conjure_object::private::DoubleWrapper)]
25    media_duration_seconds: f64,
26    #[serde(rename = "mediaFrameRate")]
27    #[derive_with(with = conjure_object::private::DoubleWrapper)]
28    media_frame_rate: f64,
29}
30impl VideoSegmentsMetadata {
31    /// Total number of frames across all segments.
32    #[inline]
33    pub fn num_frames(&self) -> i32 {
34        self.num_frames
35    }
36    /// Number of segments the video was split into.
37    #[inline]
38    pub fn num_segments(&self) -> i32 {
39        self.num_segments
40    }
41    /// Scale factor applied to timestamps during segmentation.
42    #[inline]
43    pub fn scale_factor(&self) -> f64 {
44        self.scale_factor
45    }
46    /// Total duration of the video in seconds.
47    #[inline]
48    pub fn media_duration_seconds(&self) -> f64 {
49        self.media_duration_seconds
50    }
51    /// Average frame rate (FPS) calculated as total frames / duration.
52    #[inline]
53    pub fn media_frame_rate(&self) -> f64 {
54        self.media_frame_rate
55    }
56}