From 9dab9efc3838bf1e04393d18d618290b241563b3 Mon Sep 17 00:00:00 2001 From: Mike Solar Date: Sat, 29 Aug 2026 19:51:59 +0800 Subject: [PATCH] codec: carry codec-frame overflow across audio chunk boundaries retrieve_audio_to decodes whole codec frames but copies only the part inside the requested chunk; the tail of the frame crossing the chunk end (up to 1023 samples for AAC) was consumed by the decoder and lost, so the next chunk started with a hole. On the playback grid (1920 samples at 25fps/48kHz) the hole cycles 128..896 samples and hits 7 of 8 chunk starts -- the heavy stutter/noise heard during playback. Keep the overflow (decode and resampler-flush tails) in a per-session carry buffer and serve it at the start of the next contiguous chunk; clear it on seek, format change and chunk failure. Also make seek() actually drop the cached resampler as its comment claimed. Verified sample-exact: chunked decode of a 440Hz tone now matches a one-shot decode bit for bit, and chunked renders of real media line up with the ffmpeg CLI reference at correlation 1.0 / drift 0. Adds a regression test (playback_sized_chunks_match_oneshot_sample_exact) with a new tone fixture -- demo.mp4's audio is -90dB digital silence and cannot expose the holes -- plus a render_audio_wav example used to diagnose chunk-boundary artifacts offline. --- crates/oak-app/tests/tone48k.mp4 | Bin 0 -> 130665 bytes crates/oak-codec/src/ffmpeg.rs | 103 +++++++++++++++++- crates/oak-codec/src/realmedia_tests.rs | 80 ++++++++++++++ .../oak-render/examples/render_audio_wav.rs | 92 ++++++++++++++++ 4 files changed, 270 insertions(+), 5 deletions(-) create mode 100644 crates/oak-app/tests/tone48k.mp4 create mode 100644 crates/oak-render/examples/render_audio_wav.rs diff --git a/crates/oak-app/tests/tone48k.mp4 b/crates/oak-app/tests/tone48k.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..bd7e5c4e46d203a02dd5ee63144f73b1ee021319 GIT binary patch literal 130665 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


