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 <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 is_enabled_ = enabled; | 301 is_enabled_ = enabled; |
302 if (enabled) { | 302 if (enabled) { |
303 DCHECK(stream_); | 303 DCHECK(stream_); |
304 stream_->Seek(timestamp); | 304 stream_->Seek(timestamp); |
305 } else if (!read_cb_.is_null()) { | 305 } else if (!read_cb_.is_null()) { |
306 DVLOG(1) << "Read from disabled stream, returning EOS"; | 306 DVLOG(1) << "Read from disabled stream, returning EOS"; |
307 base::ResetAndReturn(&read_cb_).Run(kOk, | 307 base::ResetAndReturn(&read_cb_).Run(kOk, |
308 StreamParserBuffer::CreateEOSBuffer()); | 308 StreamParserBuffer::CreateEOSBuffer()); |
309 } | 309 } |
310 if (!stream_status_change_cb_.is_null()) | 310 if (!stream_status_change_cb_.is_null()) |
311 stream_status_change_cb_.Run(is_enabled_, timestamp); | 311 stream_status_change_cb_.Run(this, is_enabled_, timestamp); |
312 } | 312 } |
313 | 313 |
314 void ChunkDemuxerStream::SetStreamStatusChangeCB( | 314 void ChunkDemuxerStream::SetStreamStatusChangeCB( |
315 const StreamStatusChangeCB& cb) { | 315 const StreamStatusChangeCB& cb) { |
316 DCHECK(!cb.is_null()); | 316 DCHECK(!cb.is_null()); |
317 stream_status_change_cb_ = BindToCurrentLoop(cb); | 317 stream_status_change_cb_ = BindToCurrentLoop(cb); |
318 } | 318 } |
319 | 319 |
320 TextTrackConfig ChunkDemuxerStream::text_track_config() { | 320 TextTrackConfig ChunkDemuxerStream::text_track_config() { |
321 CHECK_EQ(type_, TEXT); | 321 CHECK_EQ(type_, TEXT); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 } | 484 } |
485 | 485 |
486 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); | 486 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); |
487 } | 487 } |
488 | 488 |
489 // Demuxer implementation. | 489 // Demuxer implementation. |
490 base::Time ChunkDemuxer::GetTimelineOffset() const { | 490 base::Time ChunkDemuxer::GetTimelineOffset() const { |
491 return timeline_offset_; | 491 return timeline_offset_; |
492 } | 492 } |
493 | 493 |
494 DemuxerStream* ChunkDemuxer::GetStream(DemuxerStream::Type type) { | 494 std::vector<DemuxerStream*> ChunkDemuxer::GetStreams() { |
495 DCHECK_NE(type, DemuxerStream::TEXT); | |
496 base::AutoLock auto_lock(lock_); | 495 base::AutoLock auto_lock(lock_); |
497 | 496 |
498 // TODO(servolk): For now return only the first enabled audio/video stream, | 497 std::vector<DemuxerStream*> result; |
499 // since this GetStream method is part of the implementation of the | 498 for (const auto& stream : audio_streams_) |
500 // DemuxerStreamProvider interface that is used in many places and can't be | 499 result.push_back(stream.get()); |
501 // changed easily. It will be fixed later, when we add support for multiple | |
502 // streams/tracks in DemuxerStreamProvider, tracked by crbug.com/646669 | |
503 if (type == DemuxerStream::AUDIO) | |
504 for (const auto& s : audio_streams_) | |
505 if (s->enabled()) | |
506 return s.get(); | |
507 | 500 |
508 if (type == DemuxerStream::VIDEO) | 501 for (const auto& stream : video_streams_) |
509 for (const auto& s : video_streams_) | 502 result.push_back(stream.get()); |
510 if (s->enabled()) | |
511 return s.get(); | |
512 | 503 |
513 return NULL; | 504 return result; |
| 505 } |
| 506 |
| 507 void ChunkDemuxer::SetStreamStatusChangeCB(const StreamStatusChangeCB& cb) { |
| 508 DCHECK(!cb.is_null()); |
| 509 for (const auto& s : audio_streams_) |
| 510 s->SetStreamStatusChangeCB(cb); |
| 511 for (const auto& s : video_streams_) |
| 512 s->SetStreamStatusChangeCB(cb); |
514 } | 513 } |
515 | 514 |
516 TimeDelta ChunkDemuxer::GetStartTime() const { | 515 TimeDelta ChunkDemuxer::GetStartTime() const { |
517 return TimeDelta(); | 516 return TimeDelta(); |
518 } | 517 } |
519 | 518 |
520 int64_t ChunkDemuxer::GetMemoryUsage() const { | 519 int64_t ChunkDemuxer::GetMemoryUsage() const { |
521 base::AutoLock auto_lock(lock_); | 520 base::AutoLock auto_lock(lock_); |
522 int64_t mem = 0; | 521 int64_t mem = 0; |
523 for (const auto& s : audio_streams_) | 522 for (const auto& s : audio_streams_) |
(...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1329 } | 1328 } |
1330 | 1329 |
1331 void ChunkDemuxer::ShutdownAllStreams() { | 1330 void ChunkDemuxer::ShutdownAllStreams() { |
1332 for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); | 1331 for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
1333 ++itr) { | 1332 ++itr) { |
1334 itr->second->Shutdown(); | 1333 itr->second->Shutdown(); |
1335 } | 1334 } |
1336 } | 1335 } |
1337 | 1336 |
1338 } // namespace media | 1337 } // namespace media |
OLD | NEW |