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 1967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1978 AddSendStream(); | 1978 AddSendStream(); |
1979 | 1979 |
1980 cricket::FakeVideoCapturer capturer; | 1980 cricket::FakeVideoCapturer capturer; |
1981 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); | 1981 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); |
1982 ASSERT_EQ(cricket::CS_RUNNING, | 1982 ASSERT_EQ(cricket::CS_RUNNING, |
1983 capturer.Start(capturer.GetSupportedFormats()->front())); | 1983 capturer.Start(capturer.GetSupportedFormats()->front())); |
1984 ASSERT_TRUE(channel_->SetSend(true)); | 1984 ASSERT_TRUE(channel_->SetSend(true)); |
1985 | 1985 |
1986 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 1986 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
1987 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 1987 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
1988 webrtc::LoadObserver* overuse_callback = | |
1989 send_stream->GetConfig().overuse_callback; | |
1990 ASSERT_TRUE(overuse_callback != NULL); | |
1991 | 1988 |
1992 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 1989 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
1993 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 1990 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
1994 EXPECT_EQ(1280, send_stream->GetLastWidth()); | 1991 EXPECT_EQ(1280, send_stream->GetLastWidth()); |
1995 EXPECT_EQ(720, send_stream->GetLastHeight()); | 1992 EXPECT_EQ(720, send_stream->GetLastHeight()); |
1996 | 1993 |
1997 // Trigger overuse. | 1994 // Trigger overuse. |
1998 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 1995 rtc::VideoSinkWants wants; |
1996 wants.max_pixel_count = rtc::Optional<int>( | |
1997 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); | |
1998 send_stream->InjectVideoSinkWants(wants); | |
1999 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 1999 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2000 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 2000 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
2001 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); | 2001 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); |
2002 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); | 2002 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); |
2003 | 2003 |
2004 // Trigger overuse again. | 2004 // Trigger overuse again. |
2005 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 2005 wants.max_pixel_count = rtc::Optional<int>( |
2006 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); | |
2007 send_stream->InjectVideoSinkWants(wants); | |
2006 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2008 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2007 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); | 2009 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
2008 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); | 2010 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); |
2009 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); | 2011 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); |
2010 | 2012 |
2011 // Trigger overuse again. This should not decrease the resolution since we | |
2012 // should only adapt the resolution down max two steps. | |
2013 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2014 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | |
2015 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); | |
2016 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); | |
2017 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); | |
2018 | |
2019 // Change input resolution. | 2013 // Change input resolution. |
2020 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); | 2014 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
2021 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); | 2015 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); |
2022 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); | 2016 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); |
2023 EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); | 2017 EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); |
2024 | 2018 |
2025 // Trigger underuse which should go back up in resolution. | 2019 // Trigger underuse which should go back up in resolution. |
2026 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | 2020 wants.max_pixel_count = rtc::Optional<int>(); |
2021 wants.max_pixel_count_step_up = rtc::Optional<int>( | |
2022 send_stream->GetLastWidth() * send_stream->GetLastHeight()); | |
2023 send_stream->InjectVideoSinkWants(wants); | |
2027 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); | 2024 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
2028 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); | 2025 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); |
2029 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); | 2026 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); |
2030 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); | 2027 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); |
2031 | 2028 |
2032 // Trigger underuse which should go back up in resolution. | 2029 // Trigger underuse which should go back up in resolution. |
2033 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | 2030 wants.max_pixel_count = rtc::Optional<int>(); |
2031 wants.max_pixel_count_step_up = rtc::Optional<int>( | |
2032 send_stream->GetLastWidth() * send_stream->GetLastHeight()); | |
2033 send_stream->InjectVideoSinkWants(wants); | |
2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); | 2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
2035 EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames()); | 2035 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); |
2036 EXPECT_EQ(1284, send_stream->GetLastWidth()); | 2036 EXPECT_EQ(1284, send_stream->GetLastWidth()); |
2037 EXPECT_EQ(724, send_stream->GetLastHeight()); | 2037 EXPECT_EQ(724, send_stream->GetLastHeight()); |
2038 | 2038 |
2039 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2039 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
2040 } | 2040 } |
2041 | 2041 |
2042 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { | 2042 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { |
2043 cricket::VideoCodec codec = kVp8Codec; | 2043 cricket::VideoCodec codec = kVp8Codec; |
2044 cricket::VideoSendParameters parameters; | 2044 cricket::VideoSendParameters parameters; |
2045 parameters.codecs.push_back(codec); | 2045 parameters.codecs.push_back(codec); |
2046 | 2046 |
2047 MediaConfig media_config = MediaConfig(); | 2047 MediaConfig media_config = MediaConfig(); |
2048 channel_.reset( | 2048 channel_.reset( |
2049 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); | 2049 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); |
2050 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2050 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
2051 | 2051 |
2052 AddSendStream(); | 2052 AddSendStream(); |
2053 | 2053 |
2054 cricket::FakeVideoCapturer capturer; | 2054 cricket::FakeVideoCapturer capturer; |
2055 ASSERT_EQ(cricket::CS_RUNNING, | 2055 ASSERT_EQ(cricket::CS_RUNNING, |
2056 capturer.Start(capturer.GetSupportedFormats()->front())); | 2056 capturer.Start(capturer.GetSupportedFormats()->front())); |
2057 ASSERT_TRUE(channel_->SetSend(true)); | 2057 ASSERT_TRUE(channel_->SetSend(true)); |
2058 cricket::VideoOptions camera_options; | 2058 cricket::VideoOptions camera_options; |
2059 camera_options.is_screencast = rtc::Optional<bool>(false); | |
2059 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, | 2060 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, |
2060 &capturer); | 2061 &capturer); |
2061 | 2062 |
2062 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 2063 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
2063 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 2064 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
2064 webrtc::LoadObserver* overuse_callback = | |
2065 send_stream->GetConfig().overuse_callback; | |
2066 ASSERT_TRUE(overuse_callback != NULL); | |
2067 | 2065 |
2068 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2066 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2069 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2067 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2070 EXPECT_EQ(1280, send_stream->GetLastWidth()); | 2068 EXPECT_EQ(1280, send_stream->GetLastWidth()); |
2071 EXPECT_EQ(720, send_stream->GetLastHeight()); | 2069 EXPECT_EQ(720, send_stream->GetLastHeight()); |
2072 | 2070 |
2073 // Trigger overuse. | 2071 // Trigger overuse. |
2074 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 2072 rtc::VideoSinkWants wants; |
2073 wants.max_pixel_count = rtc::Optional<int>( | |
2074 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); | |
2075 send_stream->InjectVideoSinkWants(wants); | |
2075 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); | 2076 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
2076 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 2077 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
2077 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); | 2078 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); |
2078 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); | 2079 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); |
2079 | 2080 |
2080 // Switch to screen share. Expect no CPU adaptation. | 2081 // Switch to screen share. Expect no CPU adaptation. |
2081 cricket::FakeVideoCapturer screen_share(true); | 2082 cricket::FakeVideoCapturer screen_share(true); |
2082 ASSERT_EQ(cricket::CS_RUNNING, | 2083 ASSERT_EQ(cricket::CS_RUNNING, |
2083 screen_share.Start(screen_share.GetSupportedFormats()->front())); | 2084 screen_share.Start(screen_share.GetSupportedFormats()->front())); |
2084 cricket::VideoOptions screenshare_options; | 2085 cricket::VideoOptions screenshare_options; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2120 | 2121 |
2121 cricket::FakeVideoCapturer capturer; | 2122 cricket::FakeVideoCapturer capturer; |
2122 VideoOptions options; | 2123 VideoOptions options; |
2123 options.is_screencast = rtc::Optional<bool>(is_screenshare); | 2124 options.is_screencast = rtc::Optional<bool>(is_screenshare); |
2124 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); | 2125 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); |
2125 cricket::VideoFormat capture_format = capturer.GetSupportedFormats()->front(); | 2126 cricket::VideoFormat capture_format = capturer.GetSupportedFormats()->front(); |
2126 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format)); | 2127 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format)); |
2127 | 2128 |
2128 EXPECT_TRUE(channel_->SetSend(true)); | 2129 EXPECT_TRUE(channel_->SetSend(true)); |
2129 | 2130 |
2130 // Trigger overuse. | |
2131 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
2132 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 2131 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
2133 webrtc::LoadObserver* overuse_callback = | |
2134 send_stream->GetConfig().overuse_callback; | |
2135 | 2132 |
2136 if (!enable_overuse) { | 2133 if (!enable_overuse || is_screenshare) { |
2137 ASSERT_TRUE(overuse_callback == NULL); | 2134 EXPECT_FALSE(send_stream->resolution_scaling_enabled()); |
2138 | 2135 |
2139 EXPECT_TRUE(capturer.CaptureFrame()); | 2136 EXPECT_TRUE(capturer.CaptureFrame()); |
2140 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2137 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2141 | 2138 |
2142 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); | 2139 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); |
2143 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); | 2140 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); |
2144 | 2141 |
2145 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2142 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
2146 return; | 2143 return; |
2147 } | 2144 } |
2148 | 2145 |
2149 ASSERT_TRUE(overuse_callback != NULL); | 2146 EXPECT_TRUE(send_stream->resolution_scaling_enabled()); |
2147 // Trigger overuse. | |
2148 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
2149 | |
2150 rtc::VideoSinkWants wants; | |
2151 wants.max_pixel_count = | |
2152 rtc::Optional<int>(capture_format.width * capture_format.height - 1); | |
2153 send_stream->InjectVideoSinkWants(wants); | |
2154 | |
2150 EXPECT_TRUE(capturer.CaptureFrame()); | 2155 EXPECT_TRUE(capturer.CaptureFrame()); |
2151 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 2156 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
2152 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2153 | 2157 |
2154 EXPECT_TRUE(capturer.CaptureFrame()); | 2158 EXPECT_TRUE(capturer.CaptureFrame()); |
2155 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 2159 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
2156 | 2160 |
2157 if (is_screenshare) { | 2161 EXPECT_LT(send_stream->GetLastWidth(), capture_format.width); |
2158 // Do not adapt screen share. | 2162 EXPECT_LT(send_stream->GetLastHeight(), capture_format.height); |
2159 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); | |
2160 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); | |
2161 } else { | |
2162 EXPECT_LT(send_stream->GetLastWidth(), capture_format.width); | |
2163 EXPECT_LT(send_stream->GetLastHeight(), capture_format.height); | |
2164 } | |
2165 | 2163 |
2166 // Trigger underuse which should go back to normal resolution. | 2164 // Trigger underuse which should go back to normal resolution. |
2167 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | 2165 wants.max_pixel_count = rtc::Optional<int>(); |
2166 wants.max_pixel_count_step_up = rtc::Optional<int>( | |
2167 send_stream->GetLastWidth() * send_stream->GetLastHeight()); | |
2168 send_stream->InjectVideoSinkWants(wants); | |
2169 | |
2168 EXPECT_TRUE(capturer.CaptureFrame()); | 2170 EXPECT_TRUE(capturer.CaptureFrame()); |
2169 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); | 2171 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
2170 | 2172 |
2171 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); | 2173 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); |
2172 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); | 2174 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); |
2173 | 2175 |
2174 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2176 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
2175 } | 2177 } |
2176 | 2178 |
2177 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { | 2179 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { |
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2895 webrtc::VideoSendStream::Stats stats; | 2897 webrtc::VideoSendStream::Stats stats; |
2896 stats.preferred_media_bitrate_bps = 5; | 2898 stats.preferred_media_bitrate_bps = 5; |
2897 stream->SetStats(stats); | 2899 stream->SetStats(stats); |
2898 | 2900 |
2899 cricket::VideoMediaInfo info; | 2901 cricket::VideoMediaInfo info; |
2900 ASSERT_TRUE(channel_->GetStats(&info)); | 2902 ASSERT_TRUE(channel_->GetStats(&info)); |
2901 ASSERT_EQ(1u, info.senders.size()); | 2903 ASSERT_EQ(1u, info.senders.size()); |
2902 EXPECT_EQ(5, info.senders[0].preferred_bitrate); | 2904 EXPECT_EQ(5, info.senders[0].preferred_bitrate); |
2903 } | 2905 } |
2904 | 2906 |
2905 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { | 2907 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuAdaptationStats) { |
2906 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); | 2908 FakeVideoSendStream* stream = AddSendStream(); |
2909 webrtc::VideoSendStream::Stats stats; | |
2910 stats.number_of_cpu_adapt_changes = 2; | |
2911 stats.cpu_limited_resolution = true; | |
2912 stream->SetStats(stats); | |
2907 | 2913 |
2908 // Capture format VGA. | |
2909 cricket::FakeVideoCapturer video_capturer_vga; | |
2910 const std::vector<cricket::VideoFormat>* formats = | |
2911 video_capturer_vga.GetSupportedFormats(); | |
2912 cricket::VideoFormat capture_format_vga = (*formats)[1]; | |
2913 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); | |
2914 EXPECT_TRUE( | |
2915 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga)); | |
2916 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2917 | |
2918 cricket::VideoCodec send_codec(100, "VP8"); | |
2919 cricket::VideoSendParameters parameters; | |
2920 parameters.codecs.push_back(send_codec); | |
2921 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | |
2922 EXPECT_TRUE(channel_->SetSend(true)); | |
2923 | |
2924 // Verify that the CpuOveruseObserver is registered and trigger downgrade. | |
2925 | |
2926 // Trigger overuse. | |
2927 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
2928 webrtc::LoadObserver* overuse_callback = | |
2929 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; | |
2930 ASSERT_TRUE(overuse_callback != NULL); | |
2931 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2932 | |
2933 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. | |
2934 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2935 cricket::VideoMediaInfo info; | |
2936 EXPECT_TRUE(channel_->GetStats(&info)); | |
2937 ASSERT_EQ(1U, info.senders.size()); | |
2938 EXPECT_EQ(1, info.senders[0].adapt_changes); | |
2939 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); | |
2940 | |
2941 // Trigger upgrade and verify that we adapt back up to VGA. | |
2942 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | |
2943 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2944 info.Clear(); | |
2945 EXPECT_TRUE(channel_->GetStats(&info)); | |
2946 ASSERT_EQ(1U, info.senders.size()); | |
2947 EXPECT_EQ(2, info.senders[0].adapt_changes); | |
2948 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, | |
2949 info.senders[0].adapt_reason); | |
2950 | |
2951 // No capturer (no adapter). Adapt changes from old adapter should be kept. | |
2952 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); | |
2953 info.Clear(); | |
2954 EXPECT_TRUE(channel_->GetStats(&info)); | |
2955 ASSERT_EQ(1U, info.senders.size()); | |
2956 EXPECT_EQ(2, info.senders[0].adapt_changes); | |
2957 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, | |
2958 info.senders[0].adapt_reason); | |
2959 | |
2960 // Set new capturer, capture format HD. | |
2961 cricket::FakeVideoCapturer video_capturer_hd; | |
2962 cricket::VideoFormat capture_format_hd = (*formats)[0]; | |
2963 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd)); | |
2964 EXPECT_TRUE( | |
2965 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_hd)); | |
2966 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); | |
2967 | |
2968 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2. | |
2969 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
2970 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); | |
2971 info.Clear(); | |
2972 EXPECT_TRUE(channel_->GetStats(&info)); | |
2973 ASSERT_EQ(1U, info.senders.size()); | |
2974 EXPECT_EQ(3, info.senders[0].adapt_changes); | |
2975 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); | |
2976 | |
2977 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); | |
2978 } | |
2979 | |
2980 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) { | |
2981 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); | |
2982 | |
2983 // Capture format VGA. | |
2984 cricket::FakeVideoCapturer video_capturer_vga; | |
2985 const std::vector<cricket::VideoFormat>* formats = | |
2986 video_capturer_vga.GetSupportedFormats(); | |
2987 cricket::VideoFormat capture_format_vga = (*formats)[1]; | |
2988 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); | |
2989 EXPECT_TRUE( | |
2990 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga)); | |
2991 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
2992 | |
2993 cricket::VideoCodec send_codec(100, "VP8"); | |
2994 cricket::VideoSendParameters parameters; | |
2995 parameters.codecs.push_back(send_codec); | |
2996 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | |
2997 EXPECT_TRUE(channel_->SetSend(true)); | |
2998 | |
2999 // Verify that the CpuOveruseObserver is registered and trigger downgrade. | |
3000 | |
3001 // Trigger overuse -> adapt CPU. | |
3002 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | |
3003 webrtc::LoadObserver* overuse_callback = | |
3004 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; | |
3005 ASSERT_TRUE(overuse_callback != NULL); | |
3006 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | |
3007 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
3008 cricket::VideoMediaInfo info; | 2914 cricket::VideoMediaInfo info; |
3009 EXPECT_TRUE(channel_->GetStats(&info)); | 2915 EXPECT_TRUE(channel_->GetStats(&info)); |
3010 ASSERT_EQ(1U, info.senders.size()); | 2916 ASSERT_EQ(1U, info.senders.size()); |
3011 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); | 2917 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); |
2918 EXPECT_EQ(2, info.senders[0].adapt_changes); | |
åsapersson
2016/10/31 08:43:01
2 -> stats.number_of_cpu_adapt_changes
perkj_webrtc
2016/10/31 19:45:18
Done.
| |
2919 } | |
3012 | 2920 |
3013 // Set bandwidth limitation stats for the stream -> adapt CPU + BW. | 2921 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsAdaptationAndBandwidthStats) { |
2922 FakeVideoSendStream* stream = AddSendStream(); | |
3014 webrtc::VideoSendStream::Stats stats; | 2923 webrtc::VideoSendStream::Stats stats; |
2924 stats.number_of_cpu_adapt_changes = 2; | |
2925 stats.cpu_limited_resolution = true; | |
3015 stats.bw_limited_resolution = true; | 2926 stats.bw_limited_resolution = true; |
3016 fake_call_->GetVideoSendStreams().front()->SetStats(stats); | 2927 stream->SetStats(stats); |
3017 info.Clear(); | 2928 |
2929 cricket::VideoMediaInfo info; | |
3018 EXPECT_TRUE(channel_->GetStats(&info)); | 2930 EXPECT_TRUE(channel_->GetStats(&info)); |
3019 ASSERT_EQ(1U, info.senders.size()); | 2931 ASSERT_EQ(1U, info.senders.size()); |
3020 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | | 2932 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | |
3021 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, | 2933 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, |
3022 info.senders[0].adapt_reason); | 2934 info.senders[0].adapt_reason); |
3023 | 2935 EXPECT_EQ(2, info.senders[0].adapt_changes); |
åsapersson
2016/10/31 08:43:02
ditto
perkj_webrtc
2016/10/31 19:45:18
Done.
| |
3024 // Trigger upgrade -> adapt BW. | |
3025 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); | |
3026 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | |
3027 info.Clear(); | |
3028 EXPECT_TRUE(channel_->GetStats(&info)); | |
3029 ASSERT_EQ(1U, info.senders.size()); | |
3030 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, | |
3031 info.senders[0].adapt_reason); | |
3032 | |
3033 // Reset bandwidth limitation state -> adapt NONE. | |
3034 stats.bw_limited_resolution = false; | |
3035 fake_call_->GetVideoSendStreams().front()->SetStats(stats); | |
3036 info.Clear(); | |
3037 EXPECT_TRUE(channel_->GetStats(&info)); | |
3038 ASSERT_EQ(1U, info.senders.size()); | |
3039 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, | |
3040 info.senders[0].adapt_reason); | |
3041 | |
3042 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); | |
3043 } | 2936 } |
3044 | 2937 |
3045 TEST_F(WebRtcVideoChannel2Test, | 2938 TEST_F(WebRtcVideoChannel2Test, |
3046 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { | 2939 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { |
3047 FakeVideoSendStream* stream = AddSendStream(); | 2940 FakeVideoSendStream* stream = AddSendStream(); |
3048 webrtc::VideoSendStream::Stats stats; | 2941 webrtc::VideoSendStream::Stats stats; |
3049 stats.bw_limited_resolution = true; | 2942 stats.bw_limited_resolution = true; |
3050 stream->SetStats(stats); | 2943 stream->SetStats(stats); |
3051 | 2944 |
3052 cricket::VideoMediaInfo info; | 2945 cricket::VideoMediaInfo info; |
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3836 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { | 3729 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { |
3837 VerifySimulcastSettings(kVp8Codec, 1280, 720, 3, 3); | 3730 VerifySimulcastSettings(kVp8Codec, 1280, 720, 3, 3); |
3838 } | 3731 } |
3839 | 3732 |
3840 // Test that we normalize send codec format size in simulcast. | 3733 // Test that we normalize send codec format size in simulcast. |
3841 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 3734 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
3842 cricket::VideoCodec codec(kVp8Codec); | 3735 cricket::VideoCodec codec(kVp8Codec); |
3843 VerifySimulcastSettings(codec, 541, 271, 2, 2); | 3736 VerifySimulcastSettings(codec, 541, 271, 2, 2); |
3844 } | 3737 } |
3845 } // namespace cricket | 3738 } // namespace cricket |
OLD | NEW |