Skip to content

Commit 1194925

Browse files
committed
[*] fix: flush the audio mixer buffer when stopping record
1 parent b9cb062 commit 1194925

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ cpal = "0.16"
8989
hound = "3.5"
9090
which = "8.0"
9191
ctrlc = "3.5"
92-
rayon = "1.11"
9392
rubato = "0.16"
9493
fdk-aac = "0.8"
9594
memmap2 = "0.9"

lib/mp4m/src/audio_processor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ impl<T: SampleType> AudioProcessor<T> {
221221
if max_samples_seconds < 3 {
222222
return Ok(());
223223
} else {
224-
log::warn!(
224+
log::debug!(
225225
"At least one audio buffer samples counts is great than 3 second's samples counts"
226226
);
227227
}

lib/recorder/src/recorder.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub struct RecordingSession {
5353
speaker_recorder_worker: Option<JoinHandle<Result<(), RecorderError>>>,
5454

5555
audio_mixer_stop_sig: Option<Arc<AtomicBool>>,
56+
audio_mixer_finished_sig: Option<Arc<AtomicBool>>,
5657
audio_mixer_worker: Option<JoinHandle<()>>,
5758
mp4_writer_worker: Option<JoinHandle<()>>,
5859
h264_frame_sender: Option<Sender<VideoFrameType>>,
@@ -86,7 +87,9 @@ impl RecordingSession {
8687
speaker_level_receiver: None,
8788

8889
audio_mixer_stop_sig: None,
90+
audio_mixer_finished_sig: None,
8991
audio_mixer_worker: None,
92+
9093
mp4_writer_worker: None,
9194
h264_frame_sender: None,
9295

@@ -466,7 +469,10 @@ impl RecordingSession {
466469
}
467470

468471
self.audio_mixer_stop_sig = Some(Arc::new(AtomicBool::new(false)));
472+
self.audio_mixer_finished_sig = Some(Arc::new(AtomicBool::new(false)));
473+
469474
let stop_sig = self.audio_mixer_stop_sig.clone().unwrap();
475+
let finished_sig = self.audio_mixer_finished_sig.clone().unwrap();
470476

471477
let handle = thread::spawn(move || {
472478
loop {
@@ -475,6 +481,10 @@ impl RecordingSession {
475481
}
476482

477483
if stop_sig.load(Ordering::Relaxed) {
484+
if let Err(e) = audio_processor.flush() {
485+
log::warn!("Audio mixer flush sample failed: {e}");
486+
}
487+
finished_sig.store(true, Ordering::Relaxed);
478488
return;
479489
}
480490

@@ -550,6 +560,16 @@ impl RecordingSession {
550560

551561
if let Some(stop_sig) = self.audio_mixer_stop_sig {
552562
stop_sig.store(true, Ordering::Relaxed);
563+
564+
let mut try_counts = 0;
565+
while let Some(ref finished_sig) = self.audio_mixer_finished_sig {
566+
if finished_sig.load(Ordering::Relaxed) || try_counts > 5 {
567+
break;
568+
}
569+
570+
try_counts += 1;
571+
thread::sleep(Duration::from_millis(100));
572+
}
553573
}
554574

555575
if let Some(sender) = self.h264_frame_sender.take()

0 commit comments

Comments
 (0)