aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/muxers/matroska.rs
diff options
context:
space:
mode:
Diffstat (limited to 'remuxer/src/muxers/matroska.rs')
-rw-r--r--remuxer/src/muxers/matroska.rs51
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)
}
}