Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(649)

Unified Diff: webrtc/video/video_quality_test.cc

Issue 2500373002: Configure FlexFEC in VideoQualityTest. (Closed)
Patch Set: Actually create FlexfecReceiveStream in RunWithRenderers. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/video_quality_test.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/video_quality_test.cc
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index 7186fed3ac694f46e5a022355133c4e792d6802a..b48c69237695f6c5e31213113cf731014599e875 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -817,7 +817,7 @@ VideoQualityTest::VideoQualityTest()
VideoQualityTest::Params::Params()
: call({false, Call::Config::BitrateConfig()}),
video({false, 640, 480, 30, 50, 800, 800, false, "VP8", 1, -1, 0, false,
- "", ""}),
+ false, "", ""}),
audio({false, false}),
screenshare({false, 10, 0}),
analyzer({"", 0.0, 0.0, 0, "", ""}),
@@ -1038,6 +1038,9 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
video_encoder_config_.min_transmit_bitrate_bps =
params_.video.min_transmit_bps;
+ video_send_config_.suspend_below_min_bitrate =
+ params_.video.suspend_below_min_bitrate;
+
video_encoder_config_.number_of_streams = params_.ss.streams.size();
video_encoder_config_.max_bitrate_bps = 0;
for (size_t i = 0; i < params_.ss.streams.size(); ++i) {
@@ -1058,6 +1061,38 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
kSendRtxPayloadType;
video_receive_configs_[i].rtp.transport_cc = params_.call.send_side_bwe;
}
+
+ if (params_.video.flexfec) {
+ video_send_config_.rtp.flexfec.flexfec_payload_type = kFlexfecPayloadType;
+ video_send_config_.rtp.flexfec.flexfec_ssrc = kFlexfecSendSsrc;
+ video_send_config_.rtp.flexfec.protected_media_ssrcs = {
+ kVideoSendSsrcs[params_.ss.selected_stream]};
+
+ FlexfecReceiveStream::Config flexfec_receive_config;
+ flexfec_receive_config.flexfec_payload_type =
+ video_send_config_.rtp.flexfec.flexfec_payload_type;
+ flexfec_receive_config.flexfec_ssrc =
+ video_send_config_.rtp.flexfec.flexfec_ssrc;
+ flexfec_receive_config.protected_media_ssrcs =
+ video_send_config_.rtp.flexfec.protected_media_ssrcs;
+ flexfec_receive_configs_.push_back(flexfec_receive_config);
+ }
+
+ if (params_.video.ulpfec) {
+ video_send_config_.rtp.ulpfec.red_payload_type = kRedPayloadType;
+ video_send_config_.rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
+ video_send_config_.rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType;
+
+ video_receive_configs_[params_.ss.selected_stream]
+ .rtp.ulpfec.red_payload_type =
+ video_send_config_.rtp.ulpfec.red_payload_type;
+ video_receive_configs_[params_.ss.selected_stream]
+ .rtp.ulpfec.ulpfec_payload_type =
+ video_send_config_.rtp.ulpfec.ulpfec_payload_type;
+ video_receive_configs_[params_.ss.selected_stream]
+ .rtp.ulpfec.red_rtx_payload_type =
+ video_send_config_.rtp.ulpfec.red_rtx_payload_type;
+ }
}
void VideoQualityTest::SetupScreenshare() {
@@ -1215,6 +1250,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
if (params_.screenshare.enabled)
SetupScreenshare();
+ CreateFlexfecStreams();
CreateVideoStreams();
analyzer.SetSendStream(video_send_stream_);
video_send_stream_->SetSource(
@@ -1230,6 +1266,8 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
video_send_stream_->Start();
for (VideoReceiveStream* receive_stream : video_receive_streams_)
receive_stream->Start();
+ for (FlexfecReceiveStream* receive_stream : flexfec_receive_streams_)
+ receive_stream->Start();
video_capturer_->Start();
analyzer.Wait();
@@ -1238,6 +1276,8 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
recv_transport.StopSending();
video_capturer_->Stop();
+ for (FlexfecReceiveStream* receive_stream : flexfec_receive_streams_)
+ receive_stream->Stop();
for (VideoReceiveStream* receive_stream : video_receive_streams_)
receive_stream->Stop();
video_send_stream_->Stop();
@@ -1317,6 +1357,7 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
transport.SetReceiver(call->Receiver());
VideoReceiveStream* video_receive_stream = nullptr;
+ FlexfecReceiveStream* flexfec_receive_stream = nullptr;
std::unique_ptr<test::VideoRenderer> local_preview;
std::unique_ptr<test::VideoRenderer> loopback_video;
if (params_.video.enabled) {
@@ -1337,36 +1378,21 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
params_.ss.streams[stream_id].height));
SetupVideo(&transport, &transport);
-
- // TODO(minyue): maybe move the following to SetupVideo() to make code
- // cleaner. Currently, RunWithRenderers() and RunWithAnalyzer() differ in
- // the way they treat FEC etc., which makes it complicated to put these
- // additional video setup into SetupVideo().
video_send_config_.pre_encode_callback = local_preview.get();
video_receive_configs_[stream_id].renderer = loopback_video.get();
if (params_.audio.enabled && params_.audio.sync_video)
video_receive_configs_[stream_id].sync_group = kSyncGroup;
- video_send_config_.suspend_below_min_bitrate =
- params_.video.suspend_below_min_bitrate;
-
- if (params.video.fec) {
- video_send_config_.rtp.ulpfec.red_payload_type = kRedPayloadType;
- video_send_config_.rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
- video_send_config_.rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType;
- video_receive_configs_[stream_id].rtp.ulpfec.red_payload_type =
- kRedPayloadType;
- video_receive_configs_[stream_id].rtp.ulpfec.ulpfec_payload_type =
- kUlpfecPayloadType;
- video_receive_configs_[stream_id].rtp.ulpfec.red_rtx_payload_type =
- kRtxRedPayloadType;
- }
-
if (params_.screenshare.enabled)
SetupScreenshare();
video_send_stream_ = call->CreateVideoSendStream(
video_send_config_.Copy(), video_encoder_config_.Copy());
+ if (params_.video.flexfec) {
+ RTC_DCHECK(!flexfec_receive_configs_.empty());
+ flexfec_receive_stream =
+ call->CreateFlexfecReceiveStream(flexfec_receive_configs_[0]);
+ }
video_receive_stream = call->CreateVideoReceiveStream(
video_receive_configs_[stream_id].Copy());
CreateCapturer();
@@ -1386,6 +1412,8 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
// Start sending and receiving video.
if (params_.video.enabled) {
+ if (flexfec_receive_stream)
+ flexfec_receive_stream->Start();
video_receive_stream->Start();
video_send_stream_->Start();
video_capturer_->Start();
@@ -1420,6 +1448,10 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
video_capturer_->Stop();
video_send_stream_->Stop();
video_receive_stream->Stop();
+ if (flexfec_receive_stream) {
+ flexfec_receive_stream->Stop();
+ call->DestroyFlexfecReceiveStream(flexfec_receive_stream);
+ }
call->DestroyVideoReceiveStream(video_receive_stream);
call->DestroyVideoSendStream(video_send_stream_);
}
« no previous file with comments | « webrtc/video/video_quality_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698