Fix ExpectedQueueTimeMs() to avoid truncation or overflow.

BUG=none
TEST=none
R=asapersson@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/30129004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7714 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/pacing/include/paced_sender.h b/webrtc/modules/pacing/include/paced_sender.h
index d7efb8e..6a420e4 100644
--- a/webrtc/modules/pacing/include/paced_sender.h
+++ b/webrtc/modules/pacing/include/paced_sender.h
@@ -58,7 +58,7 @@
     virtual ~Callback() {}
   };
 
-  static const int kDefaultMaxQueueLengthMs = 2000;
+  static const int64_t kDefaultMaxQueueLengthMs = 2000;
   // Pace in kbits/s until we receive first estimate.
   static const int kDefaultInitialPaceKbps = 2000;
   // Pacing-rate relative to our target send rate.
@@ -112,7 +112,7 @@
 
   // Returns the number of milliseconds it will take to send the current
   // packets in the queue, given the current size and bitrate, ignoring prio.
-  virtual int ExpectedQueueTimeMs() const;
+  virtual int64_t ExpectedQueueTimeMs() const;
 
   // Returns the number of milliseconds until the module want a worker thread
   // to call Process.
diff --git a/webrtc/modules/pacing/paced_sender.cc b/webrtc/modules/pacing/paced_sender.cc
index a071ffc..98f508c 100644
--- a/webrtc/modules/pacing/paced_sender.cc
+++ b/webrtc/modules/pacing/paced_sender.cc
@@ -122,7 +122,7 @@
 
   size_t SizeInPackets() const { return prio_queue_.size(); }
 
-  uint32_t SizeInBytes() const { return bytes_; }
+  uint64_t SizeInBytes() const { return bytes_; }
 
   int64_t OldestEnqueueTime() const {
     std::list<Packet>::const_reverse_iterator it = packet_list_.rbegin();
@@ -281,11 +281,11 @@
   return false;
 }
 
-int PacedSender::ExpectedQueueTimeMs() const {
+int64_t PacedSender::ExpectedQueueTimeMs() const {
   CriticalSectionScoped cs(critsect_.get());
   int target_rate = media_budget_->target_rate_kbps();
   assert(target_rate > 0);
-  return packets_->SizeInBytes() * 8 / target_rate;
+  return static_cast<int64_t>(packets_->SizeInBytes() * 8 / target_rate);
 }
 
 size_t PacedSender::QueueSizePackets() const {
diff --git a/webrtc/modules/pacing/paced_sender_unittest.cc b/webrtc/modules/pacing/paced_sender_unittest.cc
index fe16008..ac713c8 100644
--- a/webrtc/modules/pacing/paced_sender_unittest.cc
+++ b/webrtc/modules/pacing/paced_sender_unittest.cc
@@ -654,7 +654,7 @@
   }
 
   // Queue in ms = 1000 * (bytes in queue) / (kbit per second * 1000 / 8)
-  int32_t queue_in_ms = kNumPackets * kPacketSize * 8 / kMaxBitrate;
+  int64_t queue_in_ms = kNumPackets * kPacketSize * 8 / kMaxBitrate;
   EXPECT_EQ(queue_in_ms, send_bucket_->ExpectedQueueTimeMs());
 
   int64_t time_start = clock_.TimeInMilliseconds();