From b70e557a8432ca3d86c1a71837e7a10e7935d585 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 29 Apr 2017 01:45:30 +0200 Subject: [PATCH] If we get a broken audio frame, keep the previous sample rate instead of assuming 48000 Hz. --- bmusb.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bmusb.cpp b/bmusb.cpp index 663a235..e9f89e2 100644 --- a/bmusb.cpp +++ b/bmusb.cpp @@ -243,7 +243,7 @@ bool decode_video_format(uint16_t video_format, VideoFormat *decoded_video_forma // There are seemingly no direct indicators of sample rate; you just get // one frame's worth and have to guess from that. -int guess_sample_rate(const VideoFormat &video_format, size_t len) +int guess_sample_rate(const VideoFormat &video_format, size_t len, int default_rate) { size_t num_samples = len / 3 / 8; size_t num_samples_per_second = num_samples * video_format.frame_rate_nom / video_format.frame_rate_den; @@ -256,9 +256,9 @@ int guess_sample_rate(const VideoFormat &video_format, size_t len) } } - fprintf(stderr, "%ld samples at %d/%d fps (%ld Hz) matches no known sample rate, assuming 48000 Hz\n", - num_samples, video_format.frame_rate_nom, video_format.frame_rate_den, num_samples_per_second); - return 48000; + fprintf(stderr, "%ld samples at %d/%d fps (%ld Hz) matches no known sample rate, keeping capture at %d Hz\n", + num_samples, video_format.frame_rate_nom, video_format.frame_rate_den, num_samples_per_second, default_rate); + return default_rate; } } // namespace @@ -406,7 +406,7 @@ void BMUSBCapture::dequeue_thread_func() audio_format.id = audio_frame.format; if (decode_video_format(video_frame.format, &video_format)) { if (audio_frame.frame.len != 0) { - audio_format.sample_rate = guess_sample_rate(video_format, audio_frame.frame.len); + audio_format.sample_rate = guess_sample_rate(video_format, audio_frame.frame.len, last_sample_rate); last_sample_rate = audio_format.sample_rate; } frame_callback(video_timecode, -- 2.39.2