diff --git a/webrtc/test/layer_filtering_transport.cc b/webrtc/test/layer_filtering_transport.cc index 26805539b9..e5052bee7b 100644 --- a/webrtc/test/layer_filtering_transport.cc +++ b/webrtc/test/layer_filtering_transport.cc @@ -26,12 +26,14 @@ LayerFilteringTransport::LayerFilteringTransport( uint8_t vp8_video_payload_type, uint8_t vp9_video_payload_type, int selected_tl, - int selected_sl) + int selected_sl, + const std::set &excluded_ssrcs) : 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 { @@ -81,7 +83,9 @@ 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_)) { + spatial_idx > selected_sl_) || + excluded_ssrcs_.find(header.ssrc) != + excluded_ssrcs_.end()) { // 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 8f8cc2e313..c2ab56fa00 100644 --- a/webrtc/test/layer_filtering_transport.h +++ b/webrtc/test/layer_filtering_transport.h @@ -27,7 +27,8 @@ class LayerFilteringTransport : public test::DirectTransport { uint8_t vp8_video_payload_type, uint8_t vp9_video_payload_type, int selected_tl, - int selected_sl); + int selected_sl, + const std::set &excluded_ssrcs_); bool DiscardedLastPacket() const; bool SendRtp(const uint8_t* data, size_t length, @@ -41,6 +42,7 @@ 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 6818a5cad6..920076d865 100644 --- a/webrtc/video/video_quality_test.cc +++ b/webrtc/video/video_quality_test.cc @@ -1438,21 +1438,26 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { call_config.bitrate_config = params.call.call_bitrate_config; CreateCalls(call_config, call_config); - 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()); + VideoStream& selected_stream = params_.ss.streams[params_.ss.selected_stream]; std::string graph_title = params_.analyzer.graph_title; if (graph_title.empty()) graph_title = VideoQualityTest::GenerateGraphTitle(); - // 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]; + 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()); + bool is_quick_test_enabled = field_trial::IsEnabled("WebRTC-QuickPerfTest"); VideoAnalyzer analyzer( @@ -1584,7 +1589,8 @@ void VideoQualityTest::RunWithRenderers(const Params& params) { // calls. test::LayerFilteringTransport transport( params.pipe, call.get(), kPayloadTypeVP8, kPayloadTypeVP9, - params.video.selected_tl, params_.ss.selected_sl); + params.video.selected_tl, params_.ss.selected_sl, + std::set()); // 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. @@ -1617,8 +1623,7 @@ void VideoQualityTest::RunWithRenderers(const Params& params) { if (params_.audio.enabled && params_.audio.sync_video) video_receive_configs_[stream_id].sync_group = kSyncGroup; - if (params_.screenshare.enabled) - SetupScreenshareOrSVC(); + SetupScreenshareOrSVC(); video_send_stream_ = call->CreateVideoSendStream( video_send_config_.Copy(), video_encoder_config_.Copy());