From 727be96686a2c6c5747b26be15933e11c9cab9c6 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 28 Jan 2024 17:55:11 +0100 Subject: clean up some code + subrip support? --- remuxer/src/import/mod.rs | 18 ++++++++++++++---- remuxer/src/lib.rs | 27 +++++++++++++++++++++------ 2 files changed, 35 insertions(+), 10 deletions(-) (limited to 'remuxer/src') diff --git a/remuxer/src/import/mod.rs b/remuxer/src/import/mod.rs index d6fa2d0..e26b575 100644 --- a/remuxer/src/import/mod.rs +++ b/remuxer/src/import/mod.rs @@ -263,6 +263,8 @@ fn import_read_segment(segment: &mut Unflatten) -> Result { mut channels, mut width, mut height, + mut display_width, + mut display_height, mut name, mut fps, mut bit_depth, @@ -270,7 +272,7 @@ fn import_read_segment(segment: &mut Unflatten) -> Result { mut default_duration, ) = ( None, None, None, None, None, None, None, None, None, None, None, - None, None, + None, None, None, None, ); while let Some(Ok(Unflat { children, item, .. })) = children.n() { match item { @@ -302,6 +304,12 @@ fn import_read_segment(segment: &mut Unflatten) -> Result { match item { MatroskaTag::PixelWidth(v) => width = Some(v), MatroskaTag::PixelHeight(v) => height = Some(v), + MatroskaTag::DisplayWidth(v) => { + display_width = Some(v) + } + MatroskaTag::DisplayHeight(v) => { + display_height = Some(v) + } MatroskaTag::FrameRate(v) => fps = Some(v), _ => (), } @@ -313,13 +321,15 @@ fn import_read_segment(segment: &mut Unflatten) -> Result { let track_index = index.unwrap(); let kind = match kind.ok_or(anyhow!("track type required"))? { 1 => SourceTrackKind::Video { - fps: fps.unwrap_or(0.0), // TODO + fps, width: width.unwrap(), height: height.unwrap(), + display_width, + display_height, }, 2 => SourceTrackKind::Audio { - bit_depth: bit_depth.unwrap_or(0) as usize, // TODO - channels: channels.unwrap_or(1), // TODO + bit_depth: bit_depth.map(|x| x as usize), + channels: channels.unwrap_or(1), // TODO sample_rate: sample_rate.unwrap_or(41_100.0), // TODO }, 17 => SourceTrackKind::Subtitles, diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs index 96aeca1..b49dedc 100644 --- a/remuxer/src/lib.rs +++ b/remuxer/src/lib.rs @@ -61,13 +61,25 @@ pub fn ebml_track_entry( SourceTrackKind::Video { width, height, - fps: _, + display_height, + display_width, + fps, } => { els.push(MatroskaTag::TrackType(1)); - els.push(MatroskaTag::Video(Master::Collected(vec![ + let mut props = vec![ MatroskaTag::PixelWidth(width), MatroskaTag::PixelHeight(height), - ]))) + ]; + if let Some(display_width) = display_width { + props.push(MatroskaTag::DisplayWidth(display_width)) + } + if let Some(display_height) = display_height { + props.push(MatroskaTag::DisplayHeight(display_height)) + } + if let Some(fps) = fps { + props.push(MatroskaTag::FrameRate(fps)) + } + els.push(MatroskaTag::Video(Master::Collected(props))) } SourceTrackKind::Audio { channels, @@ -75,11 +87,14 @@ pub fn ebml_track_entry( bit_depth, } => { els.push(MatroskaTag::TrackType(2)); - els.push(MatroskaTag::Audio(Master::Collected(vec![ + let mut props = vec![ MatroskaTag::SamplingFrequency(sample_rate), MatroskaTag::Channels(channels.try_into().unwrap()), - ]))); - els.push(MatroskaTag::BitDepth(bit_depth.try_into().unwrap())); + ]; + if let Some(bit_depth) = bit_depth { + props.push(MatroskaTag::BitDepth(bit_depth.try_into().unwrap())); + } + els.push(MatroskaTag::Audio(Master::Collected(props))); } SourceTrackKind::Subtitles => { els.push(MatroskaTag::TrackType(17)); -- cgit v1.2.3-70-g09d2