Skip to content

Commit eac7fec

Browse files
authored
Fix AudioSource reuse after PeerConnection close (#159)
Additionally: - fix passing `nullptr` `AudioProcessing` to `AudioDeviceModule::Create`
1 parent c426825 commit eac7fec

File tree

5 files changed

+17
-7
lines changed

5 files changed

+17
-7
lines changed

crates/libwebrtc-sys/include/adm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class OpenALAudioDeviceModule : public ExtendedADM {
7676
static rtc::scoped_refptr<OpenALAudioDeviceModule> Create(
7777
AudioLayer audio_layer,
7878
webrtc::TaskQueueFactory* task_queue_factory,
79-
webrtc::AudioProcessing* audio_processing);
79+
const std::unique_ptr<rtc::scoped_refptr<webrtc::AudioProcessing>>& audio_processing);
8080

8181
// Main initialization and termination.
8282
int32_t Init() override;

crates/libwebrtc-sys/include/bridge.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ std::unique_ptr<AudioDeviceModule> create_audio_device_module(
128128
Thread& worker_thread,
129129
AudioLayer audio_layer,
130130
TaskQueueFactory& task_queue_factory,
131-
const AudioProcessing& ap);
131+
const std::unique_ptr<AudioProcessing>& ap);
132132

133133
// Initializes the native audio parts required for each platform.
134134
int32_t init_audio_device_module(const AudioDeviceModule& audio_device_module);

crates/libwebrtc-sys/src/bridge.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1488,7 +1488,7 @@ pub(crate) mod webrtc {
14881488
worker_thread: Pin<&mut Thread>,
14891489
audio_layer: AudioLayer,
14901490
task_queue_factory: Pin<&mut TaskQueueFactory>,
1491-
ap: &AudioProcessing,
1491+
ap: &UniquePtr<AudioProcessing>,
14921492
) -> UniquePtr<AudioDeviceModule>;
14931493

14941494
/// Initializes the given [`AudioDeviceModule`].

crates/libwebrtc-sys/src/cpp/adm.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,14 @@ int32_t OpenALAudioDeviceModule::ActiveAudioLayer(
165165
rtc::scoped_refptr<OpenALAudioDeviceModule> OpenALAudioDeviceModule::Create(
166166
AudioLayer audio_layer,
167167
webrtc::TaskQueueFactory* task_queue_factory,
168-
webrtc::AudioProcessing* audio_processing) {
168+
const std::unique_ptr<rtc::scoped_refptr<webrtc::AudioProcessing>>& audio_processing) {
169169
auto adm = rtc::make_ref_counted<OpenALAudioDeviceModule>();
170170

171-
adm->audio_processing_ = audio_processing;
171+
if (!audio_processing.get()) {
172+
adm->audio_processing_ = nullptr;
173+
} else {
174+
adm->audio_processing_ = audio_processing.get()->get();
175+
}
172176
adm->audio_device_buffer_ =
173177
std::make_unique<webrtc::AudioDeviceBuffer>(task_queue_factory);
174178

@@ -843,6 +847,12 @@ bool OpenALAudioDeviceModule::RecordingIsInitialized() const {
843847
}
844848

845849
int32_t OpenALAudioDeviceModule::StartRecording() {
850+
for (const auto& [_, recorder] : _recorders) {
851+
recorder->StartCapture();
852+
}
853+
ensureThreadStarted();
854+
startCaptureOnThread();
855+
846856
return 0;
847857
}
848858

crates/libwebrtc-sys/src/cpp/bridge.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,13 @@ std::unique_ptr<AudioDeviceModule> create_audio_device_module(
113113
Thread& worker_thread,
114114
AudioLayer audio_layer,
115115
TaskQueueFactory& task_queue_factory,
116-
const AudioProcessing& ap) {
116+
const std::unique_ptr<AudioProcessing>& ap) {
117117
AudioDeviceModule adm = worker_thread.BlockingCall([audio_layer,
118118
&task_queue_factory,
119119
&ap] {
120120
return ::OpenALAudioDeviceModule::Create(audio_layer,
121121
&task_queue_factory,
122-
ap.get());
122+
ap);
123123
});
124124

125125
if (adm == nullptr) {

0 commit comments

Comments
 (0)