OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/mojo/services/mojo_renderer_service.h" | 5 #include "media/mojo/services/mojo_renderer_service.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "media/base/media_keys.h" | 10 #include "media/base/media_keys.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 weak_factory_(this) { | 29 weak_factory_(this) { |
30 DVLOG(1) << __FUNCTION__; | 30 DVLOG(1) << __FUNCTION__; |
31 DCHECK(renderer_); | 31 DCHECK(renderer_); |
32 | 32 |
33 weak_this_ = weak_factory_.GetWeakPtr(); | 33 weak_this_ = weak_factory_.GetWeakPtr(); |
34 } | 34 } |
35 | 35 |
36 MojoRendererService::~MojoRendererService() { | 36 MojoRendererService::~MojoRendererService() { |
37 } | 37 } |
38 | 38 |
39 void MojoRendererService::Initialize( | 39 void MojoRendererService::Initialize(mojom::RendererClientPtr client, |
40 mojom::RendererClientPtr client, | 40 mojom::DemuxerStreamPtr audio, |
41 mojom::DemuxerStreamPtr audio, | 41 mojom::DemuxerStreamPtr video, |
42 mojom::DemuxerStreamPtr video, | 42 const InitializeCallback& callback) { |
43 const mojo::Callback<void(bool)>& callback) { | |
44 DVLOG(1) << __FUNCTION__; | 43 DVLOG(1) << __FUNCTION__; |
45 DCHECK_EQ(state_, STATE_UNINITIALIZED); | 44 DCHECK_EQ(state_, STATE_UNINITIALIZED); |
46 client_ = std::move(client); | 45 client_ = std::move(client); |
47 state_ = STATE_INITIALIZING; | 46 state_ = STATE_INITIALIZING; |
48 stream_provider_.reset(new DemuxerStreamProviderShim( | 47 stream_provider_.reset(new DemuxerStreamProviderShim( |
49 std::move(audio), std::move(video), | 48 std::move(audio), std::move(video), |
50 base::Bind(&MojoRendererService::OnStreamReady, weak_this_, callback))); | 49 base::Bind(&MojoRendererService::OnStreamReady, weak_this_, callback))); |
51 } | 50 } |
52 | 51 |
53 void MojoRendererService::Flush(const mojo::Closure& callback) { | 52 void MojoRendererService::Flush(const FlushCallback& callback) { |
54 DVLOG(2) << __FUNCTION__; | 53 DVLOG(2) << __FUNCTION__; |
55 DCHECK_EQ(state_, STATE_PLAYING); | 54 DCHECK_EQ(state_, STATE_PLAYING); |
56 | 55 |
57 state_ = STATE_FLUSHING; | 56 state_ = STATE_FLUSHING; |
58 CancelPeriodicMediaTimeUpdates(); | 57 CancelPeriodicMediaTimeUpdates(); |
59 renderer_->Flush( | 58 renderer_->Flush( |
60 base::Bind(&MojoRendererService::OnFlushCompleted, weak_this_, callback)); | 59 base::Bind(&MojoRendererService::OnFlushCompleted, weak_this_, callback)); |
61 } | 60 } |
62 | 61 |
63 void MojoRendererService::StartPlayingFrom(int64_t time_delta_usec) { | 62 void MojoRendererService::StartPlayingFrom(int64_t time_delta_usec) { |
64 DVLOG(2) << __FUNCTION__ << ": " << time_delta_usec; | 63 DVLOG(2) << __FUNCTION__ << ": " << time_delta_usec; |
65 renderer_->StartPlayingFrom( | 64 renderer_->StartPlayingFrom( |
66 base::TimeDelta::FromMicroseconds(time_delta_usec)); | 65 base::TimeDelta::FromMicroseconds(time_delta_usec)); |
67 SchedulePeriodicMediaTimeUpdates(); | 66 SchedulePeriodicMediaTimeUpdates(); |
68 } | 67 } |
69 | 68 |
70 void MojoRendererService::SetPlaybackRate(double playback_rate) { | 69 void MojoRendererService::SetPlaybackRate(double playback_rate) { |
71 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; | 70 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; |
72 DCHECK_EQ(state_, STATE_PLAYING); | 71 DCHECK_EQ(state_, STATE_PLAYING); |
73 renderer_->SetPlaybackRate(playback_rate); | 72 renderer_->SetPlaybackRate(playback_rate); |
74 } | 73 } |
75 | 74 |
76 void MojoRendererService::SetVolume(float volume) { | 75 void MojoRendererService::SetVolume(float volume) { |
77 renderer_->SetVolume(volume); | 76 renderer_->SetVolume(volume); |
78 } | 77 } |
79 | 78 |
80 void MojoRendererService::SetCdm(int32_t cdm_id, | 79 void MojoRendererService::SetCdm(int32_t cdm_id, |
81 const mojo::Callback<void(bool)>& callback) { | 80 const SetCdmCallback& callback) { |
82 if (!mojo_cdm_service_context_) { | 81 if (!mojo_cdm_service_context_) { |
83 DVLOG(1) << "CDM service context not available."; | 82 DVLOG(1) << "CDM service context not available."; |
84 callback.Run(false); | 83 callback.Run(false); |
85 return; | 84 return; |
86 } | 85 } |
87 | 86 |
88 scoped_refptr<MediaKeys> cdm = mojo_cdm_service_context_->GetCdm(cdm_id); | 87 scoped_refptr<MediaKeys> cdm = mojo_cdm_service_context_->GetCdm(cdm_id); |
89 if (!cdm) { | 88 if (!cdm) { |
90 DVLOG(1) << "CDM not found: " << cdm_id; | 89 DVLOG(1) << "CDM not found: " << cdm_id; |
91 callback.Run(false); | 90 callback.Run(false); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 DVLOG(2) << __FUNCTION__ << "(" << size.ToString() << ")"; | 131 DVLOG(2) << __FUNCTION__ << "(" << size.ToString() << ")"; |
133 client_->OnVideoNaturalSizeChange(size); | 132 client_->OnVideoNaturalSizeChange(size); |
134 } | 133 } |
135 | 134 |
136 void MojoRendererService::OnVideoOpacityChange(bool opaque) { | 135 void MojoRendererService::OnVideoOpacityChange(bool opaque) { |
137 DVLOG(2) << __FUNCTION__ << "(" << opaque << ")"; | 136 DVLOG(2) << __FUNCTION__ << "(" << opaque << ")"; |
138 client_->OnVideoOpacityChange(opaque); | 137 client_->OnVideoOpacityChange(opaque); |
139 } | 138 } |
140 | 139 |
141 void MojoRendererService::OnStreamReady( | 140 void MojoRendererService::OnStreamReady( |
142 const mojo::Callback<void(bool)>& callback) { | 141 const base::Callback<void(bool)>& callback) { |
143 DCHECK_EQ(state_, STATE_INITIALIZING); | 142 DCHECK_EQ(state_, STATE_INITIALIZING); |
144 | 143 |
145 renderer_->Initialize( | 144 renderer_->Initialize( |
146 stream_provider_.get(), this, | 145 stream_provider_.get(), this, |
147 base::Bind(&MojoRendererService::OnRendererInitializeDone, weak_this_, | 146 base::Bind(&MojoRendererService::OnRendererInitializeDone, weak_this_, |
148 callback)); | 147 callback)); |
149 } | 148 } |
150 | 149 |
151 void MojoRendererService::OnRendererInitializeDone( | 150 void MojoRendererService::OnRendererInitializeDone( |
152 const mojo::Callback<void(bool)>& callback, | 151 const base::Callback<void(bool)>& callback, |
153 PipelineStatus status) { | 152 PipelineStatus status) { |
154 DVLOG(1) << __FUNCTION__; | 153 DVLOG(1) << __FUNCTION__; |
155 DCHECK_EQ(state_, STATE_INITIALIZING); | 154 DCHECK_EQ(state_, STATE_INITIALIZING); |
156 | 155 |
157 if (status != PIPELINE_OK) { | 156 if (status != PIPELINE_OK) { |
158 state_ = STATE_ERROR; | 157 state_ = STATE_ERROR; |
159 callback.Run(false); | 158 callback.Run(false); |
160 return; | 159 return; |
161 } | 160 } |
162 | 161 |
(...skipping 18 matching lines...) Expand all Loading... |
181 | 180 |
182 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { | 181 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { |
183 DVLOG(2) << __FUNCTION__; | 182 DVLOG(2) << __FUNCTION__; |
184 UpdateMediaTime(true); | 183 UpdateMediaTime(true); |
185 time_update_timer_.Start( | 184 time_update_timer_.Start( |
186 FROM_HERE, | 185 FROM_HERE, |
187 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), | 186 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), |
188 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); | 187 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); |
189 } | 188 } |
190 | 189 |
191 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { | 190 void MojoRendererService::OnFlushCompleted(const FlushCallback& callback) { |
192 DVLOG(1) << __FUNCTION__; | 191 DVLOG(1) << __FUNCTION__; |
193 DCHECK_EQ(state_, STATE_FLUSHING); | 192 DCHECK_EQ(state_, STATE_FLUSHING); |
194 state_ = STATE_PLAYING; | 193 state_ = STATE_PLAYING; |
195 callback.Run(); | 194 callback.Run(); |
196 } | 195 } |
197 | 196 |
198 void MojoRendererService::OnCdmAttached( | 197 void MojoRendererService::OnCdmAttached( |
199 scoped_refptr<MediaKeys> cdm, | 198 scoped_refptr<MediaKeys> cdm, |
200 const mojo::Callback<void(bool)>& callback, | 199 const base::Callback<void(bool)>& callback, |
201 bool success) { | 200 bool success) { |
202 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; | 201 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; |
203 | 202 |
204 if (success) | 203 if (success) |
205 cdm_ = cdm; | 204 cdm_ = cdm; |
206 | 205 |
207 callback.Run(success); | 206 callback.Run(success); |
208 } | 207 } |
209 | 208 |
210 } // namespace media | 209 } // namespace media |
OLD | NEW |