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

Side by Side Diff: media/filters/source_buffer_stream.cc

Issue 1171263004: Allow setting memory limits on media::DemuxerStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed typo Created 5 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/filters/source_buffer_stream.h" 5 #include "media/filters/source_buffer_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 } 585 }
586 } 586 }
587 587
588 void SourceBufferStream::SetConfigIds(const BufferQueue& buffers) { 588 void SourceBufferStream::SetConfigIds(const BufferQueue& buffers) {
589 for (BufferQueue::const_iterator itr = buffers.begin(); 589 for (BufferQueue::const_iterator itr = buffers.begin();
590 itr != buffers.end(); ++itr) { 590 itr != buffers.end(); ++itr) {
591 (*itr)->SetConfigId(append_config_index_); 591 (*itr)->SetConfigId(append_config_index_);
592 } 592 }
593 } 593 }
594 594
595 void SourceBufferStream::GarbageCollectIfNeeded() { 595 void SourceBufferStream::GarbageCollectIfNeeded() {
ddorwin 2015/06/17 21:02:16 This implementation detail (limits and GC tied to
servolk 2015/06/17 22:13:48 Per MSE spec (https://w3c.github.io/media-source/#
ddorwin 2015/06/20 01:50:26 Right, and a SourceBuffer can have multiple stream
596 // Compute size of |ranges_|. 596 // Compute size of |ranges_|.
597 int ranges_size = 0; 597 size_t ranges_size = 0;
598 for (RangeList::iterator itr = ranges_.begin(); itr != ranges_.end(); ++itr) 598 for (RangeList::iterator itr = ranges_.begin(); itr != ranges_.end(); ++itr)
599 ranges_size += (*itr)->size_in_bytes(); 599 ranges_size += (*itr)->size_in_bytes();
600 600
601 // Return if we're under or at the memory limit. 601 // Return if we're under or at the memory limit.
602 if (ranges_size <= memory_limit_) 602 if (ranges_size <= GetMemoryLimit())
603 return; 603 return;
604 604
605 int bytes_to_free = ranges_size - memory_limit_; 605 size_t bytes_to_free = ranges_size - GetMemoryLimit();
606 606
607 DVLOG(2) << __FUNCTION__ << " " << GetStreamTypeName() << ": Before GC" 607 DVLOG(2) << __FUNCTION__ << " " << GetStreamTypeName() << ": Before GC"
608 << " ranges_size=" << ranges_size 608 << " ranges_size=" << ranges_size
609 << " ranges_=" << RangesToString(ranges_) 609 << " ranges_=" << RangesToString(ranges_)
610 << " memory_limit_=" << memory_limit_; 610 << " GetMemoryLimit()=" << GetMemoryLimit();
611 611
612 // Begin deleting after the last appended buffer. 612 // Begin deleting after the last appended buffer.
613 int bytes_freed = FreeBuffersAfterLastAppended(bytes_to_free); 613 size_t bytes_freed = FreeBuffersAfterLastAppended(bytes_to_free);
614 614
615 // Begin deleting from the front. 615 // Begin deleting from the front.
616 if (bytes_to_free - bytes_freed > 0) 616 if (bytes_freed < bytes_to_free)
617 bytes_freed += FreeBuffers(bytes_to_free - bytes_freed, false); 617 bytes_freed += FreeBuffers(bytes_to_free - bytes_freed, false);
618 618
619 // Begin deleting from the back. 619 // Begin deleting from the back.
620 if (bytes_to_free - bytes_freed > 0) 620 if (bytes_freed < bytes_to_free)
621 bytes_freed += FreeBuffers(bytes_to_free - bytes_freed, true); 621 bytes_freed += FreeBuffers(bytes_to_free - bytes_freed, true);
622 622
623 DVLOG(2) << __FUNCTION__ << " " << GetStreamTypeName() << ": After GC" 623 DVLOG(2) << __FUNCTION__ << " " << GetStreamTypeName() << ": After GC"
624 << " bytes_freed=" << bytes_freed 624 << " bytes_freed=" << bytes_freed
625 << " ranges_=" << RangesToString(ranges_); 625 << " ranges_=" << RangesToString(ranges_);
626 } 626 }
627 627
628 int SourceBufferStream::FreeBuffersAfterLastAppended(int total_bytes_to_free) { 628 int SourceBufferStream::FreeBuffersAfterLastAppended(int total_bytes_to_free) {
629 DecodeTimestamp next_buffer_timestamp = GetNextBufferTimestamp(); 629 DecodeTimestamp next_buffer_timestamp = GetNextBufferTimestamp();
630 if (last_appended_buffer_timestamp_ == kNoDecodeTimestamp() || 630 if (last_appended_buffer_timestamp_ == kNoDecodeTimestamp() ||
(...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after
1588 return false; 1588 return false;
1589 1589
1590 DCHECK_NE(have_splice_buffers, have_preroll_buffer); 1590 DCHECK_NE(have_splice_buffers, have_preroll_buffer);
1591 splice_buffers_index_ = 0; 1591 splice_buffers_index_ = 0;
1592 pending_buffer_.swap(*out_buffer); 1592 pending_buffer_.swap(*out_buffer);
1593 pending_buffers_complete_ = false; 1593 pending_buffers_complete_ = false;
1594 return true; 1594 return true;
1595 } 1595 }
1596 1596
1597 } // namespace media 1597 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698