Call Release in SimulcastEncoderAdapter destructor if inited. This check should be superflous once https://webrtc-review.git.corp.google.com/c/src/+/465582 has landed, but just to be safe make sure we always call Release() in the destructor if it hasn't already been called. Bug: chromium:504620824 Change-Id: I70323b1a71fd9830f0d7af62ebeced05dd833d54 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/465600 Auto-Submit: Erik Språng <sprang@webrtc.org> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Commit-Queue: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47496}
diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc index 06aebdc..2f61bdd 100644 --- a/media/engine/simulcast_encoder_adapter.cc +++ b/media/engine/simulcast_encoder_adapter.cc
@@ -342,7 +342,9 @@ SimulcastEncoderAdapter::~SimulcastEncoderAdapter() { RTC_DCHECK_RUN_ON(&encoder_queue_checker_); - RTC_DCHECK(!Initialized()); + if (Initialized()) { + Release(); + } DestroyStoredEncoders(); }
diff --git a/media/engine/simulcast_encoder_adapter_unittest.cc b/media/engine/simulcast_encoder_adapter_unittest.cc index 5c10aee..ff843b7 100644 --- a/media/engine/simulcast_encoder_adapter_unittest.cc +++ b/media/engine/simulcast_encoder_adapter_unittest.cc
@@ -790,6 +790,18 @@ EXPECT_EQ(0, adapter_->Release()); } +TEST_F(TestSimulcastEncoderAdapterFake, DestructorCallsReleaseIfInitialized) { + SetupCodec(); + std::vector<MockVideoEncoder*> encoders = helper_->factory()->encoders(); + ASSERT_EQ(3u, encoders.size()); + + for (auto* encoder : encoders) { + EXPECT_CALL(*encoder, ReleaseMock()).WillOnce(testing::Return(0)); + } + + adapter_.reset(); +} + TEST_F(TestSimulcastEncoderAdapterFake, Reinit) { SetupCodec(); EXPECT_EQ(0, adapter_->Release());