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_impl.h" | 5 #include "media/base/pipeline_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 DCHECK(seek_cb_.is_null()); | 61 DCHECK(seek_cb_.is_null()); |
62 } | 62 } |
63 | 63 |
64 void PipelineImpl::Start(Demuxer* demuxer, | 64 void PipelineImpl::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 NaturalSizeChangedCB& natural_size_changed_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()); |
79 | 80 |
80 base::AutoLock auto_lock(lock_); | 81 base::AutoLock auto_lock(lock_); |
81 CHECK(!running_) << "Media pipeline is already running"; | 82 CHECK(!running_) << "Media pipeline is already running"; |
82 running_ = true; | 83 running_ = true; |
83 | 84 |
84 demuxer_ = demuxer; | 85 demuxer_ = demuxer; |
85 renderer_ = std::move(renderer); | 86 renderer_ = std::move(renderer); |
86 ended_cb_ = ended_cb; | 87 ended_cb_ = ended_cb; |
87 error_cb_ = error_cb; | 88 error_cb_ = error_cb; |
88 seek_cb_ = seek_cb; | 89 seek_cb_ = seek_cb; |
89 metadata_cb_ = metadata_cb; | 90 metadata_cb_ = metadata_cb; |
90 buffering_state_cb_ = buffering_state_cb; | 91 buffering_state_cb_ = buffering_state_cb; |
| 92 natural_size_changed_cb_ = natural_size_changed_cb; |
91 duration_change_cb_ = duration_change_cb; | 93 duration_change_cb_ = duration_change_cb; |
92 add_text_track_cb_ = add_text_track_cb; | 94 add_text_track_cb_ = add_text_track_cb; |
93 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; | 95 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; |
94 | 96 |
95 task_runner_->PostTask(FROM_HERE, | 97 task_runner_->PostTask(FROM_HERE, |
96 base::Bind(&PipelineImpl::StartTask, weak_this_)); | 98 base::Bind(&PipelineImpl::StartTask, weak_this_)); |
97 } | 99 } |
98 | 100 |
99 void PipelineImpl::Stop(const base::Closure& stop_cb) { | 101 void PipelineImpl::Stop(const base::Closure& stop_cb) { |
100 DVLOG(2) << __FUNCTION__; | 102 DVLOG(2) << __FUNCTION__; |
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
835 return; | 837 return; |
836 } | 838 } |
837 | 839 |
838 if (cdm_context_) | 840 if (cdm_context_) |
839 renderer_->SetCdm(cdm_context_, base::Bind(&IgnoreCdmAttached)); | 841 renderer_->SetCdm(cdm_context_, base::Bind(&IgnoreCdmAttached)); |
840 | 842 |
841 renderer_->Initialize( | 843 renderer_->Initialize( |
842 demuxer_, done_cb, | 844 demuxer_, done_cb, |
843 base::Bind(&PipelineImpl::OnUpdateStatistics, weak_this_), | 845 base::Bind(&PipelineImpl::OnUpdateStatistics, weak_this_), |
844 base::Bind(&PipelineImpl::BufferingStateChanged, weak_this_), | 846 base::Bind(&PipelineImpl::BufferingStateChanged, weak_this_), |
| 847 base::Bind(&PipelineImpl::OnNaturalSizeChanged, weak_this_), |
845 base::Bind(&PipelineImpl::OnRendererEnded, weak_this_), | 848 base::Bind(&PipelineImpl::OnRendererEnded, weak_this_), |
846 base::Bind(&PipelineImpl::OnError, weak_this_), | 849 base::Bind(&PipelineImpl::OnError, weak_this_), |
847 waiting_for_decryption_key_cb_); | 850 waiting_for_decryption_key_cb_); |
848 } | 851 } |
849 | 852 |
850 void PipelineImpl::ReportMetadata() { | 853 void PipelineImpl::ReportMetadata() { |
851 DCHECK(task_runner_->BelongsToCurrentThread()); | 854 DCHECK(task_runner_->BelongsToCurrentThread()); |
852 PipelineMetadata metadata; | 855 PipelineMetadata metadata; |
853 metadata.timeline_offset = demuxer_->GetTimelineOffset(); | 856 metadata.timeline_offset = demuxer_->GetTimelineOffset(); |
854 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 857 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
855 if (stream) { | 858 if (stream) { |
856 metadata.has_video = true; | 859 metadata.has_video = true; |
857 metadata.natural_size = stream->video_decoder_config().natural_size(); | 860 metadata.natural_size = stream->video_decoder_config().natural_size(); |
858 metadata.video_rotation = stream->video_rotation(); | 861 metadata.video_rotation = stream->video_rotation(); |
859 } | 862 } |
860 if (demuxer_->GetStream(DemuxerStream::AUDIO)) { | 863 if (demuxer_->GetStream(DemuxerStream::AUDIO)) { |
861 metadata.has_audio = true; | 864 metadata.has_audio = true; |
862 } | 865 } |
863 metadata_cb_.Run(metadata); | 866 metadata_cb_.Run(metadata); |
864 } | 867 } |
865 | 868 |
866 void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) { | 869 void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) { |
867 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; | 870 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; |
868 DCHECK(task_runner_->BelongsToCurrentThread()); | 871 DCHECK(task_runner_->BelongsToCurrentThread()); |
869 buffering_state_cb_.Run(new_buffering_state); | 872 buffering_state_cb_.Run(new_buffering_state); |
870 } | 873 } |
871 | 874 |
| 875 void PipelineImpl::OnNaturalSizeChanged(const gfx::Size& size) { |
| 876 DVLOG(1) << __FUNCTION__ << "(" << size.ToString() << ")"; |
| 877 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 878 natural_size_changed_cb_.Run(size); |
| 879 } |
| 880 |
872 } // namespace media | 881 } // namespace media |
OLD | NEW |