| 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 61       media_log_->CreateEvent(MediaLogEvent::PIPELINE_DESTROYED)); | 61       media_log_->CreateEvent(MediaLogEvent::PIPELINE_DESTROYED)); | 
| 62 } | 62 } | 
| 63 | 63 | 
| 64 void Pipeline::Start(Demuxer* demuxer, | 64 void Pipeline::Start(Demuxer* demuxer, | 
| 65                      scoped_ptr<Renderer> renderer, | 65                      scoped_ptr<Renderer> renderer, | 
| 66                      const base::Closure& ended_cb, | 66                      const base::Closure& ended_cb, | 
| 67                      const PipelineStatusCB& error_cb, | 67                      const PipelineStatusCB& error_cb, | 
| 68                      const PipelineStatusCB& seek_cb, | 68                      const PipelineStatusCB& seek_cb, | 
| 69                      const PipelineMetadataCB& metadata_cb, | 69                      const PipelineMetadataCB& metadata_cb, | 
| 70                      const BufferingStateCB& buffering_state_cb, | 70                      const BufferingStateCB& buffering_state_cb, | 
|  | 71                      const PaintCB& paint_cb, | 
| 71                      const base::Closure& duration_change_cb, | 72                      const base::Closure& duration_change_cb, | 
| 72                      const AddTextTrackCB& add_text_track_cb, | 73                      const AddTextTrackCB& add_text_track_cb, | 
| 73                      const base::Closure& waiting_for_decryption_key_cb) { | 74                      const base::Closure& waiting_for_decryption_key_cb) { | 
| 74   DCHECK(!ended_cb.is_null()); | 75   DCHECK(!ended_cb.is_null()); | 
| 75   DCHECK(!error_cb.is_null()); | 76   DCHECK(!error_cb.is_null()); | 
| 76   DCHECK(!seek_cb.is_null()); | 77   DCHECK(!seek_cb.is_null()); | 
| 77   DCHECK(!metadata_cb.is_null()); | 78   DCHECK(!metadata_cb.is_null()); | 
| 78   DCHECK(!buffering_state_cb.is_null()); | 79   DCHECK(!buffering_state_cb.is_null()); | 
|  | 80   DCHECK(!paint_cb.is_null()); | 
| 79 | 81 | 
| 80   base::AutoLock auto_lock(lock_); | 82   base::AutoLock auto_lock(lock_); | 
| 81   CHECK(!running_) << "Media pipeline is already running"; | 83   CHECK(!running_) << "Media pipeline is already running"; | 
| 82   running_ = true; | 84   running_ = true; | 
| 83 | 85 | 
| 84   demuxer_ = demuxer; | 86   demuxer_ = demuxer; | 
| 85   renderer_ = renderer.Pass(); | 87   renderer_ = renderer.Pass(); | 
| 86   ended_cb_ = ended_cb; | 88   ended_cb_ = ended_cb; | 
| 87   error_cb_ = error_cb; | 89   error_cb_ = error_cb; | 
| 88   seek_cb_ = seek_cb; | 90   seek_cb_ = seek_cb; | 
| 89   metadata_cb_ = metadata_cb; | 91   metadata_cb_ = metadata_cb; | 
| 90   buffering_state_cb_ = buffering_state_cb; | 92   buffering_state_cb_ = buffering_state_cb; | 
|  | 93   paint_cb_ = paint_cb; | 
| 91   duration_change_cb_ = duration_change_cb; | 94   duration_change_cb_ = duration_change_cb; | 
| 92   add_text_track_cb_ = add_text_track_cb; | 95   add_text_track_cb_ = add_text_track_cb; | 
| 93   waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; | 96   waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; | 
| 94 | 97 | 
| 95   task_runner_->PostTask( | 98   task_runner_->PostTask( | 
| 96       FROM_HERE, base::Bind(&Pipeline::StartTask, weak_factory_.GetWeakPtr())); | 99       FROM_HERE, base::Bind(&Pipeline::StartTask, weak_factory_.GetWeakPtr())); | 
| 97 } | 100 } | 
| 98 | 101 | 
| 99 void Pipeline::Stop(const base::Closure& stop_cb) { | 102 void Pipeline::Stop(const base::Closure& stop_cb) { | 
| 100   DVLOG(2) << __FUNCTION__; | 103   DVLOG(2) << __FUNCTION__; | 
| (...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 704     OnError(PIPELINE_ERROR_COULD_NOT_RENDER); | 707     OnError(PIPELINE_ERROR_COULD_NOT_RENDER); | 
| 705     return; | 708     return; | 
| 706   } | 709   } | 
| 707 | 710 | 
| 708   base::WeakPtr<Pipeline> weak_this = weak_factory_.GetWeakPtr(); | 711   base::WeakPtr<Pipeline> weak_this = weak_factory_.GetWeakPtr(); | 
| 709   renderer_->Initialize( | 712   renderer_->Initialize( | 
| 710       demuxer_, | 713       demuxer_, | 
| 711       done_cb, | 714       done_cb, | 
| 712       base::Bind(&Pipeline::OnUpdateStatistics, weak_this), | 715       base::Bind(&Pipeline::OnUpdateStatistics, weak_this), | 
| 713       base::Bind(&Pipeline::BufferingStateChanged, weak_this), | 716       base::Bind(&Pipeline::BufferingStateChanged, weak_this), | 
|  | 717       base::ResetAndReturn(&paint_cb_), | 
| 714       base::Bind(&Pipeline::OnRendererEnded, weak_this), | 718       base::Bind(&Pipeline::OnRendererEnded, weak_this), | 
| 715       base::Bind(&Pipeline::OnError, weak_this), | 719       base::Bind(&Pipeline::OnError, weak_this), | 
| 716       waiting_for_decryption_key_cb_); | 720       waiting_for_decryption_key_cb_); | 
| 717 } | 721 } | 
| 718 | 722 | 
| 719 void Pipeline::ReportMetadata() { | 723 void Pipeline::ReportMetadata() { | 
| 720   DCHECK(task_runner_->BelongsToCurrentThread()); | 724   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 721   PipelineMetadata metadata; | 725   PipelineMetadata metadata; | 
| 722   metadata.timeline_offset = demuxer_->GetTimelineOffset(); | 726   metadata.timeline_offset = demuxer_->GetTimelineOffset(); | 
| 723   DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 727   DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 
| 724   if (stream) { | 728   if (stream) { | 
| 725     metadata.has_video = true; | 729     metadata.has_video = true; | 
| 726     metadata.natural_size = stream->video_decoder_config().natural_size(); | 730     metadata.natural_size = stream->video_decoder_config().natural_size(); | 
| 727     metadata.video_rotation = stream->video_rotation(); | 731     metadata.video_rotation = stream->video_rotation(); | 
| 728   } | 732   } | 
| 729   if (demuxer_->GetStream(DemuxerStream::AUDIO)) { | 733   if (demuxer_->GetStream(DemuxerStream::AUDIO)) { | 
| 730     metadata.has_audio = true; | 734     metadata.has_audio = true; | 
| 731   } | 735   } | 
| 732   metadata_cb_.Run(metadata); | 736   metadata_cb_.Run(metadata); | 
| 733 } | 737 } | 
| 734 | 738 | 
| 735 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { | 739 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { | 
| 736   DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; | 740   DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; | 
| 737   DCHECK(task_runner_->BelongsToCurrentThread()); | 741   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 738   buffering_state_cb_.Run(new_buffering_state); | 742   buffering_state_cb_.Run(new_buffering_state); | 
| 739 } | 743 } | 
| 740 | 744 | 
| 741 }  // namespace media | 745 }  // namespace media | 
| OLD | NEW | 
|---|