OLD | NEW |
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 #include <utility> | 10 #include <utility> |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 TimeDelta ChunkDemuxer::GetStartTime() const { | 503 TimeDelta ChunkDemuxer::GetStartTime() const { |
504 return TimeDelta(); | 504 return TimeDelta(); |
505 } | 505 } |
506 | 506 |
507 int64_t ChunkDemuxer::GetMemoryUsage() const { | 507 int64_t ChunkDemuxer::GetMemoryUsage() const { |
508 base::AutoLock auto_lock(lock_); | 508 base::AutoLock auto_lock(lock_); |
509 return (audio_ ? audio_->GetBufferedSize() : 0) + | 509 return (audio_ ? audio_->GetBufferedSize() : 0) + |
510 (video_ ? video_->GetBufferedSize() : 0); | 510 (video_ ? video_->GetBufferedSize() : 0); |
511 } | 511 } |
512 | 512 |
| 513 void ChunkDemuxer::AbortPendingReads() { |
| 514 base::AutoLock auto_lock(lock_); |
| 515 DCHECK(state_ == INITIALIZED || state_ == ENDED || state_ == SHUTDOWN || |
| 516 state_ == PARSE_ERROR) |
| 517 << state_; |
| 518 |
| 519 if (state_ == SHUTDOWN || state_ == PARSE_ERROR) |
| 520 return; |
| 521 |
| 522 AbortPendingReads_Locked(); |
| 523 } |
| 524 |
513 void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) { | 525 void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) { |
514 DVLOG(1) << "StartWaitingForSeek()"; | 526 DVLOG(1) << "StartWaitingForSeek()"; |
515 base::AutoLock auto_lock(lock_); | 527 base::AutoLock auto_lock(lock_); |
516 DCHECK(state_ == INITIALIZED || state_ == ENDED || state_ == SHUTDOWN || | 528 DCHECK(state_ == INITIALIZED || state_ == ENDED || state_ == SHUTDOWN || |
517 state_ == PARSE_ERROR) << state_; | 529 state_ == PARSE_ERROR) << state_; |
518 DCHECK(seek_cb_.is_null()); | 530 DCHECK(seek_cb_.is_null()); |
519 | 531 |
520 if (state_ == SHUTDOWN || state_ == PARSE_ERROR) | 532 if (state_ == SHUTDOWN || state_ == PARSE_ERROR) |
521 return; | 533 return; |
522 | 534 |
523 AbortPendingReads(); | 535 AbortPendingReads_Locked(); |
524 SeekAllSources(seek_time); | 536 SeekAllSources(seek_time); |
525 | 537 |
526 // Cancel state set in CancelPendingSeek() since we want to | 538 // Cancel state set in CancelPendingSeek() since we want to |
527 // accept the next Seek(). | 539 // accept the next Seek(). |
528 cancel_next_seek_ = false; | 540 cancel_next_seek_ = false; |
529 } | 541 } |
530 | 542 |
531 void ChunkDemuxer::CancelPendingSeek(TimeDelta seek_time) { | 543 void ChunkDemuxer::CancelPendingSeek(TimeDelta seek_time) { |
532 base::AutoLock auto_lock(lock_); | 544 base::AutoLock auto_lock(lock_); |
533 DCHECK_NE(state_, INITIALIZING); | 545 DCHECK_NE(state_, INITIALIZING); |
534 DCHECK(seek_cb_.is_null() || IsSeekWaitingForData_Locked()); | 546 DCHECK(seek_cb_.is_null() || IsSeekWaitingForData_Locked()); |
535 | 547 |
536 if (cancel_next_seek_) | 548 if (cancel_next_seek_) |
537 return; | 549 return; |
538 | 550 |
539 AbortPendingReads(); | 551 AbortPendingReads_Locked(); |
540 SeekAllSources(seek_time); | 552 SeekAllSources(seek_time); |
541 | 553 |
542 if (seek_cb_.is_null()) { | 554 if (seek_cb_.is_null()) { |
543 cancel_next_seek_ = true; | 555 cancel_next_seek_ = true; |
544 return; | 556 return; |
545 } | 557 } |
546 | 558 |
547 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); | 559 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); |
548 } | 560 } |
549 | 561 |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1231 return MediaSourceState::ComputeRangesIntersection(ranges_list, ended); | 1243 return MediaSourceState::ComputeRangesIntersection(ranges_list, ended); |
1232 } | 1244 } |
1233 | 1245 |
1234 void ChunkDemuxer::StartReturningData() { | 1246 void ChunkDemuxer::StartReturningData() { |
1235 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); | 1247 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
1236 itr != source_state_map_.end(); ++itr) { | 1248 itr != source_state_map_.end(); ++itr) { |
1237 itr->second->StartReturningData(); | 1249 itr->second->StartReturningData(); |
1238 } | 1250 } |
1239 } | 1251 } |
1240 | 1252 |
1241 void ChunkDemuxer::AbortPendingReads() { | 1253 void ChunkDemuxer::AbortPendingReads_Locked() { |
1242 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); | 1254 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
1243 itr != source_state_map_.end(); ++itr) { | 1255 itr != source_state_map_.end(); ++itr) { |
1244 itr->second->AbortReads(); | 1256 itr->second->AbortReads(); |
1245 } | 1257 } |
1246 } | 1258 } |
1247 | 1259 |
1248 void ChunkDemuxer::SeekAllSources(TimeDelta seek_time) { | 1260 void ChunkDemuxer::SeekAllSources(TimeDelta seek_time) { |
1249 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); | 1261 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
1250 itr != source_state_map_.end(); ++itr) { | 1262 itr != source_state_map_.end(); ++itr) { |
1251 itr->second->Seek(seek_time); | 1263 itr->second->Seek(seek_time); |
1252 } | 1264 } |
1253 } | 1265 } |
1254 | 1266 |
1255 void ChunkDemuxer::CompletePendingReadsIfPossible() { | 1267 void ChunkDemuxer::CompletePendingReadsIfPossible() { |
1256 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); | 1268 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
1257 itr != source_state_map_.end(); ++itr) { | 1269 itr != source_state_map_.end(); ++itr) { |
1258 itr->second->CompletePendingReadIfPossible(); | 1270 itr->second->CompletePendingReadIfPossible(); |
1259 } | 1271 } |
1260 } | 1272 } |
1261 | 1273 |
1262 void ChunkDemuxer::ShutdownAllStreams() { | 1274 void ChunkDemuxer::ShutdownAllStreams() { |
1263 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); | 1275 for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
1264 itr != source_state_map_.end(); ++itr) { | 1276 itr != source_state_map_.end(); ++itr) { |
1265 itr->second->Shutdown(); | 1277 itr->second->Shutdown(); |
1266 } | 1278 } |
1267 } | 1279 } |
1268 | 1280 |
1269 } // namespace media | 1281 } // namespace media |
OLD | NEW |