diff options
Diffstat (limited to 'remuxer/src/muxers/matroska.rs')
-rw-r--r-- | remuxer/src/muxers/matroska.rs | 51 |
1 files changed, 23 insertions, 28 deletions
diff --git a/remuxer/src/muxers/matroska.rs b/remuxer/src/muxers/matroska.rs index 47210c9..c2f22e7 100644 --- a/remuxer/src/muxers/matroska.rs +++ b/remuxer/src/muxers/matroska.rs @@ -8,15 +8,25 @@ use crate::muxers::FragmentMuxer; use anyhow::Result; use std::io::Write; use winter_ebml::{EbmlHeader, EbmlToVec}; -use winter_matroska::{Cluster, Info, MatroskaFile, Segment, Tracks}; +use winter_matroska::{MatroskaFile, Segment}; + +fn write_fragment_shared(out: &mut dyn Write, mut segment: Segment, webm: bool) -> Result<()> { + segment.info.muxing_app = + concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")).to_string(); + if webm { + if let Some(tracks) = &mut segment.tracks { + for track in &mut tracks.entries { + if let Some(video) = &mut track.video { + video.colour = None; + video.projection = None; + video.display_unit = 0; // pixels + video.display_width = Some(video.pixel_width); + video.display_height = Some(video.pixel_height); + } + } + } + } -fn write_fragment_shared( - out: &mut dyn Write, - info: Info, - tracks: Tracks, - cluster: Cluster, - webm: bool, -) -> Result<()> { let file = MatroskaFile { ebml_header: EbmlHeader { ebml_version: 1, @@ -28,12 +38,7 @@ fn write_fragment_shared( doc_type_read_version: 2, ..Default::default() }, - segment: Segment { - info, - tracks: Some(tracks), - clusters: vec![cluster], - ..Default::default() - }, + segment, }; out.write_all(&file.to_vec())?; Ok(()) @@ -41,23 +46,13 @@ fn write_fragment_shared( pub struct MatroskaFragmentMuxer; impl FragmentMuxer for MatroskaFragmentMuxer { - fn write_fragment( - out: &mut dyn Write, - info: Info, - tracks: Tracks, - cluster: Cluster, - ) -> Result<()> { - write_fragment_shared(out, info, tracks, cluster, false) + fn write_fragment(out: &mut dyn Write, segment: Segment) -> Result<()> { + write_fragment_shared(out, segment, false) } } pub struct WebmFragmentMuxer; impl FragmentMuxer for WebmFragmentMuxer { - fn write_fragment( - out: &mut dyn Write, - info: Info, - tracks: Tracks, - cluster: Cluster, - ) -> Result<()> { - write_fragment_shared(out, info, tracks, cluster, true) + fn write_fragment(out: &mut dyn Write, segment: Segment) -> Result<()> { + write_fragment_shared(out, segment, true) } } |