*H{TiPCb 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 BjVJ&B literal 0 HcmV?d00001 diff --git a/crates/oak-codec/src/ffmpeg.rs b/crates/oak-codec/src/ffmpeg.rs index d99c18f95..66c182eba 100644 --- a/crates/oak-codec/src/ffmpeg.rs +++ b/crates/oak-codec/src/ffmpeg.rs @@ -544,6 +544,19 @@ struct AudioDecodeState { /// continue without re-seeking — skipping the per-chunk decoder flush /// and resampler reset that cause boundary artifacts (pops/clicks). contiguous_end_sample: Option, + /// Tail of the last decoded codec frame that fell PAST the previous + /// chunk's end, interleaved in the chunk's destination format; + /// `carry_start` is the output-sample index `carry[0]` belongs to and + /// `carry_format` the `(sample_rate, channel_layout)` it was rendered + /// for. The decoder consumes whole codec frames, so without this + /// carry the overflow (up to one codec frame — 1024 samples for AAC) + /// would be lost and every chunk whose end does not align with the + /// codec frame grid would start with a hole (a periodic stutter). + /// Served at the start of the next contiguous chunk; cleared on + /// seek, on format change, and on chunk failure. + carry: Vec, + carry_start: i64, + carry_format: (u32, u64), } /// A swresample conversion context. @@ -665,6 +678,9 @@ impl DecoderState { Some(AudioDecodeState { resampler: None, contiguous_end_sample: None, + carry: Vec::new(), + carry_start: 0, + carry_format: (0, 0), }) } else { None @@ -816,9 +832,15 @@ impl DecoderState { } self.eof = false; // Any seek breaks audio continuity (decoder flush + resampler - // reset): the next audio chunk must not skip its own seek. + // reset): the next audio chunk must not skip its own seek, the + // carried overflow belongs to the pre-seek position, and the + // cached resampler's internal state is stale — drop it so a + // post-seek decode is identical to a fresh one (reusing it + // measurably shifted the output). if let Some(a) = &mut self.audio { a.contiguous_end_sample = None; + a.carry.clear(); + a.resampler = None; } Ok(()) } @@ -1193,6 +1215,30 @@ impl DecoderState { self.seek(start_ts)?; } + // Serve the overflow tail carried over from the previous chunk: + // it belongs exactly at this chunk's start (the anchored grid + // makes positions exact). A stale or format-mismatched carry is + // discarded (a pre-seek carry was already cleared by seek()). + let mut carried_frames: i64 = 0; + { + let a = self.audio.as_mut().expect("audio session"); + let valid = contiguous + && a.carry_format == (sample_rate as u32, channel_layout) + && a.carry_start == start_sample; + if valid && !a.carry.is_empty() { + let dest_frames = dest.len() / dst_channels; + let n_frames = (a.carry.len() / dst_channels).min(dest_frames); + dest[..n_frames * dst_channels].copy_from_slice(&a.carry[..n_frames * dst_channels]); + carried_frames = n_frames as i64; + // A chunk shorter than the carry (degenerate grid) keeps + // the remainder for the next chunk. + a.carry.drain(..n_frames * dst_channels); + a.carry_start += n_frames as i64; + } else { + a.carry.clear(); + } + } + // The fill+decode+flush body runs in a closure so the success path // can record the chunk's end sample (continuity) and an error path // can clear it (the decoder/resampler position is unknown after a @@ -1216,8 +1262,18 @@ impl DecoderState { }; let stream_time_base = self.stream_time_base; - let mut next_sample: Option = None; + let mut next_sample: Option = if carried_frames > 0 { + Some(start_sample + carried_frames) + } else { + None + }; let dest_frames = (dest.len() / dst_channels) as i64; + // Overflow past this chunk's end (see AudioDecodeState::carry): + // the decoder consumes whole codec frames, so the tail of the + // last frame crossing the chunk end would otherwise be lost + // and the next chunk would start with a hole. + let mut new_carry: Vec = Vec::new(); + let mut new_carry_start: i64 = start_sample + dest_frames; while let Some(frame) = self.next_frame()? { let DecodedFrame::Audio(audio) = frame else { @@ -1251,6 +1307,22 @@ impl DecoderState { } } } + if offset + chunk_samples > dest_frames { + let inside = (dest_frames - offset).clamp(0, chunk_samples) as usize; + let pos = frame_start + inside as i64; + if !new_carry.is_empty() + && pos != new_carry_start + (new_carry.len() / dst_channels) as i64 + { + // Non-adjacent overflow (should not happen): keep + // only the latest contiguous run. + new_carry.clear(); + new_carry_start = pos; + } + if new_carry.is_empty() { + new_carry_start = pos; + } + new_carry.extend_from_slice(&converted[inside * dst_channels..]); + } next_sample = Some(frame_start + chunk_samples); if offset + chunk_samples >= dest_frames { break; @@ -1289,13 +1361,33 @@ impl DecoderState { } } } + if offset + chunk_samples > dest_frames { + let inside = (dest_frames - offset).clamp(0, chunk_samples) as usize; + let pos = frame_start + inside as i64; + if !new_carry.is_empty() + && pos != new_carry_start + (new_carry.len() / dst_channels) as i64 + { + new_carry.clear(); + new_carry_start = pos; + } + if new_carry.is_empty() { + new_carry_start = pos; + } + new_carry.extend_from_slice(&flush[inside * dst_channels..]); + } } } // Record the end sample: the next chunk starting exactly here - // continues without a seek. - self.audio.as_mut().expect("audio session").contiguous_end_sample = - Some(start_sample + dest_frames); + // continues without a seek — and is served the carried overflow + // first (see the chunk entry above). + { + let a = self.audio.as_mut().expect("audio session"); + a.carry = new_carry; + a.carry_start = new_carry_start; + a.carry_format = (sample_rate as u32, channel_layout); + a.contiguous_end_sample = Some(start_sample + dest_frames); + } Ok(RetrieveAudioStatus::Success) })(); @@ -1307,6 +1399,7 @@ impl DecoderState { // unknown: force a fresh seek on the next chunk. if let Some(a) = &mut self.audio { a.contiguous_end_sample = None; + a.carry.clear(); } Err(e) } diff --git a/crates/oak-codec/src/realmedia_tests.rs b/crates/oak-codec/src/realmedia_tests.rs index e9c8e76a0..a7400b5eb 100644 --- a/crates/oak-codec/src/realmedia_tests.rs +++ b/crates/oak-codec/src/realmedia_tests.rs @@ -258,6 +258,86 @@ fn contiguous_audio_chunks_skip_seek_and_match_oneshot() { ); } +/// Playback-shaped chunks (one 25 fps frame = 1920 samples at 48 kHz) tile +/// the AAC 1024-sample grid badly: the codec frame crossing each chunk end +/// leaves a 128..896-sample tail past the chunk, and because the decoder +/// has already consumed that frame the next chunk used to start with a +/// hole of exactly that size (7 of 8 chunks — the periodic stutter). The +/// overflow carry (`AudioDecodeState::carry`) must make chunked decoding +/// sample-exact against a one-shot decode of the same span. The fixture is +/// a continuous 440 Hz tone (demo.mp4's audio is digital silence and +/// cannot expose the holes). +#[test] +fn playback_sized_chunks_match_oneshot_sample_exact() { + let d = FFmpegDecoder::new(); + let tone = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../oak-app/tests/tone48k.mp4"); + let s = CodecStream::with_block(tone.to_string_lossy().into_owned(), 0, None); + d.open(&s).expect("open tone audio stream"); + + const CHUNK: usize = 1920; // one 25 fps frame at 48 kHz + const CHUNKS: usize = 175; // 7 seconds (the tone is 8 s) + let mut chunked = Vec::with_capacity(CHUNK * CHUNKS * 2); + for i in 0..CHUNKS as i64 { + let mut dest = vec![0f32; CHUNK * 2]; + d.retrieve_audio( + &mut dest, + &TimeRange::new(Rational::new(i, 25), Rational::new(i + 1, 25)), + 48000, + 0x3, + ) + .expect("playback-sized chunk"); + chunked.extend_from_slice(&dest); + } + + // Guard against a vacuous pass on silent media: the span must + // contain real content. + let peak = chunked.iter().fold(0.0f32, |a, &v| a.max(v.abs())); + assert!(peak > 0.05, "tone span is unexpectedly quiet"); + + // A separate fresh decoder: both paths decode the span straight from + // a seek to 0, so the only tolerated difference is the chunking + // itself (none — the carry makes them sample-exact). NOTE: decoding + // on the SAME decoder after a seek is NOT bit-identical to a fresh + // decode (libavcodec/demuxer priming state survives avcodec_flush; + // ~1e-2 wobble, inaudible) — a separate pre-existing quirk, not what + // this test guards. + let d2 = FFmpegDecoder::new(); + let s2 = CodecStream::with_block(tone.to_string_lossy().into_owned(), 0, None); + d2.open(&s2).expect("open tone audio stream (oneshot)"); + let mut oneshot = vec![0f32; CHUNK * CHUNKS * 2]; + d2.retrieve_audio( + &mut oneshot, + &TimeRange::new(Rational::new(0, 1), Rational::new(7, 1)), + 48000, + 0x3, + ) + .expect("oneshot [0,7)"); + + let mut max_diff = 0.0f32; + let mut worst: Vec<(usize, f32)> = Vec::new(); + for (i, (a, b)) in chunked.iter().zip(oneshot.iter()).enumerate() { + let d = (a - b).abs(); + max_diff = max_diff.max(d); + if d > 1e-6 { + worst.push((i, d)); + } + } + if !worst.is_empty() { + worst.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap()); + let positions: Vec = worst + .iter() + .take(20) + .map(|(i, d)| format!("{}(chunk {},+{},{:.4})", i, i / (CHUNK * 2), (i / 2) % CHUNK, d)) + .collect(); + eprintln!("diffs>1e-6: {} total; worst: {}", worst.len(), positions.join(" ")); + } + assert!( + max_diff < 1e-6, + "playback-sized chunks diverge from one-shot decode (max diff {max_diff}); \ + the chunk-end overflow carry is dropping samples" + ); +} + #[test] fn encode_h264_roundtrip_to_tmp() { let out = std::env::temp_dir().join(format!("oakcodec_roundtrip_{}.mp4", std::process::id())); diff --git a/crates/oak-render/examples/render_audio_wav.rs b/crates/oak-render/examples/render_audio_wav.rs new file mode 100644 index 000000000..1549363c4 --- /dev/null +++ b/crates/oak-render/examples/render_audio_wav.rs @@ -0,0 +1,92 @@ +// Temporary diagnostic: render a media file's audio exactly like the +// playback prefetch does (one sequence frame per chunk through +// `eval::render_audio_samples`) and write the result as a PCM s16 WAV, +// so render-side artifacts can be analyzed offline. +// +// Usage: render_audio_wav [fps] + +use oak_core::{Rational, TimeRange}; +use oak_render::eval::render_audio_samples; +use oak_render::ticket::{AudioTicketParams, MontageClip, TicketPayload}; + +fn main() { + let args: Vec = std::env::args().collect(); + if args.len() < 6 { + eprintln!("usage: render_audio_wav [fps]"); + std::process::exit(64); + } + let media = &args[1]; + let stream_index: i32 = args[2].parse().unwrap(); + let start_sec: f64 = args[3].parse().unwrap(); + let end_sec: f64 = args[4].parse().unwrap(); + let out_path = &args[5]; + let fps: i64 = if args.len() > 6 { args[6].parse().unwrap() } else { 25 }; + + let sample_rate = 48000i32; + let channel_layout = 0x3u64; // stereo + let channels = 2usize; + + let start_frame = (start_sec * fps as f64).round() as i64; + let end_frame = (end_sec * fps as f64).round() as i64; + + let montage = vec![MontageClip { + filename: media.clone(), + stream_index, + in_time: Rational::new(start_frame, fps), + out_time: Rational::new(end_frame, fps), + media_in: Rational::new(0, 1), + gain: 1.0, + effects: Vec::new(), + }]; + + let mut pcm: Vec = Vec::new(); + for f in start_frame..end_frame { + let range = TimeRange::new(Rational::new(f, fps), Rational::new(f + 1, fps)); + let params = AudioTicketParams { + viewer: 1, + range, + sample_rate, + channel_layout, + montage: montage.clone(), + }; + match render_audio_samples(¶ms) { + Ok(TicketPayload::Audio(samples)) => { + for s in &samples.samples { + pcm.push((s.clamp(-1.0, 1.0) * 32767.0) as i16); + } + } + other => { + eprintln!("frame {f}: render failed: {:?}", other.is_err()); + let frames = ((sample_rate as f64) / fps as f64).round() as usize; + pcm.extend(std::iter::repeat(0i16).take(frames * channels)); + } + } + } + + // Minimal 16-bit PCM WAV. + let data_len = (pcm.len() * 2) as u32; + let mut w = Vec::with_capacity(44 + data_len as usize); + w.extend_from_slice(b"RIFF"); + w.extend_from_slice(&(36 + data_len).to_le_bytes()); + w.extend_from_slice(b"WAVEfmt "); + w.extend_from_slice(&16u32.to_le_bytes()); + w.extend_from_slice(&1u16.to_le_bytes()); // PCM + w.extend_from_slice(&(channels as u16).to_le_bytes()); + w.extend_from_slice(&(sample_rate as u32).to_le_bytes()); + w.extend_from_slice(&(sample_rate as u32 * channels as u32 * 2).to_le_bytes()); + w.extend_from_slice(&(channels as u16 * 2).to_le_bytes()); + w.extend_from_slice(&16u16.to_le_bytes()); + w.extend_from_slice(b"data"); + w.extend_from_slice(&data_len.to_le_bytes()); + for s in &pcm { + w.extend_from_slice(&s.to_le_bytes()); + } + std::fs::write(out_path, &w).expect("write wav"); + println!( + "wrote {} samples ({} ch @ {} Hz) to {}", + pcm.len() / channels, + channels, + sample_rate, + out_path + ); +}