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

Unified Diff: webrtc/video/video_quality_test.cc

Issue 2681683003: Added Vp9 simulcast tests. (Closed)
Patch Set: rebase Created 3 years, 10 months 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 0e23373ac61e3038816e523fa193f07a04a3c713..b754d295485342a208420502be117e28ab1ee87e 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -137,8 +137,8 @@ class VideoAnalyzer : public PacketReceiver,
const std::string& graph_title,
uint32_t ssrc_to_analyze,
uint32_t rtx_ssrc_to_analyze,
- uint32_t selected_width,
- uint32_t selected_height,
+ uint32_t selected_stream_width,
+ uint32_t selected_stream_height,
bool is_quick_test_enabled)
: transport_(transport),
receiver_(nullptr),
@@ -150,8 +150,8 @@ class VideoAnalyzer : public PacketReceiver,
graph_title_(graph_title),
ssrc_to_analyze_(ssrc_to_analyze),
rtx_ssrc_to_analyze_(rtx_ssrc_to_analyze),
- selected_width_(selected_width),
- selected_height_(selected_height),
+ selected_stream_width_(selected_stream_width),
+ selected_stream_height_(selected_stream_height),
pre_encode_proxy_(this),
encode_timing_proxy_(this),
frames_to_process_(duration_frames),
@@ -232,7 +232,6 @@ class VideoAnalyzer : public PacketReceiver,
if (RtpHeaderParser::IsRtcp(packet, length)) {
return receiver_->DeliverPacket(media_type, packet, length, packet_time);
}
-
RtpUtility::RtpHeaderParser parser(packet, length);
RTPHeader header;
parser.Parse(&header);
@@ -274,8 +273,8 @@ class VideoAnalyzer : public PacketReceiver,
void PostEncodeFrameCallback(const EncodedFrame& encoded_frame) {
rtc::CritScope lock(&crit_);
if (!first_sent_timestamp_ &&
- encoded_frame.encoded_width_ == selected_width_ &&
- encoded_frame.encoded_height_ == selected_height_) {
+ encoded_frame.encoded_width_ == selected_stream_width_ &&
+ encoded_frame.encoded_height_ == selected_stream_height_) {
first_sent_timestamp_ = rtc::Optional<uint32_t>(encoded_frame.timestamp_);
}
}
@@ -289,6 +288,7 @@ class VideoAnalyzer : public PacketReceiver,
int64_t current_time =
Clock::GetRealTimeClock()->CurrentNtpInMilliseconds();
+
bool result = transport_->SendRtp(packet, length, options);
{
rtc::CritScope lock(&crit_);
@@ -857,8 +857,8 @@ class VideoAnalyzer : public PacketReceiver,
const std::string graph_title_;
const uint32_t ssrc_to_analyze_;
const uint32_t rtx_ssrc_to_analyze_;
- const uint32_t selected_width_;
- const uint32_t selected_height_;
+ const uint32_t selected_stream_width_;
+ const uint32_t selected_stream_height_;
PreEncodeProxy pre_encode_proxy_;
OnEncodeTimingProxy encode_timing_proxy_;
std::vector<Sample> samples_ GUARDED_BY(comparison_lock_);
@@ -1206,25 +1206,67 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
}
}
-void VideoQualityTest::SetupScreenshare() {
- RTC_CHECK(params_.screenshare.enabled);
-
- // Fill out codec settings.
- video_encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen;
- degradation_preference_ =
- VideoSendStream::DegradationPreference::kMaintainResolution;
- if (params_.video.codec == "VP8") {
- VideoCodecVP8 vp8_settings = VideoEncoder::GetDefaultVp8Settings();
- vp8_settings.denoisingOn = false;
- vp8_settings.frameDroppingOn = false;
- vp8_settings.numberOfTemporalLayers =
- static_cast<unsigned char>(params_.video.num_temporal_layers);
- video_encoder_config_.encoder_specific_settings = new rtc::RefCountedObject<
- VideoEncoderConfig::Vp8EncoderSpecificSettings>(vp8_settings);
- } else if (params_.video.codec == "VP9") {
+void VideoQualityTest::SetupScreenshareOrSVC() {
+ if (params_.screenshare.enabled) {
+ // Fill out codec settings.
+ video_encoder_config_.content_type =
+ VideoEncoderConfig::ContentType::kScreen;
+ degradation_preference_ =
+ VideoSendStream::DegradationPreference::kMaintainResolution;
+ if (params_.video.codec == "VP8") {
+ VideoCodecVP8 vp8_settings = VideoEncoder::GetDefaultVp8Settings();
+ vp8_settings.denoisingOn = false;
+ vp8_settings.frameDroppingOn = false;
+ vp8_settings.numberOfTemporalLayers =
+ static_cast<unsigned char>(params_.video.num_temporal_layers);
+ video_encoder_config_.encoder_specific_settings =
+ new rtc::RefCountedObject<
+ VideoEncoderConfig::Vp8EncoderSpecificSettings>(vp8_settings);
+ } else if (params_.video.codec == "VP9") {
+ VideoCodecVP9 vp9_settings = VideoEncoder::GetDefaultVp9Settings();
+ vp9_settings.denoisingOn = false;
+ vp9_settings.frameDroppingOn = false;
+ vp9_settings.numberOfTemporalLayers =
+ static_cast<unsigned char>(params_.video.num_temporal_layers);
+ vp9_settings.numberOfSpatialLayers =
+ static_cast<unsigned char>(params_.ss.num_spatial_layers);
+ video_encoder_config_.encoder_specific_settings =
+ new rtc::RefCountedObject<
+ VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings);
+ }
+ // Setup frame generator.
+ const size_t kWidth = 1850;
+ const size_t kHeight = 1110;
+ std::vector<std::string> slides;
+ slides.push_back(test::ResourcePath("web_screenshot_1850_1110", "yuv"));
+ slides.push_back(test::ResourcePath("presentation_1850_1110", "yuv"));
+ slides.push_back(test::ResourcePath("photo_1850_1110", "yuv"));
+ slides.push_back(test::ResourcePath("difficult_photo_1850_1110", "yuv"));
+
+ if (params_.screenshare.scroll_duration == 0) {
+ // Cycle image every slide_change_interval seconds.
+ frame_generator_.reset(test::FrameGenerator::CreateFromYuvFile(
+ slides, kWidth, kHeight,
+ params_.screenshare.slide_change_interval * params_.video.fps));
+ } else {
+ RTC_CHECK_LE(params_.video.width, kWidth);
+ RTC_CHECK_LE(params_.video.height, kHeight);
+ RTC_CHECK_GT(params_.screenshare.slide_change_interval, 0);
+ const int kPauseDurationMs = (params_.screenshare.slide_change_interval -
+ params_.screenshare.scroll_duration) *
+ 1000;
+ RTC_CHECK_LE(params_.screenshare.scroll_duration,
+ params_.screenshare.slide_change_interval);
+
+ frame_generator_.reset(
+ test::FrameGenerator::CreateScrollingInputFromYuvFiles(
+ clock_, slides, kWidth, kHeight, params_.video.width,
+ params_.video.height, params_.screenshare.scroll_duration * 1000,
+ kPauseDurationMs));
+ }
+ } else if (params_.ss.num_spatial_layers > 1) { // For non-screenshare case.
+ RTC_CHECK(params_.video.codec == "VP9");
VideoCodecVP9 vp9_settings = VideoEncoder::GetDefaultVp9Settings();
- vp9_settings.denoisingOn = false;
- vp9_settings.frameDroppingOn = false;
vp9_settings.numberOfTemporalLayers =
static_cast<unsigned char>(params_.video.num_temporal_layers);
vp9_settings.numberOfSpatialLayers =
@@ -1232,37 +1274,6 @@ void VideoQualityTest::SetupScreenshare() {
video_encoder_config_.encoder_specific_settings = new rtc::RefCountedObject<
VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings);
}
-
- // Setup frame generator.
- const size_t kWidth = 1850;
- const size_t kHeight = 1110;
- std::vector<std::string> slides;
- slides.push_back(test::ResourcePath("web_screenshot_1850_1110", "yuv"));
- slides.push_back(test::ResourcePath("presentation_1850_1110", "yuv"));
- slides.push_back(test::ResourcePath("photo_1850_1110", "yuv"));
- slides.push_back(test::ResourcePath("difficult_photo_1850_1110", "yuv"));
-
- if (params_.screenshare.scroll_duration == 0) {
- // Cycle image every slide_change_interval seconds.
- frame_generator_.reset(test::FrameGenerator::CreateFromYuvFile(
- slides, kWidth, kHeight,
- params_.screenshare.slide_change_interval * params_.video.fps));
- } else {
- RTC_CHECK_LE(params_.video.width, kWidth);
- RTC_CHECK_LE(params_.video.height, kHeight);
- RTC_CHECK_GT(params_.screenshare.slide_change_interval, 0);
- const int kPauseDurationMs = (params_.screenshare.slide_change_interval -
- params_.screenshare.scroll_duration) *
- 1000;
- RTC_CHECK_LE(params_.screenshare.scroll_duration,
- params_.screenshare.slide_change_interval);
-
- frame_generator_.reset(
- test::FrameGenerator::CreateScrollingInputFromYuvFiles(
- clock_, slides, kWidth, kHeight, params_.video.width,
- params_.video.height, params_.screenshare.scroll_duration * 1000,
- kPauseDurationMs));
- }
}
void VideoQualityTest::CreateCapturer() {
@@ -1332,27 +1343,13 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
// 0.0 by default. Setting the thresholds to -1.1 prevents the unnecessary
// abort.
VideoStream& selected_stream = params_.ss.streams[params_.ss.selected_stream];
- int selected_sl = params_.ss.selected_sl != -1
- ? params_.ss.selected_sl
- : params_.ss.num_spatial_layers - 1;
- bool disable_quality_check =
- selected_stream.width != params_.video.width ||
- selected_stream.height != params_.video.height ||
- (!params_.ss.spatial_layers.empty() &&
- params_.ss.spatial_layers[selected_sl].scaling_factor_num !=
- params_.ss.spatial_layers[selected_sl].scaling_factor_den);
- if (disable_quality_check) {
- fprintf(stderr,
- "Warning: Calculating PSNR and SSIM for downsized resolution "
- "not implemented yet! Skipping PSNR and SSIM calculations!\n");
- }
bool is_quick_test_enabled =
field_trial::FindFullName("WebRTC-QuickPerfTest") == "Enabled";
VideoAnalyzer analyzer(
&send_transport, params_.analyzer.test_label,
- disable_quality_check ? -1.1 : params_.analyzer.avg_psnr_threshold,
- disable_quality_check ? -1.1 : params_.analyzer.avg_ssim_threshold,
+
+ params_.analyzer.avg_psnr_threshold, params_.analyzer.avg_ssim_threshold,
is_quick_test_enabled
? kFramesSentInQuickTest
: params_.analyzer.test_durations_secs * params_.video.fps,
@@ -1373,8 +1370,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
RTC_DCHECK(!video_send_config_.post_encode_callback);
video_send_config_.post_encode_callback = analyzer.encode_timing_proxy();
- if (params_.screenshare.enabled)
- SetupScreenshare();
+ SetupScreenshareOrSVC();
CreateFlexfecStreams();
CreateVideoStreams();
@@ -1513,7 +1509,7 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
video_receive_configs_[stream_id].sync_group = kSyncGroup;
if (params_.screenshare.enabled)
- SetupScreenshare();
+ SetupScreenshareOrSVC();
video_send_stream_ = call->CreateVideoSendStream(
video_send_config_.Copy(), video_encoder_config_.Copy());
« 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