diff options
author | metamuffin <metamuffin@disroot.org> | 2025-09-13 16:08:42 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-09-13 16:08:42 +0200 |
commit | 044c7e1c75145f1ec9d002b4f6fc4433ff7f9540 (patch) | |
tree | db326c8f2327396ed443a1822936927e7c847494 /remuxer/src/lib.rs | |
parent | e99bde7a00a161ff5dd91eaf1ce546a9d98cef05 (diff) | |
download | jellything-044c7e1c75145f1ec9d002b4f6fc4433ff7f9540.tar jellything-044c7e1c75145f1ec9d002b4f6fc4433ff7f9540.tar.bz2 jellything-044c7e1c75145f1ec9d002b4f6fc4433ff7f9540.tar.zst |
start remuxer crate rewrite; added matroska demuxer and format detection
Diffstat (limited to 'remuxer/src/lib.rs')
-rw-r--r-- | remuxer/src/lib.rs | 100 |
1 files changed, 6 insertions, 94 deletions
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs index bb732d7..041f386 100644 --- a/remuxer/src/lib.rs +++ b/remuxer/src/lib.rs @@ -3,100 +3,12 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -#![feature(random, exit_status_error)] -pub mod extract; -pub mod fragment; -pub mod matroska_to_mpeg4; -pub mod matroska_to_webm; -pub mod metadata; -pub mod remux; -pub mod seek_index; -pub mod segment_extractor; -pub mod trim_writer; -use ebml_struct::matroska::TrackEntry; -pub use fragment::write_fragment_into; -use jellymatroska::{Master, MatroskaTag}; -pub use matroska_to_mpeg4::matroska_to_mpeg4; -pub use remux::remux_stream_into; +pub mod demuxers; +pub mod magic; -pub fn ebml_header(webm: bool) -> MatroskaTag { - MatroskaTag::Ebml(Master::Collected(vec![ - MatroskaTag::EbmlVersion(1), - MatroskaTag::EbmlReadVersion(1), - MatroskaTag::EbmlMaxIdLength(4), - MatroskaTag::EbmlMaxSizeLength(8), - MatroskaTag::DocType(if webm { - "webm".to_string() - } else { - "matroska".to_string() - }), - MatroskaTag::DocTypeVersion(4), - MatroskaTag::DocTypeReadVersion(2), - ])) -} -pub fn ebml_segment_info(title: String, duration: f64) -> MatroskaTag { - MatroskaTag::Info(Master::Collected(vec![ - MatroskaTag::TimestampScale(1_000_000), - MatroskaTag::Duration(duration * 1000.0), - MatroskaTag::Title(title), - MatroskaTag::MuxingApp("jellyremux".to_string()), - MatroskaTag::WritingApp("jellything".to_string()), - ])) -} - -pub fn ebml_track_entry(number: u64, track: &TrackEntry) -> MatroskaTag { - let mut els = vec![ - MatroskaTag::TrackNumber(number), - MatroskaTag::TrackUID(number * 100), // TODO is this ok? - MatroskaTag::FlagLacing(track.flag_lacing), - MatroskaTag::Language(track.language.clone()), - MatroskaTag::CodecID(track.codec_id.clone()), - MatroskaTag::CodecDelay(track.codec_delay), - MatroskaTag::SeekPreRoll(track.seek_pre_roll), - ]; - if let Some(d) = &track.default_duration { - els.push(MatroskaTag::DefaultDuration(*d)); - } - match track.track_type { - 1 => { - let video = track.video.as_ref().unwrap(); - els.push(MatroskaTag::TrackType(1)); - let mut props = vec![ - MatroskaTag::PixelWidth(video.pixel_width), - MatroskaTag::PixelHeight(video.pixel_height), - ]; - props.push(MatroskaTag::DisplayWidth( - video.display_width.unwrap_or(video.pixel_width), - )); - props.push(MatroskaTag::DisplayHeight( - video.display_height.unwrap_or(video.pixel_height), - )); - props.push(MatroskaTag::DisplayUnit(video.display_unit)); - if let Some(fps) = video.frame_rate { - props.push(MatroskaTag::FrameRate(fps)) - } - els.push(MatroskaTag::Video(Master::Collected(props))) - } - 2 => { - let audio = track.audio.as_ref().unwrap(); - els.push(MatroskaTag::TrackType(2)); - let mut props = vec![ - MatroskaTag::SamplingFrequency(audio.sampling_frequency), - MatroskaTag::Channels(audio.channels), - ]; - if let Some(bit_depth) = audio.bit_depth { - props.push(MatroskaTag::BitDepth(bit_depth)); - } - els.push(MatroskaTag::Audio(Master::Collected(props))); - } - 17 => { - els.push(MatroskaTag::TrackType(17)); - } - _ => unreachable!(), - } - if let Some(d) = &track.codec_private { - els.push(MatroskaTag::CodecPrivate(d.clone())); - } - MatroskaTag::TrackEntry(Master::Collected(els)) +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum ContainerFormat { + Matroska, + Webm, } |