| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 DCHECK(seek_cb_.is_null()); | 99 DCHECK(seek_cb_.is_null()); |
| 100 | 100 |
| 101 media_log_->AddEvent( | 101 media_log_->AddEvent( |
| 102 media_log_->CreateEvent(MediaLogEvent::PIPELINE_DESTROYED)); | 102 media_log_->CreateEvent(MediaLogEvent::PIPELINE_DESTROYED)); |
| 103 } | 103 } |
| 104 | 104 |
| 105 void Pipeline::Start(scoped_ptr<FilterCollection> collection, | 105 void Pipeline::Start(scoped_ptr<FilterCollection> collection, |
| 106 const PipelineStatusCB& ended_cb, | 106 const PipelineStatusCB& ended_cb, |
| 107 const PipelineStatusCB& error_cb, | 107 const PipelineStatusCB& error_cb, |
| 108 const PipelineStatusCB& seek_cb, | 108 const PipelineStatusCB& seek_cb, |
| 109 const BufferingStateCB& buffering_state_cb) { | 109 const BufferingStateCB& buffering_state_cb, |
| 110 const SetDecryptorReadyCB& set_decryptor_ready_cb) { |
| 110 base::AutoLock auto_lock(lock_); | 111 base::AutoLock auto_lock(lock_); |
| 111 CHECK(!running_) << "Media pipeline is already running"; | 112 CHECK(!running_) << "Media pipeline is already running"; |
| 112 DCHECK(!buffering_state_cb.is_null()); | 113 DCHECK(!buffering_state_cb.is_null()); |
| 113 | 114 |
| 114 running_ = true; | 115 running_ = true; |
| 115 message_loop_->PostTask(FROM_HERE, base::Bind( | 116 message_loop_->PostTask(FROM_HERE, base::Bind( |
| 116 &Pipeline::StartTask, this, base::Passed(&collection), | 117 &Pipeline::StartTask, this, base::Passed(&collection), |
| 117 ended_cb, error_cb, seek_cb, buffering_state_cb)); | 118 ended_cb, error_cb, seek_cb, buffering_state_cb, set_decryptor_ready_cb)); |
| 118 } | 119 } |
| 119 | 120 |
| 120 void Pipeline::Stop(const base::Closure& stop_cb) { | 121 void Pipeline::Stop(const base::Closure& stop_cb) { |
| 121 base::AutoLock auto_lock(lock_); | 122 base::AutoLock auto_lock(lock_); |
| 122 message_loop_->PostTask(FROM_HERE, base::Bind( | 123 message_loop_->PostTask(FROM_HERE, base::Bind( |
| 123 &Pipeline::StopTask, this, stop_cb)); | 124 &Pipeline::StopTask, this, stop_cb)); |
| 124 } | 125 } |
| 125 | 126 |
| 126 void Pipeline::Seek(TimeDelta time, const PipelineStatusCB& seek_cb) { | 127 void Pipeline::Seek(TimeDelta time, const PipelineStatusCB& seek_cb) { |
| 127 base::AutoLock auto_lock(lock_); | 128 base::AutoLock auto_lock(lock_); |
| (...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 statistics_.audio_bytes_decoded += stats.audio_bytes_decoded; | 691 statistics_.audio_bytes_decoded += stats.audio_bytes_decoded; |
| 691 statistics_.video_bytes_decoded += stats.video_bytes_decoded; | 692 statistics_.video_bytes_decoded += stats.video_bytes_decoded; |
| 692 statistics_.video_frames_decoded += stats.video_frames_decoded; | 693 statistics_.video_frames_decoded += stats.video_frames_decoded; |
| 693 statistics_.video_frames_dropped += stats.video_frames_dropped; | 694 statistics_.video_frames_dropped += stats.video_frames_dropped; |
| 694 } | 695 } |
| 695 | 696 |
| 696 void Pipeline::StartTask(scoped_ptr<FilterCollection> filter_collection, | 697 void Pipeline::StartTask(scoped_ptr<FilterCollection> filter_collection, |
| 697 const PipelineStatusCB& ended_cb, | 698 const PipelineStatusCB& ended_cb, |
| 698 const PipelineStatusCB& error_cb, | 699 const PipelineStatusCB& error_cb, |
| 699 const PipelineStatusCB& seek_cb, | 700 const PipelineStatusCB& seek_cb, |
| 700 const BufferingStateCB& buffering_state_cb) { | 701 const BufferingStateCB& buffering_state_cb, |
| 702 const SetDecryptorReadyCB& set_decryptor_ready_cb) { |
| 701 DCHECK(message_loop_->BelongsToCurrentThread()); | 703 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 702 CHECK_EQ(kCreated, state_) | 704 CHECK_EQ(kCreated, state_) |
| 703 << "Media pipeline cannot be started more than once"; | 705 << "Media pipeline cannot be started more than once"; |
| 704 | 706 |
| 705 filter_collection_ = filter_collection.Pass(); | 707 filter_collection_ = filter_collection.Pass(); |
| 706 ended_cb_ = ended_cb; | 708 ended_cb_ = ended_cb; |
| 707 error_cb_ = error_cb; | 709 error_cb_ = error_cb; |
| 708 seek_cb_ = seek_cb; | 710 seek_cb_ = seek_cb; |
| 709 buffering_state_cb_ = buffering_state_cb; | 711 buffering_state_cb_ = buffering_state_cb; |
| 712 set_decryptor_ready_cb_ = set_decryptor_ready_cb; |
| 710 | 713 |
| 711 StateTransitionTask(PIPELINE_OK); | 714 StateTransitionTask(PIPELINE_OK); |
| 712 } | 715 } |
| 713 | 716 |
| 714 void Pipeline::StopTask(const base::Closure& stop_cb) { | 717 void Pipeline::StopTask(const base::Closure& stop_cb) { |
| 715 DCHECK(message_loop_->BelongsToCurrentThread()); | 718 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 716 DCHECK(stop_cb_.is_null()); | 719 DCHECK(stop_cb_.is_null()); |
| 717 | 720 |
| 718 if (state_ == kStopped) { | 721 if (state_ == kStopped) { |
| 719 stop_cb.Run(); | 722 stop_cb.Run(); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 882 DCHECK(message_loop_->BelongsToCurrentThread()); | 885 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 883 | 886 |
| 884 scoped_refptr<DemuxerStream> stream = | 887 scoped_refptr<DemuxerStream> stream = |
| 885 demuxer_->GetStream(DemuxerStream::AUDIO); | 888 demuxer_->GetStream(DemuxerStream::AUDIO); |
| 886 DCHECK(stream); | 889 DCHECK(stream); |
| 887 | 890 |
| 888 filter_collection_->SelectAudioRenderer(&audio_renderer_); | 891 filter_collection_->SelectAudioRenderer(&audio_renderer_); |
| 889 audio_renderer_->Initialize( | 892 audio_renderer_->Initialize( |
| 890 stream, | 893 stream, |
| 891 *filter_collection_->GetAudioDecoders(), | 894 *filter_collection_->GetAudioDecoders(), |
| 895 set_decryptor_ready_cb_, |
| 892 done_cb, | 896 done_cb, |
| 893 base::Bind(&Pipeline::OnUpdateStatistics, this), | 897 base::Bind(&Pipeline::OnUpdateStatistics, this), |
| 894 base::Bind(&Pipeline::OnAudioUnderflow, this), | 898 base::Bind(&Pipeline::OnAudioUnderflow, this), |
| 895 base::Bind(&Pipeline::OnAudioTimeUpdate, this), | 899 base::Bind(&Pipeline::OnAudioTimeUpdate, this), |
| 896 base::Bind(&Pipeline::OnAudioRendererEnded, this), | 900 base::Bind(&Pipeline::OnAudioRendererEnded, this), |
| 897 base::Bind(&Pipeline::OnAudioDisabled, this), | 901 base::Bind(&Pipeline::OnAudioDisabled, this), |
| 898 base::Bind(&Pipeline::SetError, this)); | 902 base::Bind(&Pipeline::SetError, this)); |
| 899 filter_collection_->GetAudioDecoders()->clear(); | 903 filter_collection_->GetAudioDecoders()->clear(); |
| 900 } | 904 } |
| 901 | 905 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { | 949 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { |
| 946 lock_.AssertAcquired(); | 950 lock_.AssertAcquired(); |
| 947 if (!waiting_for_clock_update_) | 951 if (!waiting_for_clock_update_) |
| 948 return; | 952 return; |
| 949 | 953 |
| 950 waiting_for_clock_update_ = false; | 954 waiting_for_clock_update_ = false; |
| 951 clock_->Play(); | 955 clock_->Play(); |
| 952 } | 956 } |
| 953 | 957 |
| 954 } // namespace media | 958 } // namespace media |
| OLD | NEW |