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

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

Issue 563773002: Allow setting different memory limits for different stream types (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/chunk_demuxer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/chunk_demuxer.h" 5 #include "media/filters/chunk_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <list> 9 #include <list>
10 10
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 // Helper methods that call methods with similar names on all the 149 // Helper methods that call methods with similar names on all the
150 // ChunkDemuxerStreams managed by this object. 150 // ChunkDemuxerStreams managed by this object.
151 void StartReturningData(); 151 void StartReturningData();
152 void AbortReads(); 152 void AbortReads();
153 void Seek(TimeDelta seek_time); 153 void Seek(TimeDelta seek_time);
154 void CompletePendingReadIfPossible(); 154 void CompletePendingReadIfPossible();
155 void OnSetDuration(TimeDelta duration); 155 void OnSetDuration(TimeDelta duration);
156 void MarkEndOfStream(); 156 void MarkEndOfStream();
157 void UnmarkEndOfStream(); 157 void UnmarkEndOfStream();
158 void Shutdown(); 158 void Shutdown();
159 // Sets the memory limit on each stream. |memory_limit| is the 159 // Sets the memory limit on each stream of a specific type.
160 // maximum number of bytes each stream is allowed to hold in its buffer. 160 // |memory_limit| is the maximum number of bytes each stream of type |type|
161 void SetMemoryLimitsForTesting(int memory_limit); 161 // is allowed to hold in its buffer.
162 void SetMemoryLimits(DemuxerStream::Type type, int memory_limit);
162 bool IsSeekWaitingForData() const; 163 bool IsSeekWaitingForData() const;
163 164
164 private: 165 private:
165 // Called by the |stream_parser_| when a new initialization segment is 166 // Called by the |stream_parser_| when a new initialization segment is
166 // encountered. 167 // encountered.
167 // Returns true on a successful call. Returns false if an error occurred while 168 // Returns true on a successful call. Returns false if an error occurred while
168 // processing decoder configurations. 169 // processing decoder configurations.
169 bool OnNewConfigs(bool allow_audio, bool allow_video, 170 bool OnNewConfigs(bool allow_audio, bool allow_video,
170 const AudioDecoderConfig& audio_config, 171 const AudioDecoderConfig& audio_config,
171 const VideoDecoderConfig& video_config, 172 const VideoDecoderConfig& video_config,
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 479
479 if (video_) 480 if (video_)
480 video_->Shutdown(); 481 video_->Shutdown();
481 482
482 for (TextStreamMap::iterator itr = text_stream_map_.begin(); 483 for (TextStreamMap::iterator itr = text_stream_map_.begin();
483 itr != text_stream_map_.end(); ++itr) { 484 itr != text_stream_map_.end(); ++itr) {
484 itr->second->Shutdown(); 485 itr->second->Shutdown();
485 } 486 }
486 } 487 }
487 488
488 void SourceState::SetMemoryLimitsForTesting(int memory_limit) { 489 void SourceState::SetMemoryLimits(DemuxerStream::Type type, int memory_limit) {
489 if (audio_) 490 switch (type) {
490 audio_->set_memory_limit_for_testing(memory_limit); 491 case DemuxerStream::AUDIO:
491 492 if (audio_)
492 if (video_) 493 audio_->set_memory_limit(memory_limit);
493 video_->set_memory_limit_for_testing(memory_limit); 494 break;
494 495 case DemuxerStream::VIDEO:
495 for (TextStreamMap::iterator itr = text_stream_map_.begin(); 496 if (video_)
496 itr != text_stream_map_.end(); ++itr) { 497 video_->set_memory_limit(memory_limit);
497 itr->second->set_memory_limit_for_testing(memory_limit); 498 break;
499 case DemuxerStream::TEXT:
500 for (TextStreamMap::iterator itr = text_stream_map_.begin();
501 itr != text_stream_map_.end(); ++itr) {
502 itr->second->set_memory_limit(memory_limit);
503 }
504 break;
505 case DemuxerStream::UNKNOWN:
506 case DemuxerStream::NUM_TYPES:
507 NOTREACHED();
508 break;
498 } 509 }
499 } 510 }
500 511
501 bool SourceState::IsSeekWaitingForData() const { 512 bool SourceState::IsSeekWaitingForData() const {
502 if (audio_ && audio_->IsSeekWaitingForData()) 513 if (audio_ && audio_->IsSeekWaitingForData())
503 return true; 514 return true;
504 515
505 if (video_ && video_->IsSeekWaitingForData()) 516 if (video_ && video_->IsSeekWaitingForData())
506 return true; 517 return true;
507 518
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 return; 1504 return;
1494 1505
1495 ShutdownAllStreams(); 1506 ShutdownAllStreams();
1496 1507
1497 ChangeState_Locked(SHUTDOWN); 1508 ChangeState_Locked(SHUTDOWN);
1498 1509
1499 if(!seek_cb_.is_null()) 1510 if(!seek_cb_.is_null())
1500 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_ERROR_ABORT); 1511 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_ERROR_ABORT);
1501 } 1512 }
1502 1513
1503 void ChunkDemuxer::SetMemoryLimitsForTesting(int memory_limit) { 1514 void ChunkDemuxer::SetMemoryLimits(DemuxerStream::Type type, int memory_limit) {
1504 for (SourceStateMap::iterator itr = source_state_map_.begin(); 1515 for (SourceStateMap::iterator itr = source_state_map_.begin();
1505 itr != source_state_map_.end(); ++itr) { 1516 itr != source_state_map_.end(); ++itr) {
1506 itr->second->SetMemoryLimitsForTesting(memory_limit); 1517 itr->second->SetMemoryLimits(type, memory_limit);
1507 } 1518 }
1508 } 1519 }
1509 1520
1510 void ChunkDemuxer::ChangeState_Locked(State new_state) { 1521 void ChunkDemuxer::ChangeState_Locked(State new_state) {
1511 lock_.AssertAcquired(); 1522 lock_.AssertAcquired();
1512 DVLOG(1) << "ChunkDemuxer::ChangeState_Locked() : " 1523 DVLOG(1) << "ChunkDemuxer::ChangeState_Locked() : "
1513 << state_ << " -> " << new_state; 1524 << state_ << " -> " << new_state;
1514 state_ = new_state; 1525 state_ = new_state;
1515 } 1526 }
1516 1527
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 } 1761 }
1751 1762
1752 void ChunkDemuxer::ShutdownAllStreams() { 1763 void ChunkDemuxer::ShutdownAllStreams() {
1753 for (SourceStateMap::iterator itr = source_state_map_.begin(); 1764 for (SourceStateMap::iterator itr = source_state_map_.begin();
1754 itr != source_state_map_.end(); ++itr) { 1765 itr != source_state_map_.end(); ++itr) {
1755 itr->second->Shutdown(); 1766 itr->second->Shutdown();
1756 } 1767 }
1757 } 1768 }
1758 1769
1759 } // namespace media 1770 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/chunk_demuxer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698