diff --git a/webrtc/video/full_stack.cc b/webrtc/video/full_stack.cc index 70ba6c6449..1220482a1d 100644 --- a/webrtc/video/full_stack.cc +++ b/webrtc/video/full_stack.cc @@ -54,6 +54,7 @@ struct FullStackTestParams { double avg_psnr_threshold; double avg_ssim_threshold; int test_durations_secs; + std::string codec; FakeNetworkPipe::Config link; }; @@ -499,11 +500,23 @@ void FullStackTest::RunTest(const FullStackTestParams& params) { CreateSendConfig(1); - rtc::scoped_ptr encoder( - VideoEncoder::Create(VideoEncoder::kVp8)); - send_config_.encoder_settings.encoder = encoder.get(); - send_config_.encoder_settings.payload_name = "VP8"; + rtc::scoped_ptr encoder; + if (params.codec == "VP8") { + encoder = + rtc::scoped_ptr(VideoEncoder::Create(VideoEncoder::kVp8)); + send_config_.encoder_settings.encoder = encoder.get(); + send_config_.encoder_settings.payload_name = "VP8"; + } else if (params.codec == "VP9") { + encoder = + rtc::scoped_ptr(VideoEncoder::Create(VideoEncoder::kVp9)); + send_config_.encoder_settings.encoder = encoder.get(); + send_config_.encoder_settings.payload_name = "VP9"; + } else { + RTC_NOTREACHED() << "Codec not supported!"; + return; + } send_config_.encoder_settings.payload_type = 124; + send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs; send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; @@ -516,14 +529,24 @@ void FullStackTest::RunTest(const FullStackTestParams& params) { stream->max_bitrate_bps = params.max_bitrate_bps; stream->max_framerate = params.clip.fps; + VideoCodecVP8 vp8_settings; + VideoCodecVP9 vp9_settings; if (params.screenshare) { encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; encoder_config_.min_transmit_bitrate_bps = 400 * 1000; - VideoCodecVP8 vp8_settings = VideoEncoder::GetDefaultVp8Settings(); - vp8_settings.denoisingOn = false; - vp8_settings.frameDroppingOn = false; - vp8_settings.numberOfTemporalLayers = 2; - encoder_config_.encoder_specific_settings = &vp8_settings; + if (params.codec == "VP8") { + vp8_settings = VideoEncoder::GetDefaultVp8Settings(); + vp8_settings.denoisingOn = false; + vp8_settings.frameDroppingOn = false; + vp8_settings.numberOfTemporalLayers = 2; + encoder_config_.encoder_specific_settings = &vp8_settings; + } else if (params.codec == "VP9") { + vp9_settings = VideoEncoder::GetDefaultVp9Settings(); + vp9_settings.denoisingOn = false; + vp9_settings.frameDroppingOn = false; + vp9_settings.numberOfTemporalLayers = 2; + encoder_config_.encoder_specific_settings = &vp9_settings; + } stream->temporal_layer_thresholds_bps.clear(); stream->temporal_layer_thresholds_bps.push_back(stream->target_bitrate_bps); @@ -591,7 +614,8 @@ TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) { 300000, 36.0, 0.96, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; RunTest(paris_qcif); } @@ -605,7 +629,8 @@ TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) { 700000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; RunTest(foreman_cif); } @@ -618,7 +643,8 @@ TEST_F(FullStackTest, ForemanCifPlr5) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; foreman_cif.link.loss_percent = 5; foreman_cif.link.queue_delay_ms = 50; RunTest(foreman_cif); @@ -633,7 +659,8 @@ TEST_F(FullStackTest, ForemanCif500kbps) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; foreman_cif.link.queue_length_packets = 0; foreman_cif.link.queue_delay_ms = 0; foreman_cif.link.link_capacity_kbps = 500; @@ -649,7 +676,8 @@ TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; foreman_cif.link.queue_length_packets = 32; foreman_cif.link.queue_delay_ms = 0; foreman_cif.link.link_capacity_kbps = 500; @@ -665,7 +693,8 @@ TEST_F(FullStackTest, ForemanCif500kbps100ms) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; foreman_cif.link.queue_length_packets = 0; foreman_cif.link.queue_delay_ms = 100; foreman_cif.link.link_capacity_kbps = 500; @@ -681,7 +710,8 @@ TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; foreman_cif.link.queue_length_packets = 32; foreman_cif.link.queue_delay_ms = 100; foreman_cif.link.link_capacity_kbps = 500; @@ -697,7 +727,8 @@ TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; foreman_cif.link.queue_length_packets = 32; foreman_cif.link.queue_delay_ms = 100; foreman_cif.link.link_capacity_kbps = 1000; @@ -707,7 +738,7 @@ TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) { // Temporarily disabled on Android due to low test timeouts. // https://code.google.com/p/chromium/issues/detail?id=513170 #include "webrtc/test/testsupport/gtest_disable.h" -TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlides)) { +TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlidesVP8_2TL)) { FullStackTestParams screenshare_params = { "screenshare_slides", {"screenshare_slides", 1850, 1110, 5}, @@ -717,7 +748,24 @@ TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlides)) { 2000000, 0.0, 0.0, - kFullStackTestDurationSecs}; + kFullStackTestDurationSecs, + "VP8"}; + RunTest(screenshare_params); +} + +// Disabled on Android along with VP8 screenshare above. +TEST_F(FullStackTest, DISABLED_ON_ANDROID(ScreenshareSlidesVP9_2TL)) { + FullStackTestParams screenshare_params = { + "screenshare_slides_vp9_2tl", + {"screenshare_slides", 1850, 1110, 5}, + true, + 50000, + 200000, + 2000000, + 0.0, + 0.0, + kFullStackTestDurationSecs, + "VP9"}; RunTest(screenshare_params); } } // namespace webrtc diff --git a/webrtc/video/screenshare_loopback.cc b/webrtc/video/screenshare_loopback.cc index a308424981..8f0ab63da5 100644 --- a/webrtc/video/screenshare_loopback.cc +++ b/webrtc/video/screenshare_loopback.cc @@ -132,6 +132,11 @@ class ScreenshareLoopback : public test::Loopback { vp8_settings_.denoisingOn = false; vp8_settings_.frameDroppingOn = false; vp8_settings_.numberOfTemporalLayers = 2; + + vp9_settings_ = VideoEncoder::GetDefaultVp9Settings(); + vp9_settings_.denoisingOn = false; + vp9_settings_.frameDroppingOn = false; + vp9_settings_.numberOfTemporalLayers = 2; } virtual ~ScreenshareLoopback() {} @@ -141,7 +146,14 @@ class ScreenshareLoopback : public test::Loopback { VideoStream* stream = &encoder_config.streams[0]; encoder_config.content_type = VideoEncoderConfig::ContentType::kScreen; encoder_config.min_transmit_bitrate_bps = flags::MinTransmitBitrate(); - encoder_config.encoder_specific_settings = &vp8_settings_; + if (config_.codec == "VP8") { + encoder_config.encoder_specific_settings = &vp8_settings_; + } else if (config_.codec == "VP9") { + encoder_config.encoder_specific_settings = &vp9_settings_; + } else { + RTC_NOTREACHED() << "Codec not supported!"; + abort(); + } stream->temporal_layer_thresholds_bps.clear(); stream->target_bitrate_bps = static_cast(config_.start_bitrate_kbps) * 1000; @@ -178,6 +190,7 @@ class ScreenshareLoopback : public test::Loopback { } VideoCodecVP8 vp8_settings_; + VideoCodecVP9 vp9_settings_; }; void Loopback() {