Cleanup of the APM creation
This CL removes the possibility that APM cannot be created, i.e., that the create method can return nullptr. That was already the case implicitly but this CL makes that behavior explicit. Bug: webrtc:5298 Change-Id: I2706ea538c9d1b4bcd65faecab637640a209a4dc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183101 Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32029}
This commit is contained in:
@ -35,16 +35,10 @@ AudioProcessing* AudioProcessingBuilder::Create(const webrtc::Config& config) {
|
||||
#else
|
||||
|
||||
// Standard implementation.
|
||||
AudioProcessingImpl* apm = new rtc::RefCountedObject<AudioProcessingImpl>(
|
||||
return new rtc::RefCountedObject<AudioProcessingImpl>(
|
||||
config, std::move(capture_post_processing_),
|
||||
std::move(render_pre_processing_), std::move(echo_control_factory_),
|
||||
std::move(echo_detector_), std::move(capture_analyzer_));
|
||||
if (apm->Initialize() != AudioProcessing::kNoError) {
|
||||
delete apm;
|
||||
apm = nullptr;
|
||||
}
|
||||
return apm;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -307,6 +307,8 @@ AudioProcessingImpl::AudioProcessingImpl(
|
||||
config_.gain_controller1.analog_gain_controller.enable_digital_adaptive =
|
||||
!config.Get<ExperimentalAgc>().digital_adaptive_disabled;
|
||||
#endif
|
||||
|
||||
Initialize();
|
||||
}
|
||||
|
||||
AudioProcessingImpl::~AudioProcessingImpl() = default;
|
||||
@ -315,7 +317,8 @@ int AudioProcessingImpl::Initialize() {
|
||||
// Run in a single-threaded manner during initialization.
|
||||
MutexLock lock_render(&mutex_render_);
|
||||
MutexLock lock_capture(&mutex_capture_);
|
||||
return InitializeLocked();
|
||||
InitializeLocked();
|
||||
return kNoError;
|
||||
}
|
||||
|
||||
int AudioProcessingImpl::Initialize(int capture_input_sample_rate_hz,
|
||||
@ -356,7 +359,7 @@ int AudioProcessingImpl::MaybeInitializeRender(
|
||||
return InitializeLocked(processing_config);
|
||||
}
|
||||
|
||||
int AudioProcessingImpl::InitializeLocked() {
|
||||
void AudioProcessingImpl::InitializeLocked() {
|
||||
UpdateActiveSubmoduleStates();
|
||||
|
||||
const int render_audiobuffer_sample_rate_hz =
|
||||
@ -425,7 +428,6 @@ int AudioProcessingImpl::InitializeLocked() {
|
||||
if (aec_dump_) {
|
||||
aec_dump_->WriteInitMessage(formats_.api_format, rtc::TimeUTCMillis());
|
||||
}
|
||||
return kNoError;
|
||||
}
|
||||
|
||||
int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) {
|
||||
@ -519,7 +521,8 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) {
|
||||
capture_nonlocked_.capture_processing_format.sample_rate_hz();
|
||||
}
|
||||
|
||||
return InitializeLocked();
|
||||
InitializeLocked();
|
||||
return kNoError;
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||
|
@ -140,7 +140,7 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
|
||||
protected:
|
||||
// Overridden in a mock.
|
||||
virtual int InitializeLocked()
|
||||
virtual void InitializeLocked()
|
||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_render_, mutex_capture_);
|
||||
|
||||
private:
|
||||
|
@ -37,9 +37,9 @@ class MockInitialize : public AudioProcessingImpl {
|
||||
explicit MockInitialize(const webrtc::Config& config)
|
||||
: AudioProcessingImpl(config) {}
|
||||
|
||||
MOCK_METHOD(int, InitializeLocked, (), (override));
|
||||
int RealInitializeLocked() RTC_NO_THREAD_SAFETY_ANALYSIS {
|
||||
return AudioProcessingImpl::InitializeLocked();
|
||||
MOCK_METHOD(void, InitializeLocked, (), (override));
|
||||
void RealInitializeLocked() RTC_NO_THREAD_SAFETY_ANALYSIS {
|
||||
AudioProcessingImpl::InitializeLocked();
|
||||
}
|
||||
|
||||
MOCK_METHOD(void, AddRef, (), (const, override));
|
||||
|
@ -488,6 +488,7 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
|
||||
// rate and number of channels) have changed. Passing updated parameters
|
||||
// directly to |ProcessStream()| and |ProcessReverseStream()| is permissible.
|
||||
// If the parameters are known at init-time though, they may be provided.
|
||||
// TODO(webrtc:5298): Change to return void.
|
||||
virtual int Initialize() = 0;
|
||||
|
||||
// The int16 interfaces require:
|
||||
|
@ -30,13 +30,10 @@ AudioProcessing* AudioProcessingBuilderForTesting::Create() {
|
||||
|
||||
AudioProcessing* AudioProcessingBuilderForTesting::Create(
|
||||
const webrtc::Config& config) {
|
||||
AudioProcessingImpl* apm = new rtc::RefCountedObject<AudioProcessingImpl>(
|
||||
return new rtc::RefCountedObject<AudioProcessingImpl>(
|
||||
config, std::move(capture_post_processing_),
|
||||
std::move(render_pre_processing_), std::move(echo_control_factory_),
|
||||
std::move(echo_detector_), std::move(capture_analyzer_));
|
||||
int error = apm->Initialize();
|
||||
RTC_CHECK_EQ(error, AudioProcessing::kNoError);
|
||||
return apm;
|
||||
}
|
||||
|
||||
#else
|
||||
|
Reference in New Issue
Block a user