Check IsRunning() in VideoSendStreamImpl::SignalEncoderActive
Ensure VideoSendStreamImpl does not register allocation on stray encoded image if there is no active encodings. Bug: chromium:41497180 Change-Id: I32afd7cc71f154dff240934e2be1745d8ead127c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/338920 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Per Kjellander <perkj@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41708}
This commit is contained in:
parent
3f3f991c03
commit
9d4961e596
@ -522,6 +522,7 @@ VideoSendStreamImpl::~VideoSendStreamImpl() {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
RTC_LOG(LS_INFO) << "~VideoSendStreamImpl: " << config_.ToString();
|
||||
RTC_DCHECK(!started());
|
||||
RTC_DCHECK(!IsRunning());
|
||||
transport_->DestroyRtpVideoSender(rtp_video_sender_);
|
||||
}
|
||||
|
||||
@ -764,7 +765,7 @@ void VideoSendStreamImpl::OnVideoLayersAllocationUpdated(
|
||||
|
||||
void VideoSendStreamImpl::SignalEncoderActive() {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
if (rtp_video_sender_->IsActive()) {
|
||||
if (IsRunning()) {
|
||||
RTC_LOG(LS_INFO) << "SignalEncoderActive, Encoder is active.";
|
||||
bitrate_allocator_->AddObserver(this, GetAllocationConfig());
|
||||
}
|
||||
|
||||
@ -70,6 +70,7 @@ namespace internal {
|
||||
namespace {
|
||||
using ::testing::_;
|
||||
using ::testing::AllOf;
|
||||
using ::testing::AnyNumber;
|
||||
using ::testing::Field;
|
||||
using ::testing::Invoke;
|
||||
using ::testing::Mock;
|
||||
@ -271,6 +272,56 @@ TEST_F(VideoSendStreamImplTest,
|
||||
vss_impl->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoSendStreamImplTest,
|
||||
DoNotRegistersAsBitrateObserverOnStrayEncodedImage) {
|
||||
auto vss_impl = CreateVideoSendStreamImpl(TestVideoEncoderConfig());
|
||||
|
||||
EncodedImage encoded_image;
|
||||
CodecSpecificInfo codec_specific;
|
||||
ON_CALL(rtp_video_sender_, OnEncodedImage)
|
||||
.WillByDefault(Return(
|
||||
EncodedImageCallback::Result(EncodedImageCallback::Result::OK)));
|
||||
|
||||
EXPECT_CALL(bitrate_allocator_, AddObserver(vss_impl.get(), _))
|
||||
.Times(AnyNumber());
|
||||
vss_impl->Start();
|
||||
time_controller_.AdvanceTime(TimeDelta::Zero());
|
||||
|
||||
// VideoSendStreamImpl gets an allocated bitrate.
|
||||
const uint32_t kBitrateBps = 100000;
|
||||
EXPECT_CALL(rtp_video_sender_, GetPayloadBitrateBps())
|
||||
.Times(1)
|
||||
.WillOnce(Return(kBitrateBps));
|
||||
static_cast<BitrateAllocatorObserver*>(vss_impl.get())
|
||||
->OnBitrateUpdated(CreateAllocation(kBitrateBps));
|
||||
// A frame is encoded.
|
||||
encoder_queue_->PostTask([&] {
|
||||
static_cast<EncodedImageCallback*>(vss_impl.get())
|
||||
->OnEncodedImage(encoded_image, &codec_specific);
|
||||
});
|
||||
|
||||
// Expect allocation to be removed if encoder stop producing frames.
|
||||
EXPECT_CALL(bitrate_allocator_, RemoveObserver(vss_impl.get())).Times(1);
|
||||
time_controller_.AdvanceTime(TimeDelta::Seconds(5));
|
||||
Mock::VerifyAndClearExpectations(&bitrate_allocator_);
|
||||
|
||||
EXPECT_CALL(bitrate_allocator_, AddObserver(vss_impl.get(), _)).Times(0);
|
||||
|
||||
VideoEncoderConfig no_active_encodings = TestVideoEncoderConfig();
|
||||
no_active_encodings.simulcast_layers[0].active = false;
|
||||
vss_impl->ReconfigureVideoEncoder(std::move(no_active_encodings));
|
||||
|
||||
// Expect that allocation in not resumed if a stray encoded image is received.
|
||||
encoder_queue_->PostTask([&] {
|
||||
static_cast<EncodedImageCallback*>(vss_impl.get())
|
||||
->OnEncodedImage(encoded_image, &codec_specific);
|
||||
});
|
||||
|
||||
time_controller_.AdvanceTime(TimeDelta::Zero());
|
||||
|
||||
vss_impl->Stop();
|
||||
}
|
||||
|
||||
TEST_F(VideoSendStreamImplTest, UpdatesObserverOnConfigurationChange) {
|
||||
const bool kSuspend = false;
|
||||
config_.suspend_below_min_bitrate = kSuspend;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user