| 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/base/pipeline.h" | 5 #include "media/base/pipeline.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 playback_rate_(0.0f), | 74 playback_rate_(0.0f), |
| 75 clock_(new Clock(&default_clock_)), | 75 clock_(new Clock(&default_clock_)), |
| 76 waiting_for_clock_update_(false), | 76 waiting_for_clock_update_(false), |
| 77 status_(PIPELINE_OK), | 77 status_(PIPELINE_OK), |
| 78 has_audio_(false), | 78 has_audio_(false), |
| 79 has_video_(false), | 79 has_video_(false), |
| 80 state_(kCreated), | 80 state_(kCreated), |
| 81 audio_ended_(false), | 81 audio_ended_(false), |
| 82 video_ended_(false), | 82 video_ended_(false), |
| 83 audio_disabled_(false), | 83 audio_disabled_(false), |
| 84 demuxer_(NULL), |
| 84 creation_time_(base::Time::Now()) { | 85 creation_time_(base::Time::Now()) { |
| 85 media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(kCreated)); | 86 media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(kCreated)); |
| 86 media_log_->AddEvent( | 87 media_log_->AddEvent( |
| 87 media_log_->CreateEvent(MediaLogEvent::PIPELINE_CREATED)); | 88 media_log_->CreateEvent(MediaLogEvent::PIPELINE_CREATED)); |
| 88 } | 89 } |
| 89 | 90 |
| 90 Pipeline::~Pipeline() { | 91 Pipeline::~Pipeline() { |
| 91 // TODO(scherkus): Reenable after figuring out why this is firing, see | 92 // TODO(scherkus): Reenable after figuring out why this is firing, see |
| 92 // http://crbug.com/148405 | 93 // http://crbug.com/148405 |
| 93 #if 0 | 94 #if 0 |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 bound_fns.Push(base::Bind( | 578 bound_fns.Push(base::Bind( |
| 578 &AudioRenderer::Flush, base::Unretained(audio_renderer_.get()))); | 579 &AudioRenderer::Flush, base::Unretained(audio_renderer_.get()))); |
| 579 } | 580 } |
| 580 if (video_renderer_) { | 581 if (video_renderer_) { |
| 581 bound_fns.Push(base::Bind( | 582 bound_fns.Push(base::Bind( |
| 582 &VideoRenderer::Flush, base::Unretained(video_renderer_.get()))); | 583 &VideoRenderer::Flush, base::Unretained(video_renderer_.get()))); |
| 583 } | 584 } |
| 584 | 585 |
| 585 // Seek demuxer. | 586 // Seek demuxer. |
| 586 bound_fns.Push(base::Bind( | 587 bound_fns.Push(base::Bind( |
| 587 &Demuxer::Seek, demuxer_, seek_timestamp)); | 588 &Demuxer::Seek, base::Unretained(demuxer_), seek_timestamp)); |
| 588 | 589 |
| 589 // Preroll renderers. | 590 // Preroll renderers. |
| 590 if (audio_renderer_) { | 591 if (audio_renderer_) { |
| 591 bound_fns.Push(base::Bind( | 592 bound_fns.Push(base::Bind( |
| 592 &AudioRenderer::Preroll, base::Unretained(audio_renderer_.get()), | 593 &AudioRenderer::Preroll, base::Unretained(audio_renderer_.get()), |
| 593 seek_timestamp)); | 594 seek_timestamp)); |
| 594 } | 595 } |
| 595 | 596 |
| 596 if (video_renderer_) { | 597 if (video_renderer_) { |
| 597 bound_fns.Push(base::Bind( | 598 bound_fns.Push(base::Bind( |
| (...skipping 23 matching lines...) Expand all Loading... |
| 621 } | 622 } |
| 622 | 623 |
| 623 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb); | 624 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb); |
| 624 } | 625 } |
| 625 | 626 |
| 626 void Pipeline::DoStop(const PipelineStatusCB& done_cb) { | 627 void Pipeline::DoStop(const PipelineStatusCB& done_cb) { |
| 627 DCHECK(message_loop_->BelongsToCurrentThread()); | 628 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 628 DCHECK(!pending_callbacks_.get()); | 629 DCHECK(!pending_callbacks_.get()); |
| 629 SerialRunner::Queue bound_fns; | 630 SerialRunner::Queue bound_fns; |
| 630 | 631 |
| 631 if (demuxer_) | 632 if (demuxer_) { |
| 632 bound_fns.Push(base::Bind(&Demuxer::Stop, demuxer_)); | 633 bound_fns.Push(base::Bind( |
| 634 &Demuxer::Stop, base::Unretained(demuxer_))); |
| 635 } |
| 633 | 636 |
| 634 if (audio_renderer_) { | 637 if (audio_renderer_) { |
| 635 bound_fns.Push(base::Bind( | 638 bound_fns.Push(base::Bind( |
| 636 &AudioRenderer::Stop, base::Unretained(audio_renderer_.get()))); | 639 &AudioRenderer::Stop, base::Unretained(audio_renderer_.get()))); |
| 637 } | 640 } |
| 638 | 641 |
| 639 if (video_renderer_) { | 642 if (video_renderer_) { |
| 640 bound_fns.Push(base::Bind( | 643 bound_fns.Push(base::Bind( |
| 641 &VideoRenderer::Stop, base::Unretained(video_renderer_.get()))); | 644 &VideoRenderer::Stop, base::Unretained(video_renderer_.get()))); |
| 642 } | 645 } |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 void Pipeline::InitializeDemuxer(const PipelineStatusCB& done_cb) { | 909 void Pipeline::InitializeDemuxer(const PipelineStatusCB& done_cb) { |
| 907 DCHECK(message_loop_->BelongsToCurrentThread()); | 910 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 908 | 911 |
| 909 demuxer_ = filter_collection_->GetDemuxer(); | 912 demuxer_ = filter_collection_->GetDemuxer(); |
| 910 demuxer_->Initialize(this, done_cb); | 913 demuxer_->Initialize(this, done_cb); |
| 911 } | 914 } |
| 912 | 915 |
| 913 void Pipeline::InitializeAudioRenderer(const PipelineStatusCB& done_cb) { | 916 void Pipeline::InitializeAudioRenderer(const PipelineStatusCB& done_cb) { |
| 914 DCHECK(message_loop_->BelongsToCurrentThread()); | 917 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 915 | 918 |
| 916 scoped_refptr<DemuxerStream> stream = | |
| 917 demuxer_->GetStream(DemuxerStream::AUDIO); | |
| 918 DCHECK(stream); | |
| 919 | |
| 920 audio_renderer_ = filter_collection_->GetAudioRenderer(); | 919 audio_renderer_ = filter_collection_->GetAudioRenderer(); |
| 921 audio_renderer_->Initialize( | 920 audio_renderer_->Initialize( |
| 922 stream, | 921 demuxer_->GetStream(DemuxerStream::AUDIO), |
| 923 done_cb, | 922 done_cb, |
| 924 base::Bind(&Pipeline::OnUpdateStatistics, this), | 923 base::Bind(&Pipeline::OnUpdateStatistics, this), |
| 925 base::Bind(&Pipeline::OnAudioUnderflow, this), | 924 base::Bind(&Pipeline::OnAudioUnderflow, this), |
| 926 base::Bind(&Pipeline::OnAudioTimeUpdate, this), | 925 base::Bind(&Pipeline::OnAudioTimeUpdate, this), |
| 927 base::Bind(&Pipeline::OnAudioRendererEnded, this), | 926 base::Bind(&Pipeline::OnAudioRendererEnded, this), |
| 928 base::Bind(&Pipeline::OnAudioDisabled, this), | 927 base::Bind(&Pipeline::OnAudioDisabled, this), |
| 929 base::Bind(&Pipeline::SetError, this)); | 928 base::Bind(&Pipeline::SetError, this)); |
| 930 } | 929 } |
| 931 | 930 |
| 932 void Pipeline::InitializeVideoRenderer(const PipelineStatusCB& done_cb) { | 931 void Pipeline::InitializeVideoRenderer(const PipelineStatusCB& done_cb) { |
| 933 DCHECK(message_loop_->BelongsToCurrentThread()); | 932 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 934 | 933 |
| 935 scoped_refptr<DemuxerStream> stream = | 934 scoped_refptr<DemuxerStream> stream = |
| 936 demuxer_->GetStream(DemuxerStream::VIDEO); | 935 demuxer_->GetStream(DemuxerStream::VIDEO); |
| 937 DCHECK(stream); | |
| 938 | 936 |
| 939 { | 937 { |
| 940 // Get an initial natural size so we have something when we signal | 938 // Get an initial natural size so we have something when we signal |
| 941 // the kHaveMetadata buffering state. | 939 // the kHaveMetadata buffering state. |
| 942 base::AutoLock l(lock_); | 940 base::AutoLock l(lock_); |
| 943 natural_size_ = stream->video_decoder_config().natural_size(); | 941 natural_size_ = stream->video_decoder_config().natural_size(); |
| 944 } | 942 } |
| 945 | 943 |
| 946 video_renderer_ = filter_collection_->GetVideoRenderer(); | 944 video_renderer_ = filter_collection_->GetVideoRenderer(); |
| 947 video_renderer_->Initialize( | 945 video_renderer_->Initialize( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 973 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { | 971 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { |
| 974 lock_.AssertAcquired(); | 972 lock_.AssertAcquired(); |
| 975 if (!waiting_for_clock_update_) | 973 if (!waiting_for_clock_update_) |
| 976 return; | 974 return; |
| 977 | 975 |
| 978 waiting_for_clock_update_ = false; | 976 waiting_for_clock_update_ = false; |
| 979 clock_->Play(); | 977 clock_->Play(); |
| 980 } | 978 } |
| 981 | 979 |
| 982 } // namespace media | 980 } // namespace media |
| OLD | NEW |