| 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 PaintCB& paint_cb, |
| 72 const base::Closure& duration_change_cb, | 72 const base::Closure& duration_change_cb, |
| 73 const AddTextTrackCB& add_text_track_cb) { | 73 const AddTextTrackCB& add_text_track_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()); |
| 79 DCHECK(!paint_cb.is_null()); | 80 DCHECK(!paint_cb.is_null()); |
| 80 | 81 |
| 81 base::AutoLock auto_lock(lock_); | 82 base::AutoLock auto_lock(lock_); |
| 82 CHECK(!running_) << "Media pipeline is already running"; | 83 CHECK(!running_) << "Media pipeline is already running"; |
| 83 running_ = true; | 84 running_ = true; |
| 84 | 85 |
| 85 demuxer_ = demuxer; | 86 demuxer_ = demuxer; |
| 86 renderer_ = renderer.Pass(); | 87 renderer_ = renderer.Pass(); |
| 87 ended_cb_ = ended_cb; | 88 ended_cb_ = ended_cb; |
| 88 error_cb_ = error_cb; | 89 error_cb_ = error_cb; |
| 89 seek_cb_ = seek_cb; | 90 seek_cb_ = seek_cb; |
| 90 metadata_cb_ = metadata_cb; | 91 metadata_cb_ = metadata_cb; |
| 91 buffering_state_cb_ = buffering_state_cb; | 92 buffering_state_cb_ = buffering_state_cb; |
| 92 paint_cb_ = paint_cb; | 93 paint_cb_ = paint_cb; |
| 93 duration_change_cb_ = duration_change_cb; | 94 duration_change_cb_ = duration_change_cb; |
| 94 add_text_track_cb_ = add_text_track_cb; | 95 add_text_track_cb_ = add_text_track_cb; |
| 96 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; |
| 95 | 97 |
| 96 task_runner_->PostTask( | 98 task_runner_->PostTask( |
| 97 FROM_HERE, base::Bind(&Pipeline::StartTask, weak_factory_.GetWeakPtr())); | 99 FROM_HERE, base::Bind(&Pipeline::StartTask, weak_factory_.GetWeakPtr())); |
| 98 } | 100 } |
| 99 | 101 |
| 100 void Pipeline::Stop(const base::Closure& stop_cb) { | 102 void Pipeline::Stop(const base::Closure& stop_cb) { |
| 101 DVLOG(2) << __FUNCTION__; | 103 DVLOG(2) << __FUNCTION__; |
| 102 task_runner_->PostTask( | 104 task_runner_->PostTask( |
| 103 FROM_HERE, | 105 FROM_HERE, |
| 104 base::Bind(&Pipeline::StopTask, weak_factory_.GetWeakPtr(), stop_cb)); | 106 base::Bind(&Pipeline::StopTask, weak_factory_.GetWeakPtr(), stop_cb)); |
| (...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 } | 719 } |
| 718 | 720 |
| 719 base::WeakPtr<Pipeline> weak_this = weak_factory_.GetWeakPtr(); | 721 base::WeakPtr<Pipeline> weak_this = weak_factory_.GetWeakPtr(); |
| 720 renderer_->Initialize( | 722 renderer_->Initialize( |
| 721 demuxer_, | 723 demuxer_, |
| 722 done_cb, | 724 done_cb, |
| 723 base::Bind(&Pipeline::OnUpdateStatistics, weak_this), | 725 base::Bind(&Pipeline::OnUpdateStatistics, weak_this), |
| 724 base::Bind(&Pipeline::BufferingStateChanged, weak_this), | 726 base::Bind(&Pipeline::BufferingStateChanged, weak_this), |
| 725 base::ResetAndReturn(&paint_cb_), | 727 base::ResetAndReturn(&paint_cb_), |
| 726 base::Bind(&Pipeline::OnRendererEnded, weak_this), | 728 base::Bind(&Pipeline::OnRendererEnded, weak_this), |
| 727 base::Bind(&Pipeline::OnError, weak_this)); | 729 base::Bind(&Pipeline::OnError, weak_this), |
| 730 waiting_for_decryption_key_cb_); |
| 728 } | 731 } |
| 729 | 732 |
| 730 void Pipeline::ReportMetadata() { | 733 void Pipeline::ReportMetadata() { |
| 731 DCHECK(task_runner_->BelongsToCurrentThread()); | 734 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 732 PipelineMetadata metadata; | 735 PipelineMetadata metadata; |
| 733 metadata.timeline_offset = demuxer_->GetTimelineOffset(); | 736 metadata.timeline_offset = demuxer_->GetTimelineOffset(); |
| 734 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 737 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
| 735 if (stream) { | 738 if (stream) { |
| 736 metadata.has_video = true; | 739 metadata.has_video = true; |
| 737 metadata.natural_size = stream->video_decoder_config().natural_size(); | 740 metadata.natural_size = stream->video_decoder_config().natural_size(); |
| 738 metadata.video_rotation = stream->video_rotation(); | 741 metadata.video_rotation = stream->video_rotation(); |
| 739 } | 742 } |
| 740 if (demuxer_->GetStream(DemuxerStream::AUDIO)) { | 743 if (demuxer_->GetStream(DemuxerStream::AUDIO)) { |
| 741 metadata.has_audio = true; | 744 metadata.has_audio = true; |
| 742 } | 745 } |
| 743 metadata_cb_.Run(metadata); | 746 metadata_cb_.Run(metadata); |
| 744 } | 747 } |
| 745 | 748 |
| 746 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { | 749 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { |
| 747 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; | 750 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; |
| 748 DCHECK(task_runner_->BelongsToCurrentThread()); | 751 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 749 buffering_state_cb_.Run(new_buffering_state); | 752 buffering_state_cb_.Run(new_buffering_state); |
| 750 } | 753 } |
| 751 | 754 |
| 752 } // namespace media | 755 } // namespace media |
| OLD | NEW |