Makes treatment of received reports of packets lost signed.

Bug: webrtc:9598
Change-Id: I0f6ffe348585b8ec69753089652812da516d33d8
Reviewed-on: https://webrtc-review.googlesource.com/93021
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24291}
diff --git a/audio/audio_send_stream_unittest.cc b/audio/audio_send_stream_unittest.cc
index 1e777f1..f5d6796 100644
--- a/audio/audio_send_stream_unittest.cc
+++ b/audio/audio_send_stream_unittest.cc
@@ -379,8 +379,7 @@
   EXPECT_EQ(kSsrc, stats.local_ssrc);
   EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent);
   EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
-  EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost),
-            stats.packets_lost);
+  EXPECT_EQ(kReportBlock.cumulative_num_packets_lost, stats.packets_lost);
   EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
   EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name);
   EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number),
diff --git a/audio/channel.h b/audio/channel.h
index 8d78665..670223c 100644
--- a/audio/channel.h
+++ b/audio/channel.h
@@ -80,7 +80,7 @@
   uint32_t sender_SSRC;  // SSRC of sender
   uint32_t source_SSRC;
   uint8_t fraction_lost;
-  uint32_t cumulative_num_packets_lost;
+  int32_t cumulative_num_packets_lost;
   uint32_t extended_highest_sequence_number;
   uint32_t interarrival_jitter;
   uint32_t last_SR_timestamp;
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index 260e461..34c7428 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -193,7 +193,7 @@
   uint32_t sender_ssrc;  // SSRC of sender of this report.
   uint32_t source_ssrc;  // SSRC of the RTP packet sender.
   uint8_t fraction_lost;
-  uint32_t packets_lost;  // 24 bits valid.
+  int32_t packets_lost;  // 24 bits valid.
   uint32_t extended_highest_sequence_number;
   uint32_t jitter;
   uint32_t last_sender_report_timestamp;
diff --git a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
index 91ffd73..6cd953c 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
@@ -441,7 +441,7 @@
 TEST_F(RtcpReceiverTest, InjectRrPacketsFromTwoRemoteSsrcs) {
   const uint32_t kSenderSsrc2 = 0x20304;
   const uint16_t kSequenceNumbers[] = {10, 12423};
-  const uint32_t kCumLost[] = {13, 555};
+  const int32_t kCumLost[] = {13, 555};
   const uint8_t kFracLost[] = {20, 11};
 
   rtcp::ReportBlock rb1;
diff --git a/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc b/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
index b6368f7..2edebae 100644
--- a/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
+++ b/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
@@ -213,7 +213,7 @@
   EXPECT_EQ(test_ssrc + 1, report_blocks[0].sender_ssrc);
   EXPECT_EQ(test_ssrc, report_blocks[0].source_ssrc);
 
-  EXPECT_EQ(0u, report_blocks[0].packets_lost);
+  EXPECT_EQ(0, report_blocks[0].packets_lost);
   EXPECT_LT(0u, report_blocks[0].delay_since_last_sender_report);
   EXPECT_EQ(test_sequence_number,
             report_blocks[0].extended_highest_sequence_number);
diff --git a/video/report_block_stats.cc b/video/report_block_stats.cc
index 332709e..6005043 100644
--- a/video/report_block_stats.cc
+++ b/video/report_block_stats.cc
@@ -35,8 +35,7 @@
                              uint32_t remote_ssrc,
                              uint32_t source_ssrc) {
   RTCPReportBlock block;
-  // TODO(srte): Remove this clamp when packets_lost is made signed.
-  block.packets_lost = std::max(0, rtcp_stats.packets_lost);
+  block.packets_lost = rtcp_stats.packets_lost;
   block.fraction_lost = rtcp_stats.fraction_lost;
   block.extended_highest_sequence_number =
       rtcp_stats.extended_highest_sequence_number;
diff --git a/video/report_block_stats_unittest.cc b/video/report_block_stats_unittest.cc
index 3880c4b..f80ae16 100644
--- a/video/report_block_stats_unittest.cc
+++ b/video/report_block_stats_unittest.cc
@@ -82,7 +82,7 @@
   std::vector<RTCPReportBlock> empty;
   RTCPReportBlock aggregated = stats.AggregateAndStore(empty);
   EXPECT_EQ(0U, aggregated.fraction_lost);
-  EXPECT_EQ(0U, aggregated.packets_lost);
+  EXPECT_EQ(0, aggregated.packets_lost);
   EXPECT_EQ(0U, aggregated.jitter);
   EXPECT_EQ(0U, aggregated.extended_highest_sequence_number);
 }
@@ -92,13 +92,13 @@
   RTCPReportBlock aggregated = stats.AggregateAndStore(ssrc1block1_);
   // One ssrc, no aggregation done.
   EXPECT_EQ(123U, aggregated.fraction_lost);
-  EXPECT_EQ(10U, aggregated.packets_lost);
+  EXPECT_EQ(10, aggregated.packets_lost);
   EXPECT_EQ(777U, aggregated.jitter);
   EXPECT_EQ(24000U, aggregated.extended_highest_sequence_number);
 
   aggregated = stats.AggregateAndStore(ssrc1block2_);
   EXPECT_EQ(0U, aggregated.fraction_lost);
-  EXPECT_EQ(15U, aggregated.packets_lost);
+  EXPECT_EQ(15, aggregated.packets_lost);
   EXPECT_EQ(222U, aggregated.jitter);
   EXPECT_EQ(24100U, aggregated.extended_highest_sequence_number);
 
@@ -110,14 +110,14 @@
   ReportBlockStats stats;
   RTCPReportBlock aggregated = stats.AggregateAndStore(ssrc12block1_);
   EXPECT_EQ(0U, aggregated.fraction_lost);
-  EXPECT_EQ(10U + 111U, aggregated.packets_lost);
+  EXPECT_EQ(10 + 111, aggregated.packets_lost);
   EXPECT_EQ((777U + 555U) / 2, aggregated.jitter);
   EXPECT_EQ(0U, aggregated.extended_highest_sequence_number);
 
   aggregated = stats.AggregateAndStore(ssrc12block2_);
   // fl: 255 * ((15-10) + (136-111)) / ((24100-24000) + (8800-8500)) = 19
   EXPECT_EQ(19U, aggregated.fraction_lost);
-  EXPECT_EQ(15U + 136U, aggregated.packets_lost);
+  EXPECT_EQ(15 + 136, aggregated.packets_lost);
   EXPECT_EQ((222U + 888U) / 2, aggregated.jitter);
   EXPECT_EQ(0U, aggregated.extended_highest_sequence_number);