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