Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(906)

Unified Diff: media/base/decoder_buffer_queue.cc

Issue 164233005: Cap the memory usage in FFMpegDemuxer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from patch set #8. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/decoder_buffer_queue.h ('k') | media/base/decoder_buffer_queue_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..26ba9f4e69ba7b5071599dbf1c9019f22d366df9 100644
--- a/media/base/decoder_buffer_queue.cc
+++ b/media/base/decoder_buffer_queue.cc
@@ -5,13 +5,15 @@
#include "media/base/decoder_buffer_queue.h"
#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
#include "media/base/buffers.h"
#include "media/base/decoder_buffer.h"
namespace media {
DecoderBufferQueue::DecoderBufferQueue()
- : earliest_valid_timestamp_(kNoTimestamp()) {
+ : earliest_valid_timestamp_(kNoTimestamp()),
+ data_size_(0) {
}
DecoderBufferQueue::~DecoderBufferQueue() {}
@@ -21,6 +23,10 @@ void DecoderBufferQueue::Push(const scoped_refptr<DecoderBuffer>& buffer) {
queue_.push_back(buffer);
+ // TODO(damienv): Remove the cast here and in every place in this file
+ // when DecoderBuffer::data_size is modified to return a size_t.
+ data_size_ += base::checked_cast<size_t, int>(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 +55,11 @@ scoped_refptr<DecoderBuffer> DecoderBufferQueue::Pop() {
scoped_refptr<DecoderBuffer> buffer = queue_.front();
queue_.pop_front();
+ size_t buffer_data_size =
+ base::checked_cast<size_t, int>(buffer->data_size());
+ DCHECK_LE(buffer_data_size, data_size_);
+ data_size_ -= buffer_data_size;
+
if (!in_order_queue_.empty() &&
in_order_queue_.front().get() == buffer.get()) {
in_order_queue_.pop_front();
@@ -59,6 +70,7 @@ scoped_refptr<DecoderBuffer> DecoderBufferQueue::Pop() {
void DecoderBufferQueue::Clear() {
queue_.clear();
+ data_size_ = 0;
in_order_queue_.clear();
earliest_valid_timestamp_ = kNoTimestamp();
}
« no previous file with comments | « media/base/decoder_buffer_queue.h ('k') | media/base/decoder_buffer_queue_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698