Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2_unittest.cc

Issue 1836043004: Cleanup the VideoAdapter (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2016 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 // Trigger underuse which should go back up in resolution. 2027 // Trigger underuse which should go back up in resolution.
2028 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2028 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2029 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2029 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2030 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); 2030 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames());
2031 EXPECT_EQ(1284, send_stream->GetLastWidth()); 2031 EXPECT_EQ(1284, send_stream->GetLastWidth());
2032 EXPECT_EQ(724, send_stream->GetLastHeight()); 2032 EXPECT_EQ(724, send_stream->GetLastHeight());
2033 2033
2034 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 2034 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
2035 } 2035 }
2036 2036
2037 TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruseAndSwitchToScreenShare) {
2038 cricket::VideoCodec codec = kVp8Codec720p;
2039 cricket::VideoSendParameters parameters;
2040 parameters.codecs.push_back(codec);
2041
2042 MediaConfig media_config = MediaConfig();
2043 channel_.reset(
2044 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
2045 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2046
2047 AddSendStream();
2048
2049 cricket::FakeVideoCapturer capturer;
2050 ASSERT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
2051 ASSERT_EQ(cricket::CS_RUNNING,
2052 capturer.Start(capturer.GetSupportedFormats()->front()));
2053 ASSERT_TRUE(channel_->SetSend(true));
2054 cricket::VideoOptions camera_options;
2055 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options);
2056
2057 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2058 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2059 webrtc::LoadObserver* overuse_callback =
2060 send_stream->GetConfig().overuse_callback;
2061 ASSERT_TRUE(overuse_callback != NULL);
2062
2063 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2064 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2065 EXPECT_EQ(1280, send_stream->GetLastWidth());
2066 EXPECT_EQ(720, send_stream->GetLastHeight());
2067
2068 // Trigger overuse.
2069 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2070 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2071 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2072 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2073 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2074
2075 // Switch to screen share. Expect no CPU adaptation.
2076 cricket::FakeVideoCapturer screen_share(true);
2077 ASSERT_EQ(cricket::CS_RUNNING,
2078 screen_share.Start(screen_share.GetSupportedFormats()->front()));
2079 ASSERT_TRUE(channel_->SetCapturer(last_ssrc_, &screen_share));
2080 cricket::VideoOptions screenshare_options;
2081 screenshare_options.is_screencast = rtc::Optional<bool>(true);
2082 channel_->SetVideoSend(last_ssrc_, true /* enable */, &screenshare_options);
2083 EXPECT_TRUE(screen_share.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2084 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2085 EXPECT_EQ(1284, send_stream->GetLastWidth());
2086 EXPECT_EQ(724, send_stream->GetLastHeight());
2087
2088 // Switch back to the normal capturer. Expect the frame to be CPU adapted.
2089 ASSERT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
2090 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options);
2091 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2092 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames());
2093 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2094 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2095
2096 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
2097 }
2098
2037 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, 2099 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse,
2038 bool is_screenshare) { 2100 bool is_screenshare) {
2039 cricket::VideoCodec codec = kVp8Codec720p; 2101 cricket::VideoCodec codec = kVp8Codec720p;
2040 cricket::VideoSendParameters parameters; 2102 cricket::VideoSendParameters parameters;
2041 parameters.codecs.push_back(codec); 2103 parameters.codecs.push_back(codec);
2042 2104
2043 MediaConfig media_config = MediaConfig(); 2105 MediaConfig media_config = MediaConfig();
2044 if (!enable_overuse) { 2106 if (!enable_overuse) {
2045 media_config.video.enable_cpu_overuse_detection = false; 2107 media_config.video.enable_cpu_overuse_detection = false;
2046 } 2108 }
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
2751 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; 2813 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
2752 ASSERT_TRUE(overuse_callback != NULL); 2814 ASSERT_TRUE(overuse_callback != NULL);
2753 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2815 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2754 2816
2755 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. 2817 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2.
2756 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2818 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2757 cricket::VideoMediaInfo info; 2819 cricket::VideoMediaInfo info;
2758 EXPECT_TRUE(channel_->GetStats(&info)); 2820 EXPECT_TRUE(channel_->GetStats(&info));
2759 ASSERT_EQ(1U, info.senders.size()); 2821 ASSERT_EQ(1U, info.senders.size());
2760 EXPECT_EQ(1, info.senders[0].adapt_changes); 2822 EXPECT_EQ(1, info.senders[0].adapt_changes);
2761 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_CPU, 2823 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2762 info.senders[0].adapt_reason);
2763 2824
2764 // Trigger upgrade and verify that we adapt back up to VGA. 2825 // Trigger upgrade and verify that we adapt back up to VGA.
2765 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2826 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2766 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2827 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2767 info.Clear(); 2828 info.Clear();
2768 EXPECT_TRUE(channel_->GetStats(&info)); 2829 EXPECT_TRUE(channel_->GetStats(&info));
2769 ASSERT_EQ(1U, info.senders.size()); 2830 ASSERT_EQ(1U, info.senders.size());
2770 EXPECT_EQ(2, info.senders[0].adapt_changes); 2831 EXPECT_EQ(2, info.senders[0].adapt_changes);
2771 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE, 2832 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2772 info.senders[0].adapt_reason); 2833 info.senders[0].adapt_reason);
2773 2834
2774 // No capturer (no adapter). Adapt changes from old adapter should be kept. 2835 // No capturer (no adapter). Adapt changes from old adapter should be kept.
2775 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL)); 2836 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL));
2776 info.Clear(); 2837 info.Clear();
2777 EXPECT_TRUE(channel_->GetStats(&info)); 2838 EXPECT_TRUE(channel_->GetStats(&info));
2778 ASSERT_EQ(1U, info.senders.size()); 2839 ASSERT_EQ(1U, info.senders.size());
2779 EXPECT_EQ(2, info.senders[0].adapt_changes); 2840 EXPECT_EQ(2, info.senders[0].adapt_changes);
2780 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE, 2841 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2781 info.senders[0].adapt_reason); 2842 info.senders[0].adapt_reason);
2782 2843
2783 // Set new capturer, capture format HD. 2844 // Set new capturer, capture format HD.
2784 cricket::FakeVideoCapturer video_capturer_hd; 2845 cricket::FakeVideoCapturer video_capturer_hd;
2785 cricket::VideoFormat capture_format_hd = (*formats)[0]; 2846 cricket::VideoFormat capture_format_hd = (*formats)[0];
2786 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd)); 2847 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd));
2787 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_hd)); 2848 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_hd));
2788 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); 2849 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2789 2850
2790 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2. 2851 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2.
2791 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2852 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2792 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); 2853 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2793 info.Clear(); 2854 info.Clear();
2794 EXPECT_TRUE(channel_->GetStats(&info)); 2855 EXPECT_TRUE(channel_->GetStats(&info));
2795 ASSERT_EQ(1U, info.senders.size()); 2856 ASSERT_EQ(1U, info.senders.size());
2796 EXPECT_EQ(3, info.senders[0].adapt_changes); 2857 EXPECT_EQ(3, info.senders[0].adapt_changes);
2797 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_CPU, 2858 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2798 info.senders[0].adapt_reason);
2799 2859
2800 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL)); 2860 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL));
2801 } 2861 }
2802 2862
2803 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) { 2863 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) {
2804 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2864 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2805 2865
2806 // Capture format VGA. 2866 // Capture format VGA.
2807 cricket::FakeVideoCapturer video_capturer_vga; 2867 cricket::FakeVideoCapturer video_capturer_vga;
2808 const std::vector<cricket::VideoFormat>* formats = 2868 const std::vector<cricket::VideoFormat>* formats =
(...skipping 14 matching lines...) Expand all
2823 // Trigger overuse -> adapt CPU. 2883 // Trigger overuse -> adapt CPU.
2824 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2884 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2825 webrtc::LoadObserver* overuse_callback = 2885 webrtc::LoadObserver* overuse_callback =
2826 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; 2886 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
2827 ASSERT_TRUE(overuse_callback != NULL); 2887 ASSERT_TRUE(overuse_callback != NULL);
2828 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2888 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2829 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2889 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2830 cricket::VideoMediaInfo info; 2890 cricket::VideoMediaInfo info;
2831 EXPECT_TRUE(channel_->GetStats(&info)); 2891 EXPECT_TRUE(channel_->GetStats(&info));
2832 ASSERT_EQ(1U, info.senders.size()); 2892 ASSERT_EQ(1U, info.senders.size());
2833 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_CPU, 2893 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2834 info.senders[0].adapt_reason);
2835 2894
2836 // Set bandwidth limitation stats for the stream -> adapt CPU + BW. 2895 // Set bandwidth limitation stats for the stream -> adapt CPU + BW.
2837 webrtc::VideoSendStream::Stats stats; 2896 webrtc::VideoSendStream::Stats stats;
2838 stats.bw_limited_resolution = true; 2897 stats.bw_limited_resolution = true;
2839 fake_call_->GetVideoSendStreams().front()->SetStats(stats); 2898 fake_call_->GetVideoSendStreams().front()->SetStats(stats);
2840 info.Clear(); 2899 info.Clear();
2841 EXPECT_TRUE(channel_->GetStats(&info)); 2900 EXPECT_TRUE(channel_->GetStats(&info));
2842 ASSERT_EQ(1U, info.senders.size()); 2901 ASSERT_EQ(1U, info.senders.size());
2843 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_CPU + 2902 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU +
2844 CoordinatedVideoAdapter::ADAPTREASON_BANDWIDTH, 2903 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
2845 info.senders[0].adapt_reason); 2904 info.senders[0].adapt_reason);
2846 2905
2847 // Trigger upgrade -> adapt BW. 2906 // Trigger upgrade -> adapt BW.
2848 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2907 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2849 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2908 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2850 info.Clear(); 2909 info.Clear();
2851 EXPECT_TRUE(channel_->GetStats(&info)); 2910 EXPECT_TRUE(channel_->GetStats(&info));
2852 ASSERT_EQ(1U, info.senders.size()); 2911 ASSERT_EQ(1U, info.senders.size());
2853 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_BANDWIDTH, 2912 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
2854 info.senders[0].adapt_reason); 2913 info.senders[0].adapt_reason);
2855 2914
2856 // Reset bandwidth limitation state -> adapt NONE. 2915 // Reset bandwidth limitation state -> adapt NONE.
2857 stats.bw_limited_resolution = false; 2916 stats.bw_limited_resolution = false;
2858 fake_call_->GetVideoSendStreams().front()->SetStats(stats); 2917 fake_call_->GetVideoSendStreams().front()->SetStats(stats);
2859 info.Clear(); 2918 info.Clear();
2860 EXPECT_TRUE(channel_->GetStats(&info)); 2919 EXPECT_TRUE(channel_->GetStats(&info));
2861 ASSERT_EQ(1U, info.senders.size()); 2920 ASSERT_EQ(1U, info.senders.size());
2862 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE, 2921 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2863 info.senders[0].adapt_reason); 2922 info.senders[0].adapt_reason);
2864 2923
2865 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL)); 2924 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL));
2866 } 2925 }
2867 2926
2868 TEST_F(WebRtcVideoChannel2Test, 2927 TEST_F(WebRtcVideoChannel2Test,
2869 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { 2928 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) {
2870 FakeVideoSendStream* stream = AddSendStream(); 2929 FakeVideoSendStream* stream = AddSendStream();
2871 webrtc::VideoSendStream::Stats stats; 2930 webrtc::VideoSendStream::Stats stats;
2872 stats.bw_limited_resolution = true; 2931 stats.bw_limited_resolution = true;
2873 stream->SetStats(stats); 2932 stream->SetStats(stats);
2874 2933
2875 cricket::VideoMediaInfo info; 2934 cricket::VideoMediaInfo info;
2876 EXPECT_TRUE(channel_->GetStats(&info)); 2935 EXPECT_TRUE(channel_->GetStats(&info));
2877 ASSERT_EQ(1U, info.senders.size()); 2936 ASSERT_EQ(1U, info.senders.size());
2878 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_BANDWIDTH, 2937 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
2879 info.senders[0].adapt_reason); 2938 info.senders[0].adapt_reason);
2880 } 2939 }
2881 2940
2882 TEST_F(WebRtcVideoChannel2Test, 2941 TEST_F(WebRtcVideoChannel2Test,
2883 GetStatsTranslatesSendRtcpPacketTypesCorrectly) { 2942 GetStatsTranslatesSendRtcpPacketTypesCorrectly) {
2884 FakeVideoSendStream* stream = AddSendStream(); 2943 FakeVideoSendStream* stream = AddSendStream();
2885 webrtc::VideoSendStream::Stats stats; 2944 webrtc::VideoSendStream::Stats stats;
2886 stats.substreams[17].rtcp_packet_type_counts.fir_packets = 2; 2945 stats.substreams[17].rtcp_packet_type_counts.fir_packets = 2;
2887 stats.substreams[17].rtcp_packet_type_counts.nack_packets = 3; 2946 stats.substreams[17].rtcp_packet_type_counts.nack_packets = 3;
2888 stats.substreams[17].rtcp_packet_type_counts.pli_packets = 4; 2947 stats.substreams[17].rtcp_packet_type_counts.pli_packets = 4;
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
3490 } 3549 }
3491 3550
3492 // Test that we normalize send codec format size in simulcast. 3551 // Test that we normalize send codec format size in simulcast.
3493 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3552 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3494 cricket::VideoCodec codec(kVp8Codec270p); 3553 cricket::VideoCodec codec(kVp8Codec270p);
3495 codec.width += 1; 3554 codec.width += 1;
3496 codec.height += 1; 3555 codec.height += 1;
3497 VerifySimulcastSettings(codec, 2, 2); 3556 VerifySimulcastSettings(codec, 2, 2);
3498 } 3557 }
3499 } // namespace cricket 3558 } // namespace cricket
OLDNEW
« webrtc/media/engine/webrtcvideoengine2.h ('K') | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698