aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/lib.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-04-16 20:06:01 +0200
committermetamuffin <metamuffin@disroot.org>2025-04-16 20:06:01 +0200
commitd26849375c70c795fdf664f9dfea68c273b6d483 (patch)
tree53ad4f0eff3604e80b27ff0abf0438ea6c69d432 /remuxer/src/lib.rs
parent1cd966f7454f052fda6c6c9ae1597479f05e23d9 (diff)
parentcdf95d7b80bd2b78895671da8f462145bb5db522 (diff)
downloadjellything-d26849375c70c795fdf664f9dfea68c273b6d483.tar
jellything-d26849375c70c795fdf664f9dfea68c273b6d483.tar.bz2
jellything-d26849375c70c795fdf664f9dfea68c273b6d483.tar.zst
Merge branch 'rewrite-stream'
Diffstat (limited to 'remuxer/src/lib.rs')
-rw-r--r--remuxer/src/lib.rs66
1 files changed, 30 insertions, 36 deletions
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs
index a98ffad..931d5e6 100644
--- a/remuxer/src/lib.rs
+++ b/remuxer/src/lib.rs
@@ -3,18 +3,22 @@
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 metadata;
+pub mod matroska_to_mpeg4;
pub mod remux;
pub mod seek_index;
pub mod segment_extractor;
pub mod trim_writer;
+pub mod matroska_to_webm;
+use ebml_struct::matroska::TrackEntry;
pub use fragment::write_fragment_into;
-pub use remux::remux_stream_into;
-
-use jellybase::common::{SourceTrack, SourceTrackKind};
use jellymatroska::{Master, MatroskaTag};
+pub use matroska_to_mpeg4::matroska_to_mpeg4;
+pub use remux::remux_stream_into;
pub fn ebml_header(webm: bool) -> MatroskaTag {
MatroskaTag::Ebml(Master::Collected(vec![
@@ -41,66 +45,56 @@ pub fn ebml_segment_info(title: String, duration: f64) -> MatroskaTag {
]))
}
-pub fn ebml_track_entry(
- number: u64,
- uid: u64,
- track: &SourceTrack,
- codec_private: Option<Vec<u8>>,
-) -> MatroskaTag {
+pub fn ebml_track_entry(number: u64, track: &TrackEntry) -> MatroskaTag {
let mut els = vec![
MatroskaTag::TrackNumber(number),
- MatroskaTag::TrackUID(uid),
MatroskaTag::FlagLacing(track.flag_lacing),
MatroskaTag::Language(track.language.clone()),
- MatroskaTag::CodecID(track.codec.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.kind {
- SourceTrackKind::Video {
- width,
- height,
- display_height,
- display_width,
- display_unit,
- fps,
- } => {
+ match track.track_type {
+ 1 => {
+ let video = track.video.as_ref().unwrap();
els.push(MatroskaTag::TrackType(1));
let mut props = vec![
- MatroskaTag::PixelWidth(width),
- MatroskaTag::PixelHeight(height),
+ MatroskaTag::PixelWidth(video.pixel_width),
+ MatroskaTag::PixelHeight(video.pixel_height),
];
- props.push(MatroskaTag::DisplayWidth(display_width.unwrap_or(width)));
- props.push(MatroskaTag::DisplayHeight(display_height.unwrap_or(height)));
- props.push(MatroskaTag::DisplayUnit(display_unit));
- if let Some(fps) = fps {
+ 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)))
}
- SourceTrackKind::Audio {
- channels,
- sample_rate,
- bit_depth,
- } => {
+ 2 => {
+ let audio = track.audio.as_ref().unwrap();
els.push(MatroskaTag::TrackType(2));
let mut props = vec![
- MatroskaTag::SamplingFrequency(sample_rate),
- MatroskaTag::Channels(channels.try_into().unwrap()),
+ MatroskaTag::SamplingFrequency(audio.sampling_frequency),
+ MatroskaTag::Channels(audio.channels),
];
- if let Some(bit_depth) = bit_depth {
+ if let Some(bit_depth) = audio.bit_depth {
props.push(MatroskaTag::BitDepth(bit_depth.try_into().unwrap()));
}
els.push(MatroskaTag::Audio(Master::Collected(props)));
}
- SourceTrackKind::Subtitles => {
+ 17 => {
els.push(MatroskaTag::TrackType(17));
}
+ _ => unreachable!(),
}
- if let Some(d) = &codec_private {
+ if let Some(d) = &track.codec_private {
els.push(MatroskaTag::CodecPrivate(d.clone()));
}
MatroskaTag::TrackEntry(Master::Collected(els))