From 68af10de7ffc7ccf9b1ee12bc163acb814a626d0 Mon Sep 17 00:00:00 2001 From: ilnik Date: Thu, 2 Mar 2017 04:59:33 -0800 Subject: [PATCH] Revert of fixed VP8 simulcast to not decode non-selected streams (patchset #5 id:80001 of https://codereview.webrtc.org/2728553003/ ) Reason for revert: Causes regression in VP8 simulcast metrics (receive time, encoded frame size, etc) as two excluded streams' decoders request keyframes periodically, which affects metrics of a selected stream. Original issue's description: > In full-stack tests: fixed VP8 simulcast to not decode non-selected streams. > > BUG=webrtc:7095 > > Review-Url: https://codereview.webrtc.org/2728553003 > Cr-Commit-Position: refs/heads/master@{#16948} > Committed: https://chromium.googlesource.com/external/webrtc/+/8dccd67520ac40fb9c644f3ecc9cecd160002883 TBR=sprang@webrtc.org,kjellander@webrtc.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=webrtc:7095 Review-Url: https://codereview.webrtc.org/2729623005 Cr-Commit-Position: refs/heads/master@{#16967} --- webrtc/test/layer_filtering_transport.cc | 8 ++---- webrtc/test/layer_filtering_transport.h | 4 +-- webrtc/video/video_quality_test.cc | 31 ++++++++++-------------- 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/webrtc/test/layer_filtering_transport.cc b/webrtc/test/layer_filtering_transport.cc index e5052bee7b..26805539b9 100644 --- a/webrtc/test/layer_filtering_transport.cc +++ b/webrtc/test/layer_filtering_transport.cc @@ -26,14 +26,12 @@ LayerFilteringTransport::LayerFilteringTransport( uint8_t vp8_video_payload_type, uint8_t vp9_video_payload_type, int selected_tl, - int selected_sl, - const std::set &excluded_ssrcs) + int selected_sl) : test::DirectTransport(config, send_call), vp8_video_payload_type_(vp8_video_payload_type), vp9_video_payload_type_(vp9_video_payload_type), selected_tl_(selected_tl), selected_sl_(selected_sl), - excluded_ssrcs_(std::move(excluded_ssrcs)), discarded_last_packet_(false) {} bool LayerFilteringTransport::DiscardedLastPacket() const { @@ -83,9 +81,7 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, } else if ((selected_tl_ >= 0 && temporal_idx != kNoTemporalIdx && temporal_idx > selected_tl_) || (selected_sl_ >= 0 && spatial_idx != kNoSpatialIdx && - spatial_idx > selected_sl_) || - excluded_ssrcs_.find(header.ssrc) != - excluded_ssrcs_.end()) { + spatial_idx > selected_sl_)) { // Truncate packet to a padding packet. length = header.headerLength + 1; temp_buffer[0] |= (1 << 5); // P = 1. diff --git a/webrtc/test/layer_filtering_transport.h b/webrtc/test/layer_filtering_transport.h index c2ab56fa00..8f8cc2e313 100644 --- a/webrtc/test/layer_filtering_transport.h +++ b/webrtc/test/layer_filtering_transport.h @@ -27,8 +27,7 @@ class LayerFilteringTransport : public test::DirectTransport { uint8_t vp8_video_payload_type, uint8_t vp9_video_payload_type, int selected_tl, - int selected_sl, - const std::set &excluded_ssrcs_); + int selected_sl); bool DiscardedLastPacket() const; bool SendRtp(const uint8_t* data, size_t length, @@ -42,7 +41,6 @@ class LayerFilteringTransport : public test::DirectTransport { // selected one. -1 to disable filtering. const int selected_tl_; const int selected_sl_; - const std::set excluded_ssrcs_; bool discarded_last_packet_; }; diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc index 920076d865..6818a5cad6 100644 --- a/webrtc/video/video_quality_test.cc +++ b/webrtc/video/video_quality_test.cc @@ -1438,26 +1438,21 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { call_config.bitrate_config = params.call.call_bitrate_config; CreateCalls(call_config, call_config); - VideoStream& selected_stream = params_.ss.streams[params_.ss.selected_stream]; + test::LayerFilteringTransport send_transport( + params_.pipe, sender_call_.get(), kPayloadTypeVP8, kPayloadTypeVP9, + params_.video.selected_tl, params_.ss.selected_sl); + test::DirectTransport recv_transport(params_.pipe, receiver_call_.get()); std::string graph_title = params_.analyzer.graph_title; if (graph_title.empty()) graph_title = VideoQualityTest::GenerateGraphTitle(); - std::set excluded_ssrcs; - for (size_t i = 0; i < params_.ss.streams.size(); i++) { - if (i != params_.ss.selected_stream) { - excluded_ssrcs.insert(kVideoSendSsrcs[i]); - excluded_ssrcs.insert(kSendRtxSsrcs[i]); - } - } - - test::LayerFilteringTransport send_transport( - params_.pipe, sender_call_.get(), kPayloadTypeVP8, kPayloadTypeVP9, - params_.video.selected_tl, params_.ss.selected_sl, - excluded_ssrcs); - test::DirectTransport recv_transport(params_.pipe, receiver_call_.get()); - + // In the case of different resolutions, the functions calculating PSNR and + // SSIM return -1.0, instead of a positive value as usual. VideoAnalyzer + // aborts if the average psnr/ssim are below the given threshold, which is + // 0.0 by default. Setting the thresholds to -1.1 prevents the unnecessary + // abort. + VideoStream& selected_stream = params_.ss.streams[params_.ss.selected_stream]; bool is_quick_test_enabled = field_trial::IsEnabled("WebRTC-QuickPerfTest"); VideoAnalyzer analyzer( @@ -1589,8 +1584,7 @@ void VideoQualityTest::RunWithRenderers(const Params& params) { // calls. test::LayerFilteringTransport transport( params.pipe, call.get(), kPayloadTypeVP8, kPayloadTypeVP9, - params.video.selected_tl, params_.ss.selected_sl, - std::set()); + params.video.selected_tl, params_.ss.selected_sl); // TODO(ivica): Use two calls to be able to merge with RunWithAnalyzer or at // least share as much code as possible. That way this test would also match // the full stack tests better. @@ -1623,7 +1617,8 @@ void VideoQualityTest::RunWithRenderers(const Params& params) { if (params_.audio.enabled && params_.audio.sync_video) video_receive_configs_[stream_id].sync_group = kSyncGroup; - SetupScreenshareOrSVC(); + if (params_.screenshare.enabled) + SetupScreenshareOrSVC(); video_send_stream_ = call->CreateVideoSendStream( video_send_config_.Copy(), video_encoder_config_.Copy());