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

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

Issue 1171263004: Allow setting memory limits on media::DemuxerStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merged CL that adds get/set buffer size on WMP 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
« 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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // Helper methods that call methods with similar names on all the 156 // Helper methods that call methods with similar names on all the
157 // ChunkDemuxerStreams managed by this object. 157 // ChunkDemuxerStreams managed by this object.
158 void StartReturningData(); 158 void StartReturningData();
159 void AbortReads(); 159 void AbortReads();
160 void Seek(TimeDelta seek_time); 160 void Seek(TimeDelta seek_time);
161 void CompletePendingReadIfPossible(); 161 void CompletePendingReadIfPossible();
162 void OnSetDuration(TimeDelta duration); 162 void OnSetDuration(TimeDelta duration);
163 void MarkEndOfStream(); 163 void MarkEndOfStream();
164 void UnmarkEndOfStream(); 164 void UnmarkEndOfStream();
165 void Shutdown(); 165 void Shutdown();
166 // Sets the memory limit on each stream of a specific type.
167 // |memory_limit| is the maximum number of bytes each stream of type |type|
168 // is allowed to hold in its buffer.
169 void SetMemoryLimits(DemuxerStream::Type type, int memory_limit);
170 bool IsSeekWaitingForData() const; 166 bool IsSeekWaitingForData() const;
171 167
172 private: 168 private:
173 // Called by the |stream_parser_| when a new initialization segment is 169 // Called by the |stream_parser_| when a new initialization segment is
174 // encountered. 170 // encountered.
175 // Returns true on a successful call. Returns false if an error occurred while 171 // Returns true on a successful call. Returns false if an error occurred while
176 // processing decoder configurations. 172 // processing decoder configurations.
177 bool OnNewConfigs(bool allow_audio, bool allow_video, 173 bool OnNewConfigs(bool allow_audio, bool allow_video,
178 const AudioDecoderConfig& audio_config, 174 const AudioDecoderConfig& audio_config,
179 const VideoDecoderConfig& video_config, 175 const VideoDecoderConfig& video_config,
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 503
508 if (video_) 504 if (video_)
509 video_->Shutdown(); 505 video_->Shutdown();
510 506
511 for (TextStreamMap::iterator itr = text_stream_map_.begin(); 507 for (TextStreamMap::iterator itr = text_stream_map_.begin();
512 itr != text_stream_map_.end(); ++itr) { 508 itr != text_stream_map_.end(); ++itr) {
513 itr->second->Shutdown(); 509 itr->second->Shutdown();
514 } 510 }
515 } 511 }
516 512
517 void SourceState::SetMemoryLimits(DemuxerStream::Type type, int memory_limit) {
518 switch (type) {
519 case DemuxerStream::AUDIO:
520 if (audio_)
521 audio_->set_memory_limit(memory_limit);
522 break;
523 case DemuxerStream::VIDEO:
524 if (video_)
525 video_->set_memory_limit(memory_limit);
526 break;
527 case DemuxerStream::TEXT:
528 for (TextStreamMap::iterator itr = text_stream_map_.begin();
529 itr != text_stream_map_.end(); ++itr) {
530 itr->second->set_memory_limit(memory_limit);
531 }
532 break;
533 case DemuxerStream::UNKNOWN:
534 case DemuxerStream::NUM_TYPES:
535 NOTREACHED();
536 break;
537 }
538 }
539
540 bool SourceState::IsSeekWaitingForData() const { 513 bool SourceState::IsSeekWaitingForData() const {
541 if (audio_ && audio_->IsSeekWaitingForData()) 514 if (audio_ && audio_->IsSeekWaitingForData())
542 return true; 515 return true;
543 516
544 if (video_ && video_->IsSeekWaitingForData()) 517 if (video_ && video_->IsSeekWaitingForData())
545 return true; 518 return true;
546 519
547 // NOTE: We are intentionally not checking the text tracks 520 // NOTE: We are intentionally not checking the text tracks
548 // because text tracks are discontinuous and may not have data 521 // because text tracks are discontinuous and may not have data
549 // for the seek position. This is ok and playback should not be 522 // for the seek position. This is ok and playback should not be
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 base::AutoLock auto_lock(lock_); 986 base::AutoLock auto_lock(lock_);
1014 return stream_->GetCurrentVideoDecoderConfig(); 987 return stream_->GetCurrentVideoDecoderConfig();
1015 } 988 }
1016 989
1017 bool ChunkDemuxerStream::SupportsConfigChanges() { return true; } 990 bool ChunkDemuxerStream::SupportsConfigChanges() { return true; }
1018 991
1019 VideoRotation ChunkDemuxerStream::video_rotation() { 992 VideoRotation ChunkDemuxerStream::video_rotation() {
1020 return VIDEO_ROTATION_0; 993 return VIDEO_ROTATION_0;
1021 } 994 }
1022 995
996 size_t ChunkDemuxerStream::GetMemoryLimit() const {
997 return stream_->GetMemoryLimit();
998 }
999
1000 void ChunkDemuxerStream::SetMemoryLimit(size_t memory_limit) {
1001 stream_->SetMemoryLimit(memory_limit);
1002 }
1003
1023 TextTrackConfig ChunkDemuxerStream::text_track_config() { 1004 TextTrackConfig ChunkDemuxerStream::text_track_config() {
1024 CHECK_EQ(type_, TEXT); 1005 CHECK_EQ(type_, TEXT);
1025 base::AutoLock auto_lock(lock_); 1006 base::AutoLock auto_lock(lock_);
1026 return stream_->GetCurrentTextTrackConfig(); 1007 return stream_->GetCurrentTextTrackConfig();
1027 } 1008 }
1028 1009
1029 void ChunkDemuxerStream::SetLiveness(Liveness liveness) { 1010 void ChunkDemuxerStream::SetLiveness(Liveness liveness) {
1030 base::AutoLock auto_lock(lock_); 1011 base::AutoLock auto_lock(lock_);
1031 liveness_ = liveness; 1012 liveness_ = liveness;
1032 } 1013 }
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
1581 return; 1562 return;
1582 1563
1583 ShutdownAllStreams(); 1564 ShutdownAllStreams();
1584 1565
1585 ChangeState_Locked(SHUTDOWN); 1566 ChangeState_Locked(SHUTDOWN);
1586 1567
1587 if(!seek_cb_.is_null()) 1568 if(!seek_cb_.is_null())
1588 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_ERROR_ABORT); 1569 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_ERROR_ABORT);
1589 } 1570 }
1590 1571
1591 void ChunkDemuxer::SetMemoryLimits(DemuxerStream::Type type, int memory_limit) {
1592 for (SourceStateMap::iterator itr = source_state_map_.begin();
1593 itr != source_state_map_.end(); ++itr) {
1594 itr->second->SetMemoryLimits(type, memory_limit);
1595 }
1596 }
1597
1598 void ChunkDemuxer::ChangeState_Locked(State new_state) { 1572 void ChunkDemuxer::ChangeState_Locked(State new_state) {
1599 lock_.AssertAcquired(); 1573 lock_.AssertAcquired();
1600 DVLOG(1) << "ChunkDemuxer::ChangeState_Locked() : " 1574 DVLOG(1) << "ChunkDemuxer::ChangeState_Locked() : "
1601 << state_ << " -> " << new_state; 1575 << state_ << " -> " << new_state;
1602 state_ = new_state; 1576 state_ = new_state;
1603 } 1577 }
1604 1578
1605 ChunkDemuxer::~ChunkDemuxer() { 1579 ChunkDemuxer::~ChunkDemuxer() {
1606 DCHECK_NE(state_, INITIALIZED); 1580 DCHECK_NE(state_, INITIALIZED);
1607 1581
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 } 1806 }
1833 1807
1834 void ChunkDemuxer::ShutdownAllStreams() { 1808 void ChunkDemuxer::ShutdownAllStreams() {
1835 for (SourceStateMap::iterator itr = source_state_map_.begin(); 1809 for (SourceStateMap::iterator itr = source_state_map_.begin();
1836 itr != source_state_map_.end(); ++itr) { 1810 itr != source_state_map_.end(); ++itr) {
1837 itr->second->Shutdown(); 1811 itr->second->Shutdown();
1838 } 1812 }
1839 } 1813 }
1840 1814
1841 } // namespace media 1815 } // 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