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 |