Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions crates/recording/src/sources/audio_mixer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ impl AudioMixer {

source.buffer_last = Some((
timestamp,
Duration::from_secs_f64(frame.samples() as f64 / frame.rate() as f64),
Duration::from_secs_f64(frame.samples() as f64 / rate as f64),
));
source.buffer.push_back(AudioFrame::new(frame, timestamp));
}
Expand Down Expand Up @@ -400,7 +400,15 @@ impl AudioMixer {

let mut filtered = ffmpeg::frame::Audio::empty();
while self.abuffersink.sink().frame(&mut filtered).is_ok() {
let elapsed = Duration::from_secs_f64(self.samples_out as f64 / filtered.rate() as f64);
let output_rate_i32 = Self::INFO.rate();
let output_rate = output_rate_i32 as f64;

// Downstream encoders assume the mixer outputs at AudioMixer::INFO.rate().
// Normalize the frame metadata so we don't inherit whatever FFmpeg propagated
// from upstream sources (some CoreAudio devices report 16 kHz).
filtered.set_rate(output_rate_i32 as u32);

let elapsed = Duration::from_secs_f64(self.samples_out as f64 / output_rate);
let timestamp = start.instant() + start_timestamp.duration_since(start) + elapsed;

self.samples_out += filtered.samples();
Expand Down
Loading