Index: webrtc/video/video_quality_test.cc |
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc |
index 9c734604ec1f7d99a2b8c0e59ed6e98660b0ac1e..14c76239caa6a807ccd3d4effa252b1e9d6e8025 100644 |
--- a/webrtc/video/video_quality_test.cc |
+++ b/webrtc/video/video_quality_test.cc |
@@ -134,8 +134,8 @@ class VideoAnalyzer : public PacketReceiver, |
FILE* graph_data_output_file, |
const std::string& graph_title, |
uint32_t ssrc_to_analyze, |
- uint32_t selected_width, |
- uint32_t selected_height) |
+ uint32_t selected_stream_width, |
+ uint32_t selected_stream_height) |
: transport_(transport), |
receiver_(nullptr), |
send_stream_(nullptr), |
@@ -145,8 +145,8 @@ class VideoAnalyzer : public PacketReceiver, |
graph_data_output_file_(graph_data_output_file), |
graph_title_(graph_title), |
ssrc_to_analyze_(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), |
@@ -226,10 +226,10 @@ 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); |
+ |
if (!IsFlexfec(header.payloadType) && header.ssrc != ssrc_to_analyze_) { |
// Ignore FlexFEC timestamps, to avoid collisions with media timestamps. |
// (FlexFEC and media are sent on different SSRCs, which have different |
@@ -266,8 +266,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_); |
} |
} |
@@ -281,6 +281,7 @@ class VideoAnalyzer : public PacketReceiver, |
int64_t current_time = |
Clock::GetRealTimeClock()->CurrentNtpInMilliseconds(); |
+ |
bool result = transport_->SendRtp(packet, length, options); |
{ |
rtc::CritScope lock(&crit_); |
@@ -844,8 +845,8 @@ class VideoAnalyzer : public PacketReceiver, |
FILE* const graph_data_output_file_; |
const std::string graph_title_; |
const uint32_t 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_); |
@@ -1189,25 +1190,70 @@ 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::SetupScreenshareOrSimulcast() { |
sprang_webrtc
2017/02/10 10:34:27
Looks like it's screenshare or svc, rather than si
ilnik
2017/02/10 10:50:46
Acknowledged.
|
+ if (params_.screenshare.enabled) { |
+ // Fill out codec settings. |
+ video_encoder_config_.content_type = |
+ VideoEncoderConfig::ContentType::kScreen; |
+ // Fill out codec settings. |
+ video_encoder_config_.content_type = |
+ VideoEncoderConfig::ContentType::kScreen; |
sprang_webrtc
2017/02/10 10:34:27
Copy/pastepaste? :)
ilnik
2017/02/10 10:50:46
Acknowledged.
|
+ 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) { |
sprang_webrtc
2017/02/10 10:34:27
Add comment this is for the non-screenshare case.
ilnik
2017/02/10 10:50:46
Acknowledged.
|
+ 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 = |
@@ -1215,37 +1261,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() { |
@@ -1315,25 +1330,10 @@ 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"); |
- } |
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, |
params_.analyzer.test_durations_secs * params_.video.fps, |
graph_data_output_file, graph_title, |
kVideoSendSsrcs[params_.ss.selected_stream], |
@@ -1352,8 +1352,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(); |
+ SetupScreenshareOrSimulcast(); |
CreateFlexfecStreams(); |
CreateVideoStreams(); |
@@ -1492,7 +1491,7 @@ void VideoQualityTest::RunWithRenderers(const Params& params) { |
video_receive_configs_[stream_id].sync_group = kSyncGroup; |
if (params_.screenshare.enabled) |
- SetupScreenshare(); |
+ SetupScreenshareOrSimulcast(); |
video_send_stream_ = call->CreateVideoSendStream( |
video_send_config_.Copy(), video_encoder_config_.Copy()); |