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

Unified Diff: webrtc/video/video_quality_test.cc

Issue 2321463002: Adding audio only mode to video loopback test. (Closed)
Patch Set: on comments 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 e4d4b7a0f414268ca9ae869df9879ac5c893ac86..8e89544721d22e712e0538afb2fa969d1d7d0cf5 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -995,8 +995,8 @@ void VideoQualityTest::FillScalabilitySettings(
}
}
-void VideoQualityTest::SetupCommon(Transport* send_transport,
- Transport* recv_transport) {
+void VideoQualityTest::SetupVideo(Transport* send_transport,
+ Transport* recv_transport) {
if (params_.logs)
trace_to_stderr_.reset(new test::TraceToStderr);
@@ -1005,19 +1005,19 @@ void VideoQualityTest::SetupCommon(Transport* send_transport,
int payload_type;
if (params_.video.codec == "H264") {
- encoder_.reset(VideoEncoder::Create(VideoEncoder::kH264));
+ video_encoder_.reset(VideoEncoder::Create(VideoEncoder::kH264));
payload_type = kPayloadTypeH264;
} else if (params_.video.codec == "VP8") {
- encoder_.reset(VideoEncoder::Create(VideoEncoder::kVp8));
+ video_encoder_.reset(VideoEncoder::Create(VideoEncoder::kVp8));
payload_type = kPayloadTypeVP8;
} else if (params_.video.codec == "VP9") {
- encoder_.reset(VideoEncoder::Create(VideoEncoder::kVp9));
+ video_encoder_.reset(VideoEncoder::Create(VideoEncoder::kVp9));
payload_type = kPayloadTypeVP9;
} else {
RTC_NOTREACHED() << "Codec not supported!";
return;
}
- video_send_config_.encoder_settings.encoder = encoder_.get();
+ video_send_config_.encoder_settings.encoder = video_encoder_.get();
video_send_config_.encoder_settings.payload_name = params_.video.codec;
video_send_config_.encoder_settings.payload_type = payload_type;
video_send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
@@ -1123,19 +1123,19 @@ void VideoQualityTest::CreateCapturer() {
new test::FrameGeneratorCapturer(clock_, frame_generator_.release(),
params_.video.fps);
EXPECT_TRUE(frame_generator_capturer->Init());
- capturer_.reset(frame_generator_capturer);
+ video_capturer_.reset(frame_generator_capturer);
} else {
if (params_.video.clip_name.empty()) {
- capturer_.reset(test::VcmCapturer::Create(
+ video_capturer_.reset(test::VcmCapturer::Create(
params_.video.width, params_.video.height, params_.video.fps));
} else {
- capturer_.reset(test::FrameGeneratorCapturer::CreateFromYuvFile(
+ video_capturer_.reset(test::FrameGeneratorCapturer::CreateFromYuvFile(
test::ResourcePath(params_.video.clip_name, "yuv"),
params_.video.width, params_.video.height, params_.video.fps,
clock_));
- ASSERT_TRUE(capturer_) << "Could not create capturer for "
- << params_.video.clip_name
- << ".yuv. Is this resource file present?";
+ ASSERT_TRUE(video_capturer_) << "Could not create capturer for "
+ << params_.video.clip_name
+ << ".yuv. Is this resource file present?";
}
}
}
@@ -1204,7 +1204,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
send_transport.SetReceiver(&analyzer);
recv_transport.SetReceiver(sender_call_->Receiver());
- SetupCommon(&analyzer, &recv_transport);
+ SetupVideo(&analyzer, &recv_transport);
video_receive_configs_[params_.ss.selected_stream].renderer = &analyzer;
video_send_config_.pre_encode_callback = analyzer.pre_encode_proxy();
for (auto& config : video_receive_configs_)
@@ -1221,21 +1221,21 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
CreateCapturer();
rtc::VideoSinkWants wants;
- capturer_->AddOrUpdateSink(analyzer.InputInterface(), wants);
+ video_capturer_->AddOrUpdateSink(analyzer.InputInterface(), wants);
StartEncodedFrameLogs(video_send_stream_);
StartEncodedFrameLogs(video_receive_streams_[0]);
video_send_stream_->Start();
for (VideoReceiveStream* receive_stream : video_receive_streams_)
receive_stream->Start();
- capturer_->Start();
+ video_capturer_->Start();
analyzer.Wait();
send_transport.StopSending();
recv_transport.StopSending();
- capturer_->Stop();
+ video_capturer_->Stop();
for (VideoReceiveStream* receive_stream : video_receive_streams_)
receive_stream->Stop();
video_send_stream_->Stop();
@@ -1246,26 +1246,48 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
fclose(graph_data_output_file);
}
+void VideoQualityTest::SetupAudio(int send_channel_id,
+ int receive_channel_id,
+ Call* call,
+ Transport* transport,
+ AudioReceiveStream** audio_receive_stream) {
+ audio_send_config_ = AudioSendStream::Config(transport);
+ audio_send_config_.voe_channel_id = send_channel_id;
+ audio_send_config_.rtp.ssrc = kAudioSendSsrc;
+
+ // Add extension to enable audio send side BWE, and allow audio bit rate
+ // adaptation.
+ audio_send_config_.rtp.extensions.clear();
+ if (params_.call.send_side_bwe) {
+ audio_send_config_.rtp.extensions.push_back(
+ webrtc::RtpExtension(webrtc::RtpExtension::kTransportSequenceNumberUri,
+ test::kTransportSequenceNumberExtensionId));
+ audio_send_config_.min_bitrate_kbps = kOpusMinBitrate / 1000;
+ audio_send_config_.max_bitrate_kbps = kOpusBitrateFb / 1000;
+ }
+ audio_send_config_.send_codec_spec.codec_inst =
+ CodecInst{120, "OPUS", 48000, 960, 2, 64000};
+
+ audio_send_stream_ = call->CreateAudioSendStream(audio_send_config_);
+
+ AudioReceiveStream::Config audio_config;
+ audio_config.rtp.local_ssrc = kReceiverLocalAudioSsrc;
+ audio_config.rtcp_send_transport = transport;
+ audio_config.voe_channel_id = receive_channel_id;
+ audio_config.rtp.remote_ssrc = audio_send_config_.rtp.ssrc;
+ audio_config.rtp.transport_cc = params_.call.send_side_bwe;
+ audio_config.rtp.extensions = audio_send_config_.rtp.extensions;
+ audio_config.decoder_factory = decoder_factory_;
+ if (params_.video.enabled && params_.audio.sync_video)
+ audio_config.sync_group = kSyncGroup;
+
+ *audio_receive_stream = call->CreateAudioReceiveStream(audio_config);
+}
+
void VideoQualityTest::RunWithRenderers(const Params& params) {
params_ = params;
CheckParams();
- std::unique_ptr<test::VideoRenderer> local_preview(
- test::VideoRenderer::Create("Local Preview", params_.video.width,
- params_.video.height));
- size_t stream_id = params_.ss.selected_stream;
- std::string title = "Loopback Video";
- if (params_.ss.streams.size() > 1) {
- std::ostringstream s;
- s << stream_id;
- title += " - Stream #" + s.str();
- }
-
- std::unique_ptr<test::VideoRenderer> loopback_video(
- test::VideoRenderer::Create(title.c_str(),
- params_.ss.streams[stream_id].width,
- params_.ss.streams[stream_id].height));
-
// TODO(ivica): Remove bitrate_config and use the default Call::Config(), to
// match the full stack tests.
webrtc::RtcEventLogNullImpl event_log;
@@ -1282,6 +1304,8 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
std::unique_ptr<Call> call(Call::Create(call_config));
+ // TODO(minyue): consider if this is a good transport even for audio only
+ // calls.
test::LayerFilteringTransport transport(
params.pipe, call.get(), kPayloadTypeVP8, kPayloadTypeVP9,
params.video.selected_tl, params_.ss.selected_sl);
@@ -1290,77 +1314,75 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
// the full stack tests better.
transport.SetReceiver(call->Receiver());
- SetupCommon(&transport, &transport);
+ VideoReceiveStream* video_receive_stream = nullptr;
+ std::unique_ptr<test::VideoRenderer> local_preview;
+ std::unique_ptr<test::VideoRenderer> loopback_video;
+ if (params_.video.enabled) {
+ // Create video renderers.
+ local_preview.reset(test::VideoRenderer::Create(
+ "Local Preview", params_.video.width, params_.video.height));
+
+ size_t stream_id = params_.ss.selected_stream;
+ std::string title = "Loopback Video";
+ if (params_.ss.streams.size() > 1) {
+ std::ostringstream s;
+ s << stream_id;
+ title += " - Stream #" + s.str();
+ }
- 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;
+ loopback_video.reset(test::VideoRenderer::Create(
+ title.c_str(), params_.ss.streams[stream_id].width,
+ 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_receive_configs_[stream_id].rtp.ulpfec.red_payload_type =
+ kRedPayloadType;
+ video_receive_configs_[stream_id].rtp.ulpfec.ulpfec_payload_type =
+ kUlpfecPayloadType;
+ }
- video_send_config_.suspend_below_min_bitrate =
- params_.video.suspend_below_min_bitrate;
+ if (params_.screenshare.enabled)
+ SetupScreenshare();
- if (params.video.fec) {
- video_send_config_.rtp.ulpfec.red_payload_type = kRedPayloadType;
- video_send_config_.rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
- video_receive_configs_[stream_id].rtp.ulpfec.red_payload_type =
- kRedPayloadType;
- video_receive_configs_[stream_id].rtp.ulpfec.ulpfec_payload_type =
- kUlpfecPayloadType;
+ video_send_stream_ = call->CreateVideoSendStream(
+ video_send_config_.Copy(), video_encoder_config_.Copy());
+ video_receive_stream = call->CreateVideoReceiveStream(
+ video_receive_configs_[stream_id].Copy());
+ CreateCapturer();
+ video_send_stream_->SetSource(video_capturer_.get());
}
- if (params_.screenshare.enabled)
- SetupScreenshare();
-
- video_send_stream_ = call->CreateVideoSendStream(
- video_send_config_.Copy(), video_encoder_config_.Copy());
- VideoReceiveStream* video_receive_stream =
- call->CreateVideoReceiveStream(video_receive_configs_[stream_id].Copy());
- CreateCapturer();
- video_send_stream_->SetSource(capturer_.get());
-
AudioReceiveStream* audio_receive_stream = nullptr;
if (params_.audio.enabled) {
- audio_send_config_ = AudioSendStream::Config(&transport);
- audio_send_config_.voe_channel_id = voe.send_channel_id;
- audio_send_config_.rtp.ssrc = kAudioSendSsrc;
-
- // Add extension to enable audio send side BWE, and allow audio bit rate
- // adaptation.
- audio_send_config_.rtp.extensions.clear();
- if (params_.call.send_side_bwe) {
- audio_send_config_.rtp.extensions.push_back(webrtc::RtpExtension(
- webrtc::RtpExtension::kTransportSequenceNumberUri,
- test::kTransportSequenceNumberExtensionId));
- audio_send_config_.min_bitrate_kbps = kOpusMinBitrate / 1000;
- audio_send_config_.max_bitrate_kbps = kOpusBitrateFb / 1000;
- }
- audio_send_config_.send_codec_spec.codec_inst =
- CodecInst{120, "OPUS", 48000, 960, 2, 64000};
-
- audio_send_stream_ = call->CreateAudioSendStream(audio_send_config_);
-
- AudioReceiveStream::Config audio_config;
- audio_config.rtp.local_ssrc = kReceiverLocalAudioSsrc;
- audio_config.rtcp_send_transport = &transport;
- audio_config.voe_channel_id = voe.receive_channel_id;
- audio_config.rtp.remote_ssrc = audio_send_config_.rtp.ssrc;
- audio_config.rtp.transport_cc = params_.call.send_side_bwe;
- audio_config.rtp.extensions = audio_send_config_.rtp.extensions;
- audio_config.decoder_factory = decoder_factory_;
- if (params_.audio.sync_video)
- audio_config.sync_group = kSyncGroup;
-
- audio_receive_stream = call->CreateAudioReceiveStream(audio_config);
+ SetupAudio(voe.send_channel_id, voe.receive_channel_id, call.get(),
+ &transport, &audio_receive_stream);
}
StartEncodedFrameLogs(video_receive_stream);
StartEncodedFrameLogs(video_send_stream_);
// Start sending and receiving video.
- video_receive_stream->Start();
- video_send_stream_->Start();
- capturer_->Start();
+ if (params_.video.enabled) {
+ video_receive_stream->Start();
+ video_send_stream_->Start();
+ video_capturer_->Start();
+ }
if (params_.audio.enabled) {
// Start receiving audio.
@@ -1382,19 +1404,17 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
// Stop receiving audio.
EXPECT_EQ(0, voe.base->StopPlayout(voe.receive_channel_id));
audio_receive_stream->Stop();
+ call->DestroyAudioSendStream(audio_send_stream_);
+ call->DestroyAudioReceiveStream(audio_receive_stream);
}
// Stop receiving and sending video.
- capturer_->Stop();
- video_send_stream_->Stop();
- video_receive_stream->Stop();
-
- call->DestroyVideoReceiveStream(video_receive_stream);
- call->DestroyVideoSendStream(video_send_stream_);
-
- if (params_.audio.enabled) {
- call->DestroyAudioSendStream(audio_send_stream_);
- call->DestroyAudioReceiveStream(audio_receive_stream);
+ if (params_.video.enabled) {
+ video_capturer_->Stop();
+ video_send_stream_->Stop();
+ video_receive_stream->Stop();
+ call->DestroyVideoReceiveStream(video_receive_stream);
+ call->DestroyVideoSendStream(video_send_stream_);
}
transport.StopSending();
« 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