Reland: FrameGeneratorCapturer: don't generate video before Start is called

It is partial reland, which adds call to Start() to all relevant places,
but doesn't actually switches frame generator to not produce frames from
the moment it was created.

Bug: b/272350185
Change-Id: I6e3bd7af6f5cd8d9baff79c2aada7b2ddfae1c8d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/310782
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40379}
This commit is contained in:
Artem Titov 2023-06-29 14:56:59 +02:00 committed by WebRTC LUCI CQ
parent b4062e5611
commit f92cc6d7b4
10 changed files with 25 additions and 4 deletions

View File

@ -186,6 +186,7 @@ class BitrateEstimatorTest : public test::CallTest {
test::VideoTestConstants::kDefaultFramerate,
*test->task_queue_factory_);
frame_generator_capturer_->Init();
frame_generator_capturer_->Start();
send_stream_->SetSource(frame_generator_capturer_.get(),
DegradationPreference::MAINTAIN_FRAMERATE);
send_stream_->Start();

View File

@ -237,6 +237,7 @@ TEST_F(PeerConnectionFieldTrialTest, ApplyFakeNetworkConfig) {
auto video_track_source =
rtc::make_ref_counted<FrameGeneratorCapturerVideoTrackSource>(
config, clock_, /*is_screencast=*/false);
video_track_source->Start();
caller->AddTrack(pc_factory_->CreateVideoTrack(video_track_source, "v"));
WrapperPtr callee = CreatePeerConnection();

View File

@ -64,9 +64,15 @@ class FrameGeneratorCapturerVideoTrackSource : public VideoTrackSource {
~FrameGeneratorCapturerVideoTrackSource() = default;
void Start() { SetState(kLive); }
void Start() {
SetState(kLive);
video_capturer_->Start();
}
void Stop() { SetState(kMuted); }
void Stop() {
SetState(kMuted);
video_capturer_->Stop();
}
bool is_screencast() const override { return is_screencast_; }

View File

@ -1260,6 +1260,7 @@ if (!build_with_chromium) {
":run_loop",
":scoped_key_value_config",
":test_support",
":test_video_capturer",
":video_test_common",
":video_test_constants",
"../api:array_view",

View File

@ -634,7 +634,14 @@ void CallTest::Start() {
audio_recv_stream->Start();
}
void CallTest::StartVideoSources() {
for (size_t i = 0; i < video_sources_.size(); ++i) {
video_sources_[i]->Start();
}
}
void CallTest::StartVideoStreams() {
StartVideoSources();
for (size_t i = 0; i < video_send_streams_.size(); ++i) {
std::vector<bool> active_rtp_streams(
video_send_configs_[i].rtp.ssrcs.size(), true);

View File

@ -36,6 +36,7 @@
#include "test/rtp_rtcp_observer.h"
#include "test/run_loop.h"
#include "test/scoped_key_value_config.h"
#include "test/test_video_capturer.h"
#include "test/video_test_constants.h"
namespace webrtc {
@ -162,6 +163,7 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
void ConnectVideoSourcesToStreams();
void Start();
void StartVideoSources();
void StartVideoStreams();
void Stop();
void StopVideoStreams();
@ -210,8 +212,7 @@ class CallTest : public ::testing::Test, public RtpPacketSinkInterface {
std::vector<FlexfecReceiveStream*> flexfec_receive_streams_;
test::FrameGeneratorCapturer* frame_generator_capturer_;
std::vector<std::unique_ptr<rtc::VideoSourceInterface<VideoFrame>>>
video_sources_;
std::vector<std::unique_ptr<TestVideoCapturer>> video_sources_;
DegradationPreference degradation_preference_ =
DegradationPreference::MAINTAIN_FRAMERATE;

View File

@ -338,6 +338,7 @@ PeerScenarioClient::VideoSendTrack PeerScenarioClient::CreateVideo(
capturer->Init();
res.source = rtc::make_ref_counted<FrameGeneratorCapturerVideoTrackSource>(
std::move(capturer), config.screencast);
res.source->Start();
auto track = pc_factory_->CreateVideoTrack(res.source, track_id);
res.track = track.get();
res.sender =

View File

@ -419,6 +419,7 @@ SendVideoStream::SendVideoStream(CallClient* sender,
send_config.suspend_below_min_bitrate =
config.encoder.suspend_below_min_bitrate;
video_capturer_->Start();
sender_->SendTask([&] {
if (config.stream.fec_controller_factory) {
send_stream_ = sender_->call_->CreateVideoSendStream(

View File

@ -254,6 +254,7 @@ void MultiCodecReceiveTest::RunTestWithCodecs(
GetVideoSendStream()->Start();
CreateFrameGeneratorCapturer(kFps, kWidth / 2, kHeight / 2);
ConnectVideoSourcesToStreams();
StartVideoSources();
});
EXPECT_TRUE(observer_.Wait()) << "Timed out waiting for frames.";
}

View File

@ -339,6 +339,7 @@ void RtpRtcpEndToEndTest::TestRtpStatePreservation(
->SendRtcp(packet.data(), packet.size());
}
CreateFrameGeneratorCapturer(30, 1280, 720);
StartVideoSources();
});
observer.ResetExpectedSsrcs(1);