OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 | 124 |
125 TEST_F(QualityScalerTest, DownscalesAboveHighQp) { | 125 TEST_F(QualityScalerTest, DownscalesAboveHighQp) { |
126 DO_SYNC(q_, { TriggerScale(kScaleDownAboveHighQp); }); | 126 DO_SYNC(q_, { TriggerScale(kScaleDownAboveHighQp); }); |
127 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); | 127 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
128 EXPECT_EQ(1, observer_->adapt_down_events_); | 128 EXPECT_EQ(1, observer_->adapt_down_events_); |
129 EXPECT_EQ(0, observer_->adapt_up_events_); | 129 EXPECT_EQ(0, observer_->adapt_up_events_); |
130 } | 130 } |
131 | 131 |
132 TEST_F(QualityScalerTest, DownscalesAfterTwoThirdsFramedrop) { | 132 TEST_F(QualityScalerTest, DownscalesAfterTwoThirdsFramedrop) { |
133 DO_SYNC(q_, { | 133 DO_SYNC(q_, { |
134 qs_->ReportDroppedFrame(); | 134 for (int i = 0; i < kFramerate * 5; ++i) { |
135 qs_->ReportDroppedFrame(); | 135 qs_->ReportDroppedFrame(); |
136 qs_->ReportQP(kHighQp); | 136 qs_->ReportDroppedFrame(); |
| 137 qs_->ReportQP(kHighQp); |
| 138 } |
137 }); | 139 }); |
138 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); | 140 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
139 EXPECT_EQ(1, observer_->adapt_down_events_); | 141 EXPECT_EQ(1, observer_->adapt_down_events_); |
140 EXPECT_EQ(0, observer_->adapt_up_events_); | 142 EXPECT_EQ(0, observer_->adapt_up_events_); |
141 } | 143 } |
142 | 144 |
143 TEST_F(QualityScalerTest, DoesNotDownscaleOnNormalQp) { | 145 TEST_F(QualityScalerTest, DoesNotDownscaleOnNormalQp) { |
144 DO_SYNC(q_, { TriggerScale(kScaleDownAboveHighQp); }); | 146 DO_SYNC(q_, { TriggerScale(kScaleDownAboveHighQp); }); |
145 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); | 147 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
146 EXPECT_EQ(1, observer_->adapt_down_events_); | 148 EXPECT_EQ(1, observer_->adapt_down_events_); |
147 EXPECT_EQ(0, observer_->adapt_up_events_); | 149 EXPECT_EQ(0, observer_->adapt_up_events_); |
148 } | 150 } |
149 | 151 |
150 TEST_F(QualityScalerTest, DoesNotDownscaleAfterHalfFramedrop) { | 152 TEST_F(QualityScalerTest, DoesNotDownscaleAfterHalfFramedrop) { |
151 DO_SYNC(q_, { | 153 DO_SYNC(q_, { |
152 qs_->ReportDroppedFrame(); | 154 for (int i = 0; i < kFramerate * 5; ++i) { |
153 qs_->ReportQP(kHighQp); | 155 qs_->ReportDroppedFrame(); |
| 156 qs_->ReportQP(kHighQp); |
| 157 } |
154 }); | 158 }); |
155 EXPECT_FALSE(observer_->event.Wait(kDefaultTimeoutMs)); | 159 EXPECT_FALSE(observer_->event.Wait(kDefaultTimeoutMs)); |
156 EXPECT_EQ(0, observer_->adapt_down_events_); | 160 EXPECT_EQ(0, observer_->adapt_down_events_); |
157 EXPECT_EQ(0, observer_->adapt_up_events_); | 161 EXPECT_EQ(0, observer_->adapt_up_events_); |
158 } | 162 } |
159 | 163 |
160 TEST_F(QualityScalerTest, UpscalesAfterLowQp) { | 164 TEST_F(QualityScalerTest, UpscalesAfterLowQp) { |
161 DO_SYNC(q_, { TriggerScale(kScaleUp); }); | 165 DO_SYNC(q_, { TriggerScale(kScaleUp); }); |
162 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); | 166 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
163 EXPECT_EQ(0, observer_->adapt_down_events_); | 167 EXPECT_EQ(0, observer_->adapt_down_events_); |
164 EXPECT_EQ(1, observer_->adapt_up_events_); | 168 EXPECT_EQ(1, observer_->adapt_up_events_); |
165 } | 169 } |
166 | 170 |
167 TEST_F(QualityScalerTest, ScalesDownAndBackUp) { | 171 TEST_F(QualityScalerTest, ScalesDownAndBackUp) { |
168 DO_SYNC(q_, { TriggerScale(kScaleDown); }); | 172 DO_SYNC(q_, { TriggerScale(kScaleDown); }); |
169 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); | 173 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
170 EXPECT_EQ(1, observer_->adapt_down_events_); | 174 EXPECT_EQ(1, observer_->adapt_down_events_); |
171 EXPECT_EQ(0, observer_->adapt_up_events_); | 175 EXPECT_EQ(0, observer_->adapt_up_events_); |
172 DO_SYNC(q_, { TriggerScale(kScaleUp); }); | 176 DO_SYNC(q_, { TriggerScale(kScaleUp); }); |
173 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); | 177 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
174 EXPECT_EQ(1, observer_->adapt_down_events_); | 178 EXPECT_EQ(1, observer_->adapt_down_events_); |
175 EXPECT_EQ(1, observer_->adapt_up_events_); | 179 EXPECT_EQ(1, observer_->adapt_up_events_); |
176 } | 180 } |
| 181 |
| 182 TEST_F(QualityScalerTest, DoesNotScaleUntilEnoughFramesObserved) { |
| 183 DO_SYNC(q_, { |
| 184 // Send 30 frames. This should not be enough to make a decision. |
| 185 for (int i = 0; i < kFramerate; ++i) { |
| 186 qs_->ReportQP(kLowQp); |
| 187 } |
| 188 }); |
| 189 EXPECT_FALSE(observer_->event.Wait(kDefaultTimeoutMs)); |
| 190 DO_SYNC(q_, { |
| 191 // Send 30 more. This should result in an adapt request as |
| 192 // enough frames have now been observed. |
| 193 for (int i = 0; i < kFramerate; ++i) { |
| 194 qs_->ReportQP(kLowQp); |
| 195 } |
| 196 }); |
| 197 EXPECT_TRUE(observer_->event.Wait(kDefaultTimeoutMs)); |
| 198 EXPECT_EQ(0, observer_->adapt_down_events_); |
| 199 EXPECT_EQ(1, observer_->adapt_up_events_); |
| 200 } |
177 } // namespace webrtc | 201 } // namespace webrtc |
178 #undef DO_SYNC | 202 #undef DO_SYNC |
OLD | NEW |