Skip to content

Commit 220b555

Browse files
fix some potential audio issues, clean up the code a bit, and suppress some warnings (#737)
* fix some potential audio issues, clean up the code a bit, and surpress some warnings * use assign to initialize the buffer
1 parent a21c2e6 commit 220b555

File tree

4 files changed

+12
-8
lines changed

4 files changed

+12
-8
lines changed

livekit/src/room/utils/utf8_chunk.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ impl<'a> Iterator for Utf8AwareChunks<'a> {
5959
pub trait Utf8AwareChunkExt {
6060
/// Splits the bytes into chunks of the specified size, ensuring that
6161
/// UTF-8 character boundaries are respected.
62-
fn utf8_aware_chunks(&self, chunk_size: usize) -> Utf8AwareChunks;
62+
fn utf8_aware_chunks(&self, chunk_size: usize) -> Utf8AwareChunks<'_>;
6363
}
6464

6565
impl Utf8AwareChunkExt for [u8] {
66-
fn utf8_aware_chunks(&self, chunk_size: usize) -> Utf8AwareChunks {
66+
fn utf8_aware_chunks(&self, chunk_size: usize) -> Utf8AwareChunks<'_> {
6767
Utf8AwareChunks::new(self, chunk_size)
6868
}
6969
}

webrtc-sys/build.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ fn main() {
216216
.file("src/objc_video_factory.mm")
217217
.file("src/objc_video_frame_buffer.mm")
218218
.flag("-stdlib=libc++")
219-
.flag("-std=c++20");
219+
.flag("-std=c++20")
220+
.flag("-Wno-nullability-completeness");
220221
}
221222
"ios" => {
222223
println!("cargo:rustc-link-lib=framework=Foundation");

webrtc-sys/include/livekit/audio_track.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#pragma once
1818

1919
#include <memory>
20+
#include <vector>
2021

2122
#include "api/audio/audio_frame.h"
2223
#include "api/audio_options.h"
@@ -137,7 +138,7 @@ class AudioTrackSource {
137138
void (*on_complete_)(const SourceContext*) RTC_GUARDED_BY(mutex_);
138139

139140
int missed_frames_ RTC_GUARDED_BY(mutex_) = 0;
140-
int16_t* silence_buffer_ = nullptr;
141+
std::vector<int16_t> silence_buffer_;
141142

142143
int sample_rate_;
143144
int num_channels_;

webrtc-sys/src/audio_track.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ AudioTrackSource::InternalSource::InternalSource(
150150

151151
int samples10ms = sample_rate / 100 * num_channels;
152152

153-
silence_buffer_ = new int16_t[samples10ms]();
153+
silence_buffer_.assign(samples10ms, 0);
154154
queue_size_samples_ = queue_size_ms / 10 * samples10ms;
155155
notify_threshold_samples_ = queue_size_samples_; // TODO: this is currently
156156
// using x2 the queue size
@@ -164,18 +164,21 @@ AudioTrackSource::InternalSource::InternalSource(
164164
audio_queue_.get(),
165165
[this, samples10ms]() {
166166
webrtc::MutexLock lock(&mutex_);
167+
constexpr int kBitsPerSample = sizeof(int16_t) * 8;
167168

168169
if (buffer_.size() >= samples10ms) {
170+
// Reset |missed_frames_| to 0 so that it won't keep sending silence to webrtc due to audio callback timing drifts.
171+
missed_frames_ = 0;
169172
for (auto sink : sinks_)
170-
sink->OnData(buffer_.data(), sizeof(int16_t) * 8, sample_rate_,
173+
sink->OnData(buffer_.data(), kBitsPerSample, sample_rate_,
171174
num_channels_, samples10ms / num_channels_);
172175

173176
buffer_.erase(buffer_.begin(), buffer_.begin() + samples10ms);
174177
} else {
175178
missed_frames_++;
176179
if (missed_frames_ >= silence_frames_threshold) {
177180
for (auto sink : sinks_)
178-
sink->OnData(silence_buffer_, sizeof(int16_t) * 8, sample_rate_,
181+
sink->OnData(silence_buffer_.data(), kBitsPerSample, sample_rate_,
179182
num_channels_, samples10ms / num_channels_);
180183
}
181184
}
@@ -192,7 +195,6 @@ AudioTrackSource::InternalSource::InternalSource(
192195
}
193196

194197
AudioTrackSource::InternalSource::~InternalSource() {
195-
delete[] silence_buffer_;
196198
}
197199

198200
bool AudioTrackSource::InternalSource::capture_frame(

0 commit comments

Comments
 (0)