Index: media/base/decoder_buffer_queue.cc |
diff --git a/media/base/decoder_buffer_queue.cc b/media/base/decoder_buffer_queue.cc |
index d0486cbf93965932bcbf7108f24cd947f79c499c..daa53bc03b850981052df1b32d3cfaeaea9e9bd4 100644 |
--- a/media/base/decoder_buffer_queue.cc |
+++ b/media/base/decoder_buffer_queue.cc |
@@ -11,7 +11,8 @@ |
namespace media { |
damienv1
2014/02/14 17:23:33
#include <limits>
damienv1
2014/02/18 23:38:03
Done.
|
DecoderBufferQueue::DecoderBufferQueue() |
- : earliest_valid_timestamp_(kNoTimestamp()) { |
+ : earliest_valid_timestamp_(kNoTimestamp()), |
+ data_size_(0) { |
} |
DecoderBufferQueue::~DecoderBufferQueue() {} |
@@ -21,6 +22,9 @@ void DecoderBufferQueue::Push(const scoped_refptr<DecoderBuffer>& buffer) { |
queue_.push_back(buffer); |
+ DCHECK_LE(buffer->data_size(), std::numeric_limits<int>::max() - data_size_); |
+ data_size_ += buffer->data_size(); |
+ |
// TODO(scherkus): FFmpeg returns some packets with no timestamp after |
// seeking. Fix and turn this into CHECK(). See http://crbug.com/162192 |
if (buffer->timestamp() == kNoTimestamp()) { |
@@ -49,6 +53,9 @@ scoped_refptr<DecoderBuffer> DecoderBufferQueue::Pop() { |
scoped_refptr<DecoderBuffer> buffer = queue_.front(); |
queue_.pop_front(); |
+ data_size_ -= buffer->data_size(); |
+ DCHECK_GE(data_size_, 0); |
+ |
if (!in_order_queue_.empty() && |
in_order_queue_.front().get() == buffer.get()) { |
in_order_queue_.pop_front(); |
@@ -59,6 +66,7 @@ scoped_refptr<DecoderBuffer> DecoderBufferQueue::Pop() { |
void DecoderBufferQueue::Clear() { |
queue_.clear(); |
+ data_size_ = 0; |
in_order_queue_.clear(); |
earliest_valid_timestamp_ = kNoTimestamp(); |
} |