From 43c1f9bda0215a4c77a667d626da7ee67cc22455 Mon Sep 17 00:00:00 2001 From: Matthew Jackson <1085847+MattJackson@users.noreply.github.com> Date: Fri, 17 Jul 2026 21:31:29 -0700 Subject: [PATCH] mux: collapse MkvStream::create/create_at into one create(.., Option<&Path>) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One method per action (CLAUDE.md), not a foo_with_X pair — create_at was the real constructor and create was a None wrapper. Callers pass Option<&Path> directly. --- src/mux/mkvstream.rs | 21 +++++++++------------ src/mux/resolve.rs | 2 +- tests/streams.rs | 10 +++++----- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/mux/mkvstream.rs b/src/mux/mkvstream.rs index 6eec17e..28462ab 100644 --- a/src/mux/mkvstream.rs +++ b/src/mux/mkvstream.rs @@ -323,17 +323,14 @@ fn extract_mvc_params(data: &[u8]) -> Option<(Vec, Vec)> { } impl MkvStream { - /// Create for writing PES frames → MKV container. - /// Codec privates come from title.codec_privates (populated by input stream). - pub fn create(writer: Box, title: &DiscTitle) -> io::Result { - Self::create_at(writer, title, None) - } - - /// As [`create`](Self::create), but `output_path` (when known) enables the - /// `--log-level 3` opening-frame capture to `.opening.bin`. A `None` - /// path (e.g. an in-memory / stdio sink) silently skips the side-file - /// capture; the per-track TrackEntry dump still fires. - pub fn create_at( + /// Create for writing PES frames → MKV container. Codec privates come from + /// `title.codec_privates` (populated by the input stream). + /// + /// `output_path` (when known) enables the `--log-level 3` opening-frame + /// capture to `.opening.bin`; `None` (e.g. an in-memory / stdio sink) + /// silently skips the side-file capture — the per-track TrackEntry dump still + /// fires either way. + pub fn create( writer: Box, title: &DiscTitle, output_path: Option<&std::path::Path>, @@ -1409,7 +1406,7 @@ mod tests { streams: vec![Stream::Video(dep)], ..DiscTitle::empty() }; - let s = MkvStream::create(Box::new(Cursor::new(Vec::new())), &title) + let s = MkvStream::create(Box::new(Cursor::new(Vec::new())), &title, None) .expect("create must succeed, not panic"); assert!( s.mvc.is_none(), diff --git a/src/mux/resolve.rs b/src/mux/resolve.rs index 64d49fd..783ede5 100644 --- a/src/mux/resolve.rs +++ b/src/mux/resolve.rs @@ -479,7 +479,7 @@ pub fn output( IO_BUF_SIZE, crate::io::WritebackFile::create_with_size_hint(path, title.size_bytes)?, )); - Ok(Box::new(MkvStream::create_at(writer, title, Some(path))?)) + Ok(Box::new(MkvStream::create(writer, title, Some(path))?)) } StreamUrl::M2ts { ref path } => { validate_file_path(path, "m2ts")?; diff --git a/tests/streams.rs b/tests/streams.rs index 8597daf..d9edc2f 100644 --- a/tests/streams.rs +++ b/tests/streams.rs @@ -591,7 +591,7 @@ fn meta_all_stream_types() { fn mkvstream_write_finish() { let dt = sample_disc_title(); let writer: Box = Box::new(Cursor::new(Vec::new())); - let mut stream = MkvStream::create(writer, &dt).unwrap(); + let mut stream = MkvStream::create(writer, &dt, None).unwrap(); // Write some fake PES frames (they won't produce valid MKV content // since there is no real codec data, but it should not panic) @@ -616,7 +616,7 @@ fn mkvstream_write_finish() { fn mkvstream_meta_sets_title() { let dt = sample_disc_title(); let writer: Box = Box::new(Cursor::new(Vec::new())); - let stream = MkvStream::create(writer, &dt).unwrap(); + let stream = MkvStream::create(writer, &dt, None).unwrap(); let info = PesStream::info(&stream); assert_eq!(info.playlist, "Test Movie"); @@ -656,7 +656,7 @@ fn mkvstream_roundtrip_bdts() { }; let writer: Box = Box::new(Cursor::new(Vec::new())); - let mut stream = MkvStream::create(writer, &dt).unwrap(); + let mut stream = MkvStream::create(writer, &dt, None).unwrap(); // Write PES frames targeting the audio track for i in 0..10u8 { @@ -745,7 +745,7 @@ fn mkvstream_meta_preserves_all_streams() { }; let writer: Box = Box::new(Cursor::new(Vec::new())); - let stream = MkvStream::create(writer, &dt).unwrap(); + let stream = MkvStream::create(writer, &dt, None).unwrap(); let info = PesStream::info(&stream); assert_eq!(info.streams.len(), 5, "all 5 streams should be preserved"); @@ -856,7 +856,7 @@ fn mkvstream_e2e_h264_produces_valid_mkv() { let writer: Box = Box::new(SharedWriter(output2.clone())); - let mut stream2 = MkvStream::create(writer, &dt).unwrap(); + let mut stream2 = MkvStream::create(writer, &dt, None).unwrap(); // Write the ES data (SPS+PPS+IDR) as a keyframe PES frame. let frame1 = libfreemkv::pes::PesFrame {