mux: collapse MkvStream::create/create_at into one create(.., Option<&Path>)
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.
This commit is contained in:
+9
-12
@@ -323,17 +323,14 @@ fn extract_mvc_params(data: &[u8]) -> Option<(Vec<u8>, Vec<u8>)> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl MkvStream {
|
impl MkvStream {
|
||||||
/// Create for writing PES frames → MKV container.
|
/// Create for writing PES frames → MKV container. Codec privates come from
|
||||||
/// Codec privates come from title.codec_privates (populated by input stream).
|
/// `title.codec_privates` (populated by the input stream).
|
||||||
pub fn create(writer: Box<dyn WriteSeek + Send>, title: &DiscTitle) -> io::Result<Self> {
|
///
|
||||||
Self::create_at(writer, title, None)
|
/// `output_path` (when known) enables the `--log-level 3` opening-frame
|
||||||
}
|
/// capture to `<output>.opening.bin`; `None` (e.g. an in-memory / stdio sink)
|
||||||
|
/// silently skips the side-file capture — the per-track TrackEntry dump still
|
||||||
/// As [`create`](Self::create), but `output_path` (when known) enables the
|
/// fires either way.
|
||||||
/// `--log-level 3` opening-frame capture to `<output>.opening.bin`. A `None`
|
pub fn create(
|
||||||
/// 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(
|
|
||||||
writer: Box<dyn WriteSeek + Send>,
|
writer: Box<dyn WriteSeek + Send>,
|
||||||
title: &DiscTitle,
|
title: &DiscTitle,
|
||||||
output_path: Option<&std::path::Path>,
|
output_path: Option<&std::path::Path>,
|
||||||
@@ -1409,7 +1406,7 @@ mod tests {
|
|||||||
streams: vec![Stream::Video(dep)],
|
streams: vec![Stream::Video(dep)],
|
||||||
..DiscTitle::empty()
|
..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");
|
.expect("create must succeed, not panic");
|
||||||
assert!(
|
assert!(
|
||||||
s.mvc.is_none(),
|
s.mvc.is_none(),
|
||||||
|
|||||||
+1
-1
@@ -479,7 +479,7 @@ pub fn output(
|
|||||||
IO_BUF_SIZE,
|
IO_BUF_SIZE,
|
||||||
crate::io::WritebackFile::create_with_size_hint(path, title.size_bytes)?,
|
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 } => {
|
StreamUrl::M2ts { ref path } => {
|
||||||
validate_file_path(path, "m2ts")?;
|
validate_file_path(path, "m2ts")?;
|
||||||
|
|||||||
+5
-5
@@ -591,7 +591,7 @@ fn meta_all_stream_types() {
|
|||||||
fn mkvstream_write_finish() {
|
fn mkvstream_write_finish() {
|
||||||
let dt = sample_disc_title();
|
let dt = sample_disc_title();
|
||||||
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = Box::new(Cursor::new(Vec::new()));
|
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = 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
|
// Write some fake PES frames (they won't produce valid MKV content
|
||||||
// since there is no real codec data, but it should not panic)
|
// 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() {
|
fn mkvstream_meta_sets_title() {
|
||||||
let dt = sample_disc_title();
|
let dt = sample_disc_title();
|
||||||
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = Box::new(Cursor::new(Vec::new()));
|
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = 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);
|
let info = PesStream::info(&stream);
|
||||||
assert_eq!(info.playlist, "Test Movie");
|
assert_eq!(info.playlist, "Test Movie");
|
||||||
@@ -656,7 +656,7 @@ fn mkvstream_roundtrip_bdts() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = Box::new(Cursor::new(Vec::new()));
|
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = 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
|
// Write PES frames targeting the audio track
|
||||||
for i in 0..10u8 {
|
for i in 0..10u8 {
|
||||||
@@ -745,7 +745,7 @@ fn mkvstream_meta_preserves_all_streams() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = Box::new(Cursor::new(Vec::new()));
|
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> = 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);
|
let info = PesStream::info(&stream);
|
||||||
assert_eq!(info.streams.len(), 5, "all 5 streams should be preserved");
|
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<dyn libfreemkv::mux::WriteSeek + Send> =
|
let writer: Box<dyn libfreemkv::mux::WriteSeek + Send> =
|
||||||
Box::new(SharedWriter(output2.clone()));
|
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.
|
// Write the ES data (SPS+PPS+IDR) as a keyframe PES frame.
|
||||||
let frame1 = libfreemkv::pes::PesFrame {
|
let frame1 = libfreemkv::pes::PesFrame {
|
||||||
|
|||||||
Reference in New Issue
Block a user