Index: webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc |
index 16300895027e22e86792834df7816876d8737bd0..9470c4280c067806701d1808b4f77ec48926f646 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc |
@@ -1297,4 +1297,37 @@ TEST_F(RtcpReceiverTest, ReceivesTargetBitrate) { |
InjectRtcpPacket(xr); |
} |
+TEST_F(RtcpReceiverTest, HandlesIncorrectTargetBitrate) { |
+ BitrateAllocation expected_allocation; |
+ expected_allocation.SetBitrate(0, 0, 10000); |
+ |
+ rtcp::TargetBitrate bitrate; |
+ bitrate.AddTargetBitrate(0, 0, expected_allocation.GetBitrate(0, 0) / 1000); |
+ bitrate.AddTargetBitrate(0, kMaxTemporalStreams - 1, 20000); |
danilchap
2016/12/06 13:12:56
rtcp::TargetBitrate has different limits for tempo
sprang_webrtc
2016/12/06 13:22:41
You're right. Done.
|
+ bitrate.AddTargetBitrate(kMaxSpatialLayers - 1, 0, 40000); |
+ |
+ rtcp::ExtendedReports xr; |
+ xr.SetTargetBitrate(bitrate); |
+ |
+ // Build the actual RTCP bytestream, so that we can set illegal layer ids. |
+ rtc::Buffer buffer = xr.Build(); |
+ const size_t kHeaderLength = 12; // RTCP + XR + TargetBitrate. |
+ const size_t kBirateItemSize = 4; |
+ EXPECT_EQ(kHeaderLength + (3 * kBirateItemSize), buffer.size()); |
+ |
+ EXPECT_EQ(0U, buffer[kHeaderLength + (kBirateItemSize * 0)]); |
+ |
+ EXPECT_EQ(kMaxTemporalStreams - 1, |
+ buffer[kHeaderLength + (kBirateItemSize * 1)]); |
+ buffer[kHeaderLength + (kBirateItemSize * 1)] = kMaxTemporalStreams; |
+ |
+ EXPECT_EQ((kMaxSpatialLayers - 1) << 4, |
+ buffer[kHeaderLength + (kBirateItemSize * 2)]); |
+ buffer[kHeaderLength + (kBirateItemSize * 2)] = kMaxSpatialLayers << 4; |
+ |
+ EXPECT_CALL(bitrate_allocation_observer_, |
+ OnBitrateAllocationUpdated(expected_allocation)); |
+ InjectRtcpPacket(buffer); |
+} |
+ |
} // namespace webrtc |