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

Side by Side Diff: webrtc/video/vie_encoder_unittest.cc

Issue 2538913003: Remove limit on how often quality scaling downscales. (Closed)
Patch Set: size_t -> int Created 4 years 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
« no previous file with comments | « webrtc/video/vie_encoder.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 TEST_F(ViEEncoderTest, 578 TEST_F(ViEEncoderTest,
579 ResolutionSinkWantsResetOnSetSourceWithDisabledResolutionScaling) { 579 ResolutionSinkWantsResetOnSetSourceWithDisabledResolutionScaling) {
580 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 580 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
581 581
582 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count); 582 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count);
583 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up); 583 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up);
584 584
585 int frame_width = 1280; 585 int frame_width = 1280;
586 int frame_height = 720; 586 int frame_height = 720;
587 587
588 video_source_.IncomingCapturedFrame(
589 CreateFrame(1, frame_width, frame_height));
590 sink_.WaitForEncodedFrame(1);
588 // Trigger CPU overuse. 591 // Trigger CPU overuse.
589 vie_encoder_->TriggerCpuOveruse(); 592 vie_encoder_->TriggerCpuOveruse();
590 593
591 video_source_.IncomingCapturedFrame( 594 video_source_.IncomingCapturedFrame(
592 CreateFrame(1, frame_width, frame_height)); 595 CreateFrame(2, frame_width, frame_height));
593 sink_.WaitForEncodedFrame(1); 596 sink_.WaitForEncodedFrame(2);
594 EXPECT_LT(video_source_.sink_wants().max_pixel_count.value_or( 597 EXPECT_LT(video_source_.sink_wants().max_pixel_count.value_or(
595 std::numeric_limits<int>::max()), 598 std::numeric_limits<int>::max()),
596 frame_width * frame_height); 599 frame_width * frame_height);
597 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up); 600 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up);
598 601
599 // Set new source. 602 // Set new source.
600 test::FrameForwarder new_video_source; 603 test::FrameForwarder new_video_source;
601 vie_encoder_->SetSource( 604 vie_encoder_->SetSource(
602 &new_video_source, 605 &new_video_source,
603 VideoSendStream::DegradationPreference::kMaintainResolution); 606 VideoSendStream::DegradationPreference::kMaintainResolution);
604 607
605 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); 608 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count);
606 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up); 609 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up);
607 610
608 new_video_source.IncomingCapturedFrame( 611 new_video_source.IncomingCapturedFrame(
609 CreateFrame(2, frame_width, frame_height)); 612 CreateFrame(3, frame_width, frame_height));
610 sink_.WaitForEncodedFrame(2); 613 sink_.WaitForEncodedFrame(3);
611 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); 614 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count);
612 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up); 615 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up);
613 616
614 // Calling SetSource with resolution scaling enabled apply the old SinkWants. 617 // Calling SetSource with resolution scaling enabled apply the old SinkWants.
615 vie_encoder_->SetSource(&new_video_source, 618 vie_encoder_->SetSource(&new_video_source,
616 VideoSendStream::DegradationPreference::kBalanced); 619 VideoSendStream::DegradationPreference::kBalanced);
617 EXPECT_LT(new_video_source.sink_wants().max_pixel_count.value_or( 620 EXPECT_LT(new_video_source.sink_wants().max_pixel_count.value_or(
618 std::numeric_limits<int>::max()), 621 std::numeric_limits<int>::max()),
619 frame_width * frame_height); 622 frame_width * frame_height);
620 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up); 623 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up);
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 TEST_F(ViEEncoderTest, ScalingUpAndDownDoesNothingWithMaintainResolution) { 870 TEST_F(ViEEncoderTest, ScalingUpAndDownDoesNothingWithMaintainResolution) {
868 const int kTargetBitrateBps = 100000; 871 const int kTargetBitrateBps = 100000;
869 int frame_width = 1280; 872 int frame_width = 1280;
870 int frame_height = 720; 873 int frame_height = 720;
871 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 874 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
872 875
873 // Expect no scaling to begin with 876 // Expect no scaling to begin with
874 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count); 877 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count);
875 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up); 878 EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up);
876 879
877 // Trigger scale down
878 vie_encoder_->TriggerQualityLow();
879 video_source_.IncomingCapturedFrame( 880 video_source_.IncomingCapturedFrame(
880 CreateFrame(1, frame_width, frame_height)); 881 CreateFrame(1, frame_width, frame_height));
881 sink_.WaitForEncodedFrame(1); 882 sink_.WaitForEncodedFrame(1);
882 883
884 // Trigger scale down
885 vie_encoder_->TriggerQualityLow();
886
887 video_source_.IncomingCapturedFrame(
888 CreateFrame(2, frame_width, frame_height));
889 sink_.WaitForEncodedFrame(2);
890
883 // Expect a scale down. 891 // Expect a scale down.
884 EXPECT_TRUE(video_source_.sink_wants().max_pixel_count); 892 EXPECT_TRUE(video_source_.sink_wants().max_pixel_count);
885 EXPECT_LT(*video_source_.sink_wants().max_pixel_count, 893 EXPECT_LT(*video_source_.sink_wants().max_pixel_count,
886 frame_width * frame_height); 894 frame_width * frame_height);
887 895
888 // Set adaptation disabled. 896 // Set adaptation disabled.
889 test::FrameForwarder new_video_source; 897 test::FrameForwarder new_video_source;
890 vie_encoder_->SetSource( 898 vie_encoder_->SetSource(
891 &new_video_source, 899 &new_video_source,
892 VideoSendStream::DegradationPreference::kMaintainResolution); 900 VideoSendStream::DegradationPreference::kMaintainResolution);
893 901
894 // Trigger scale down 902 // Trigger scale down
895 vie_encoder_->TriggerQualityLow(); 903 vie_encoder_->TriggerQualityLow();
896 new_video_source.IncomingCapturedFrame( 904 new_video_source.IncomingCapturedFrame(
897 CreateFrame(2, frame_width, frame_height)); 905 CreateFrame(3, frame_width, frame_height));
898 sink_.WaitForEncodedFrame(2); 906 sink_.WaitForEncodedFrame(3);
899 907
900 // Expect no scaling 908 // Expect no scaling
901 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); 909 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count);
902 910
903 // Trigger scale up 911 // Trigger scale up
904 vie_encoder_->TriggerQualityHigh(); 912 vie_encoder_->TriggerQualityHigh();
905 new_video_source.IncomingCapturedFrame( 913 new_video_source.IncomingCapturedFrame(
906 CreateFrame(3, frame_width, frame_height)); 914 CreateFrame(4, frame_width, frame_height));
907 sink_.WaitForEncodedFrame(3); 915 sink_.WaitForEncodedFrame(4);
908 916
909 // Expect nothing to change, still no scaling 917 // Expect nothing to change, still no scaling
910 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); 918 EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count);
911 919
912 vie_encoder_->Stop(); 920 vie_encoder_->Stop();
913 } 921 }
914 922
923 TEST_F(ViEEncoderTest, DoesNotScaleBelowSetLimit) {
924 const int kTargetBitrateBps = 100000;
925 int frame_width = 1280;
926 int frame_height = 720;
927 // from vie_encoder.cc
928 const int kMinPixelsPerFrame = 120 * 90;
929 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
930
931 for (size_t i = 1; i <= 10; i++) {
932 video_source_.IncomingCapturedFrame(
933 CreateFrame(i, frame_width, frame_height));
934 sink_.WaitForEncodedFrame(i);
935 // Trigger scale down
936 vie_encoder_->TriggerQualityLow();
937 EXPECT_GE(*video_source_.sink_wants().max_pixel_count, kMinPixelsPerFrame);
938 }
939
940 vie_encoder_->Stop();
941 }
942
915 TEST_F(ViEEncoderTest, UMACpuLimitedResolutionInPercent) { 943 TEST_F(ViEEncoderTest, UMACpuLimitedResolutionInPercent) {
916 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 944 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
917 945
918 int frame_width = 640; 946 int frame_width = 640;
919 int frame_height = 360; 947 int frame_height = 360;
920 948
921 for (int i = 1; i <= SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) { 949 for (int i = 1; i <= SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) {
922 video_source_.IncomingCapturedFrame( 950 video_source_.IncomingCapturedFrame(
923 CreateFrame(i, frame_width, frame_height)); 951 CreateFrame(i, frame_width, frame_height));
924 sink_.WaitForEncodedFrame(i); 952 sink_.WaitForEncodedFrame(i);
(...skipping 11 matching lines...) Expand all
936 vie_encoder_->Stop(); 964 vie_encoder_->Stop();
937 965
938 stats_proxy_.reset(); 966 stats_proxy_.reset();
939 EXPECT_EQ(1, 967 EXPECT_EQ(1,
940 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent")); 968 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent"));
941 EXPECT_EQ( 969 EXPECT_EQ(
942 1, metrics::NumEvents("WebRTC.Video.CpuLimitedResolutionInPercent", 50)); 970 1, metrics::NumEvents("WebRTC.Video.CpuLimitedResolutionInPercent", 50));
943 } 971 }
944 972
945 } // namespace webrtc 973 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/vie_encoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698