Chromium Code Reviews| 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(); |
| } |