OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 1987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1998 AddSendStream(); | 1998 AddSendStream(); |
1999 | 1999 |
2000 cricket::FakeVideoCapturer capturer; | 2000 cricket::FakeVideoCapturer capturer; |
2001 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); | 2001 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); |
2002 ASSERT_EQ(cricket::CS_RUNNING, | 2002 ASSERT_EQ(cricket::CS_RUNNING, |
2003 capturer.Start(capturer.GetSupportedFormats()->front())); | 2003 capturer.Start(capturer.GetSupportedFormats()->front())); |
2004 ASSERT_TRUE(channel_->SetSend(true)); | 2004 ASSERT_TRUE(channel_->SetSend(true)); |
2005 | 2005 |
2006 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 2006 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
2007 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 2007 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
2008 webrtc::LoadObserver* overuse_callback = | |
2009 send_stream->GetConfig().overuse_callback; | |
2010 ASSERT_TRUE(overuse_callback != NULL); | |
2011 | 2008 |
2012 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2009 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2013 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2010 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2014 EXPECT_EQ(1280, send_stream->GetLastWidth()); | 2011 EXPECT_EQ(1280, send_stream->GetLastWidth()); |
2015 EXPECT_EQ(720, send_stream->GetLastHeight()); | 2012 EXPECT_EQ(720, send_stream->GetLastHeight()); |
2016 | 2013 |
2017 // Trigger overuse. | 2014 // Trigger overuse. |
2018 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 2015 rtc::VideoSinkWants wants; |
| 2016 wants.max_pixel_count = rtc::Optional<int>( |
| 2017 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); |
| 2018 send_stream->InjectVideoSinkWants(wants); |
2019 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2019 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2020 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 2020 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
2021 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); | 2021 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); |
2022 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); | 2022 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); |
2023 | 2023 |
2024 // Trigger overuse again. | 2024 // Trigger overuse again. |
2025 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 2025 wants.max_pixel_count = rtc::Optional<int>( |
| 2026 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); |
| 2027 send_stream->InjectVideoSinkWants(wants); |
2026 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2028 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2027 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); | 2029 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
2028 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); | 2030 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); |
2029 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); | 2031 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); |
2030 | 2032 |
2031 // Trigger overuse again. This should not decrease the resolution since we | |
2032 // should only adapt the resolution down max two steps. | |
2033 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | |
2035 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); | |
2036 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); | |
2037 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); | |
2038 | |
2039 // Change input resolution. | 2033 // Change input resolution. |
2040 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); | 2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
2041 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); | 2035 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); |
2042 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); | 2036 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); |
2043 EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); | 2037 EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); |
2044 | 2038 |
2045 // Trigger underuse which should go back up in resolution. | 2039 // Trigger underuse which should go back up in resolution. |
2046 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | 2040 wants.max_pixel_count = rtc::Optional<int>(); |
| 2041 wants.max_pixel_count_step_up = rtc::Optional<int>( |
| 2042 send_stream->GetLastWidth() * send_stream->GetLastHeight()); |
| 2043 send_stream->InjectVideoSinkWants(wants); |
2047 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); | 2044 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
2048 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); | 2045 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); |
2049 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); | 2046 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); |
2050 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); | 2047 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); |
2051 | 2048 |
2052 // Trigger underuse which should go back up in resolution. | 2049 // Trigger underuse which should go back up in resolution. |
2053 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | 2050 wants.max_pixel_count = rtc::Optional<int>(); |
| 2051 wants.max_pixel_count_step_up = rtc::Optional<int>( |
| 2052 send_stream->GetLastWidth() * send_stream->GetLastHeight()); |
| 2053 send_stream->InjectVideoSinkWants(wants); |
2054 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); | 2054 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
2055 EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames()); | 2055 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); |
2056 EXPECT_EQ(1284, send_stream->GetLastWidth()); | 2056 EXPECT_EQ(1284, send_stream->GetLastWidth()); |
2057 EXPECT_EQ(724, send_stream->GetLastHeight()); | 2057 EXPECT_EQ(724, send_stream->GetLastHeight()); |
2058 | 2058 |
2059 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2059 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
2060 } | 2060 } |
2061 | 2061 |
2062 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { | 2062 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { |
2063 cricket::VideoCodec codec = kVp8Codec720p; | 2063 cricket::VideoCodec codec = kVp8Codec720p; |
2064 cricket::VideoSendParameters parameters; | 2064 cricket::VideoSendParameters parameters; |
2065 parameters.codecs.push_back(codec); | 2065 parameters.codecs.push_back(codec); |
2066 | 2066 |
2067 MediaConfig media_config = MediaConfig(); | 2067 MediaConfig media_config = MediaConfig(); |
2068 channel_.reset( | 2068 channel_.reset( |
2069 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); | 2069 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); |
2070 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2070 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
2071 | 2071 |
2072 AddSendStream(); | 2072 AddSendStream(); |
2073 | 2073 |
2074 cricket::FakeVideoCapturer capturer; | 2074 cricket::FakeVideoCapturer capturer; |
2075 ASSERT_EQ(cricket::CS_RUNNING, | 2075 ASSERT_EQ(cricket::CS_RUNNING, |
2076 capturer.Start(capturer.GetSupportedFormats()->front())); | 2076 capturer.Start(capturer.GetSupportedFormats()->front())); |
2077 ASSERT_TRUE(channel_->SetSend(true)); | 2077 ASSERT_TRUE(channel_->SetSend(true)); |
2078 cricket::VideoOptions camera_options; | 2078 cricket::VideoOptions camera_options; |
| 2079 camera_options.is_screencast = rtc::Optional<bool>(false); |
2079 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, | 2080 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, |
2080 &capturer); | 2081 &capturer); |
2081 | 2082 |
2082 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 2083 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
2083 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 2084 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
2084 webrtc::LoadObserver* overuse_callback = | |
2085 send_stream->GetConfig().overuse_callback; | |
2086 ASSERT_TRUE(overuse_callback != NULL); | |
2087 | 2085 |
2088 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2086 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2089 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2087 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2090 EXPECT_EQ(1280, send_stream->GetLastWidth()); | 2088 EXPECT_EQ(1280, send_stream->GetLastWidth()); |
2091 EXPECT_EQ(720, send_stream->GetLastHeight()); | 2089 EXPECT_EQ(720, send_stream->GetLastHeight()); |
2092 | 2090 |
2093 // Trigger overuse. | 2091 // Trigger overuse. |
2094 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 2092 rtc::VideoSinkWants wants; |
| 2093 wants.max_pixel_count = rtc::Optional<int>( |
| 2094 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); |
| 2095 send_stream->InjectVideoSinkWants(wants); |
2095 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2096 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2096 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 2097 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
2097 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); | 2098 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); |
2098 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); | 2099 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); |
2099 | 2100 |
2100 // Switch to screen share. Expect no CPU adaptation. | 2101 // Switch to screen share. Expect no CPU adaptation. |
2101 cricket::FakeVideoCapturer screen_share(true); | 2102 cricket::FakeVideoCapturer screen_share(true); |
2102 ASSERT_EQ(cricket::CS_RUNNING, | 2103 ASSERT_EQ(cricket::CS_RUNNING, |
2103 screen_share.Start(screen_share.GetSupportedFormats()->front())); | 2104 screen_share.Start(screen_share.GetSupportedFormats()->front())); |
2104 cricket::VideoOptions screenshare_options; | 2105 cricket::VideoOptions screenshare_options; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2140 | 2141 |
2141 cricket::FakeVideoCapturer capturer; | 2142 cricket::FakeVideoCapturer capturer; |
2142 VideoOptions options; | 2143 VideoOptions options; |
2143 options.is_screencast = rtc::Optional<bool>(is_screenshare); | 2144 options.is_screencast = rtc::Optional<bool>(is_screenshare); |
2144 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); | 2145 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); |
2145 EXPECT_EQ(cricket::CS_RUNNING, | 2146 EXPECT_EQ(cricket::CS_RUNNING, |
2146 capturer.Start(capturer.GetSupportedFormats()->front())); | 2147 capturer.Start(capturer.GetSupportedFormats()->front())); |
2147 | 2148 |
2148 EXPECT_TRUE(channel_->SetSend(true)); | 2149 EXPECT_TRUE(channel_->SetSend(true)); |
2149 | 2150 |
2150 // Trigger overuse. | |
2151 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
2152 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 2151 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
2153 webrtc::LoadObserver* overuse_callback = | |
2154 send_stream->GetConfig().overuse_callback; | |
2155 | 2152 |
2156 if (!enable_overuse) { | 2153 if (!enable_overuse || is_screenshare) { |
2157 ASSERT_TRUE(overuse_callback == NULL); | 2154 EXPECT_TRUE(send_stream->resolution_scaling_disabled()); |
2158 | 2155 |
2159 EXPECT_TRUE(capturer.CaptureFrame()); | 2156 EXPECT_TRUE(capturer.CaptureFrame()); |
2160 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2157 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2161 | 2158 |
2162 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); | 2159 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); |
2163 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); | 2160 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); |
2164 | 2161 |
2165 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2162 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
2166 return; | 2163 return; |
2167 } | 2164 } |
2168 | 2165 |
2169 ASSERT_TRUE(overuse_callback != NULL); | 2166 EXPECT_FALSE(send_stream->resolution_scaling_disabled()); |
| 2167 // Trigger overuse. |
| 2168 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
| 2169 |
| 2170 rtc::VideoSinkWants wants; |
| 2171 wants.max_pixel_count = rtc::Optional<int>(codec.width * codec.height - 1); |
| 2172 send_stream->InjectVideoSinkWants(wants); |
| 2173 |
2170 EXPECT_TRUE(capturer.CaptureFrame()); | 2174 EXPECT_TRUE(capturer.CaptureFrame()); |
2171 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2175 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2172 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2173 | 2176 |
2174 EXPECT_TRUE(capturer.CaptureFrame()); | 2177 EXPECT_TRUE(capturer.CaptureFrame()); |
2175 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 2178 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
2176 | 2179 |
2177 if (is_screenshare) { | 2180 EXPECT_LT(send_stream->GetLastWidth(), codec.width); |
2178 // Do not adapt screen share. | 2181 EXPECT_LT(send_stream->GetLastHeight(), codec.height); |
2179 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); | |
2180 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); | |
2181 } else { | |
2182 EXPECT_LT(send_stream->GetLastWidth(), codec.width); | |
2183 EXPECT_LT(send_stream->GetLastHeight(), codec.height); | |
2184 } | |
2185 | 2182 |
2186 // Trigger underuse which should go back to normal resolution. | 2183 // Trigger underuse which should go back to normal resolution. |
2187 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | 2184 wants.max_pixel_count = rtc::Optional<int>(); |
| 2185 wants.max_pixel_count_step_up = rtc::Optional<int>( |
| 2186 send_stream->GetLastWidth() * send_stream->GetLastHeight()); |
| 2187 send_stream->InjectVideoSinkWants(wants); |
| 2188 |
2188 EXPECT_TRUE(capturer.CaptureFrame()); | 2189 EXPECT_TRUE(capturer.CaptureFrame()); |
2189 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); | 2190 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
2190 | 2191 |
2191 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); | 2192 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); |
2192 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); | 2193 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); |
2193 | 2194 |
2194 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2195 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
2195 } | 2196 } |
2196 | 2197 |
2197 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { | 2198 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { |
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2918 webrtc::VideoSendStream::Stats stats; | 2919 webrtc::VideoSendStream::Stats stats; |
2919 stats.preferred_media_bitrate_bps = 5; | 2920 stats.preferred_media_bitrate_bps = 5; |
2920 stream->SetStats(stats); | 2921 stream->SetStats(stats); |
2921 | 2922 |
2922 cricket::VideoMediaInfo info; | 2923 cricket::VideoMediaInfo info; |
2923 ASSERT_TRUE(channel_->GetStats(&info)); | 2924 ASSERT_TRUE(channel_->GetStats(&info)); |
2924 ASSERT_EQ(1u, info.senders.size()); | 2925 ASSERT_EQ(1u, info.senders.size()); |
2925 EXPECT_EQ(5, info.senders[0].preferred_bitrate); | 2926 EXPECT_EQ(5, info.senders[0].preferred_bitrate); |
2926 } | 2927 } |
2927 | 2928 |
2928 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { | 2929 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuAdaptationStats) { |
2929 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); | 2930 FakeVideoSendStream* stream = AddSendStream(); |
| 2931 webrtc::VideoSendStream::Stats stats; |
| 2932 stats.number_of_cpu_adapt_changes = 2; |
| 2933 stats.cpu_limited_resolution = true; |
| 2934 stream->SetStats(stats); |
2930 | 2935 |
2931 // Capture format VGA. | |
2932 cricket::FakeVideoCapturer video_capturer_vga; | |
2933 const std::vector<cricket::VideoFormat>* formats = | |
2934 video_capturer_vga.GetSupportedFormats(); | |
2935 cricket::VideoFormat capture_format_vga = (*formats)[1]; | |
2936 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); | |
2937 EXPECT_TRUE( | |
2938 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga)); | |
2939 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2940 | |
2941 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30); | |
2942 cricket::VideoSendParameters parameters; | |
2943 parameters.codecs.push_back(send_codec); | |
2944 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | |
2945 EXPECT_TRUE(channel_->SetSend(true)); | |
2946 | |
2947 // Verify that the CpuOveruseObserver is registered and trigger downgrade. | |
2948 | |
2949 // Trigger overuse. | |
2950 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
2951 webrtc::LoadObserver* overuse_callback = | |
2952 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; | |
2953 ASSERT_TRUE(overuse_callback != NULL); | |
2954 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2955 | |
2956 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. | |
2957 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2958 cricket::VideoMediaInfo info; | |
2959 EXPECT_TRUE(channel_->GetStats(&info)); | |
2960 ASSERT_EQ(1U, info.senders.size()); | |
2961 EXPECT_EQ(1, info.senders[0].adapt_changes); | |
2962 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); | |
2963 | |
2964 // Trigger upgrade and verify that we adapt back up to VGA. | |
2965 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | |
2966 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2967 info.Clear(); | |
2968 EXPECT_TRUE(channel_->GetStats(&info)); | |
2969 ASSERT_EQ(1U, info.senders.size()); | |
2970 EXPECT_EQ(2, info.senders[0].adapt_changes); | |
2971 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, | |
2972 info.senders[0].adapt_reason); | |
2973 | |
2974 // No capturer (no adapter). Adapt changes from old adapter should be kept. | |
2975 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); | |
2976 info.Clear(); | |
2977 EXPECT_TRUE(channel_->GetStats(&info)); | |
2978 ASSERT_EQ(1U, info.senders.size()); | |
2979 EXPECT_EQ(2, info.senders[0].adapt_changes); | |
2980 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, | |
2981 info.senders[0].adapt_reason); | |
2982 | |
2983 // Set new capturer, capture format HD. | |
2984 cricket::FakeVideoCapturer video_capturer_hd; | |
2985 cricket::VideoFormat capture_format_hd = (*formats)[0]; | |
2986 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd)); | |
2987 EXPECT_TRUE( | |
2988 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_hd)); | |
2989 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); | |
2990 | |
2991 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2. | |
2992 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2993 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); | |
2994 info.Clear(); | |
2995 EXPECT_TRUE(channel_->GetStats(&info)); | |
2996 ASSERT_EQ(1U, info.senders.size()); | |
2997 EXPECT_EQ(3, info.senders[0].adapt_changes); | |
2998 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); | |
2999 | |
3000 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); | |
3001 } | |
3002 | |
3003 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) { | |
3004 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); | |
3005 | |
3006 // Capture format VGA. | |
3007 cricket::FakeVideoCapturer video_capturer_vga; | |
3008 const std::vector<cricket::VideoFormat>* formats = | |
3009 video_capturer_vga.GetSupportedFormats(); | |
3010 cricket::VideoFormat capture_format_vga = (*formats)[1]; | |
3011 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); | |
3012 EXPECT_TRUE( | |
3013 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga)); | |
3014 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
3015 | |
3016 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30); | |
3017 cricket::VideoSendParameters parameters; | |
3018 parameters.codecs.push_back(send_codec); | |
3019 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | |
3020 EXPECT_TRUE(channel_->SetSend(true)); | |
3021 | |
3022 // Verify that the CpuOveruseObserver is registered and trigger downgrade. | |
3023 | |
3024 // Trigger overuse -> adapt CPU. | |
3025 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
3026 webrtc::LoadObserver* overuse_callback = | |
3027 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; | |
3028 ASSERT_TRUE(overuse_callback != NULL); | |
3029 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
3030 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
3031 cricket::VideoMediaInfo info; | 2936 cricket::VideoMediaInfo info; |
3032 EXPECT_TRUE(channel_->GetStats(&info)); | 2937 EXPECT_TRUE(channel_->GetStats(&info)); |
3033 ASSERT_EQ(1U, info.senders.size()); | 2938 ASSERT_EQ(1U, info.senders.size()); |
3034 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); | 2939 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); |
| 2940 EXPECT_EQ(2, info.senders[0].adapt_changes); |
| 2941 } |
3035 | 2942 |
3036 // Set bandwidth limitation stats for the stream -> adapt CPU + BW. | 2943 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsAdaptationAndBandwidthStats) { |
| 2944 FakeVideoSendStream* stream = AddSendStream(); |
3037 webrtc::VideoSendStream::Stats stats; | 2945 webrtc::VideoSendStream::Stats stats; |
| 2946 stats.number_of_cpu_adapt_changes = 2; |
| 2947 stats.cpu_limited_resolution = true; |
3038 stats.bw_limited_resolution = true; | 2948 stats.bw_limited_resolution = true; |
3039 fake_call_->GetVideoSendStreams().front()->SetStats(stats); | 2949 stream->SetStats(stats); |
3040 info.Clear(); | 2950 |
| 2951 cricket::VideoMediaInfo info; |
3041 EXPECT_TRUE(channel_->GetStats(&info)); | 2952 EXPECT_TRUE(channel_->GetStats(&info)); |
3042 ASSERT_EQ(1U, info.senders.size()); | 2953 ASSERT_EQ(1U, info.senders.size()); |
3043 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | | 2954 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | |
3044 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, | 2955 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, |
3045 info.senders[0].adapt_reason); | 2956 info.senders[0].adapt_reason); |
3046 | 2957 EXPECT_EQ(2, info.senders[0].adapt_changes); |
3047 // Trigger upgrade -> adapt BW. | |
3048 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | |
3049 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
3050 info.Clear(); | |
3051 EXPECT_TRUE(channel_->GetStats(&info)); | |
3052 ASSERT_EQ(1U, info.senders.size()); | |
3053 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, | |
3054 info.senders[0].adapt_reason); | |
3055 | |
3056 // Reset bandwidth limitation state -> adapt NONE. | |
3057 stats.bw_limited_resolution = false; | |
3058 fake_call_->GetVideoSendStreams().front()->SetStats(stats); | |
3059 info.Clear(); | |
3060 EXPECT_TRUE(channel_->GetStats(&info)); | |
3061 ASSERT_EQ(1U, info.senders.size()); | |
3062 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, | |
3063 info.senders[0].adapt_reason); | |
3064 | |
3065 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); | |
3066 } | 2958 } |
3067 | 2959 |
3068 TEST_F(WebRtcVideoChannel2Test, | 2960 TEST_F(WebRtcVideoChannel2Test, |
3069 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { | 2961 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { |
3070 FakeVideoSendStream* stream = AddSendStream(); | 2962 FakeVideoSendStream* stream = AddSendStream(); |
3071 webrtc::VideoSendStream::Stats stats; | 2963 webrtc::VideoSendStream::Stats stats; |
3072 stats.bw_limited_resolution = true; | 2964 stats.bw_limited_resolution = true; |
3073 stream->SetStats(stats); | 2965 stream->SetStats(stats); |
3074 | 2966 |
3075 cricket::VideoMediaInfo info; | 2967 cricket::VideoMediaInfo info; |
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3857 } | 3749 } |
3858 | 3750 |
3859 // Test that we normalize send codec format size in simulcast. | 3751 // Test that we normalize send codec format size in simulcast. |
3860 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 3752 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
3861 cricket::VideoCodec codec(kVp8Codec270p); | 3753 cricket::VideoCodec codec(kVp8Codec270p); |
3862 codec.width += 1; | 3754 codec.width += 1; |
3863 codec.height += 1; | 3755 codec.height += 1; |
3864 VerifySimulcastSettings(codec, 2, 2); | 3756 VerifySimulcastSettings(codec, 2, 2); |
3865 } | 3757 } |
3866 } // namespace cricket | 3758 } // namespace cricket |
OLD | NEW |