Chromium Code Reviews| 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/audio_renderer_sink.h" | 10 #include "media/base/audio_renderer_sink.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 | 22 |
| 23 MojoRendererService::MojoRendererService( | 23 MojoRendererService::MojoRendererService( |
| 24 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, | 24 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
| 25 scoped_refptr<AudioRendererSink> audio_sink, | 25 scoped_refptr<AudioRendererSink> audio_sink, |
| 26 std::unique_ptr<VideoRendererSink> video_sink, | 26 std::unique_ptr<VideoRendererSink> video_sink, |
| 27 std::unique_ptr<media::Renderer> renderer, | 27 std::unique_ptr<media::Renderer> renderer, |
| 28 mojo::InterfaceRequest<mojom::Renderer> request) | 28 mojo::InterfaceRequest<mojom::Renderer> request) |
| 29 : binding_(this, std::move(request)), | 29 : binding_(this, std::move(request)), |
| 30 mojo_cdm_service_context_(mojo_cdm_service_context), | 30 mojo_cdm_service_context_(mojo_cdm_service_context), |
| 31 state_(STATE_UNINITIALIZED), | 31 state_(STATE_UNINITIALIZED), |
| 32 playback_rate_(0.0), | |
|
DaleCurtis
2016/09/06 19:21:25
Can just use zero.
alokp
2016/09/07 16:46:21
Done.
| |
| 32 audio_sink_(std::move(audio_sink)), | 33 audio_sink_(std::move(audio_sink)), |
| 33 video_sink_(std::move(video_sink)), | 34 video_sink_(std::move(video_sink)), |
| 34 renderer_(std::move(renderer)), | 35 renderer_(std::move(renderer)), |
| 35 weak_factory_(this) { | 36 weak_factory_(this) { |
| 36 DVLOG(1) << __FUNCTION__; | 37 DVLOG(1) << __FUNCTION__; |
| 37 DCHECK(renderer_); | 38 DCHECK(renderer_); |
| 38 | 39 |
| 39 weak_this_ = weak_factory_.GetWeakPtr(); | 40 weak_this_ = weak_factory_.GetWeakPtr(); |
| 40 } | 41 } |
| 41 | 42 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 | 81 |
| 81 void MojoRendererService::StartPlayingFrom(base::TimeDelta time_delta) { | 82 void MojoRendererService::StartPlayingFrom(base::TimeDelta time_delta) { |
| 82 DVLOG(2) << __FUNCTION__ << ": " << time_delta; | 83 DVLOG(2) << __FUNCTION__ << ": " << time_delta; |
| 83 renderer_->StartPlayingFrom(time_delta); | 84 renderer_->StartPlayingFrom(time_delta); |
| 84 SchedulePeriodicMediaTimeUpdates(); | 85 SchedulePeriodicMediaTimeUpdates(); |
| 85 } | 86 } |
| 86 | 87 |
| 87 void MojoRendererService::SetPlaybackRate(double playback_rate) { | 88 void MojoRendererService::SetPlaybackRate(double playback_rate) { |
| 88 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; | 89 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; |
| 89 DCHECK(state_ == STATE_PLAYING || state_ == STATE_ERROR); | 90 DCHECK(state_ == STATE_PLAYING || state_ == STATE_ERROR); |
| 91 playback_rate_ = playback_rate; | |
| 90 renderer_->SetPlaybackRate(playback_rate); | 92 renderer_->SetPlaybackRate(playback_rate); |
| 91 } | 93 } |
| 92 | 94 |
| 93 void MojoRendererService::SetVolume(float volume) { | 95 void MojoRendererService::SetVolume(float volume) { |
| 94 renderer_->SetVolume(volume); | 96 renderer_->SetVolume(volume); |
| 95 } | 97 } |
| 96 | 98 |
| 97 void MojoRendererService::SetCdm(int32_t cdm_id, | 99 void MojoRendererService::SetCdm(int32_t cdm_id, |
| 98 const SetCdmCallback& callback) { | 100 const SetCdmCallback& callback) { |
| 99 if (!mojo_cdm_service_context_) { | 101 if (!mojo_cdm_service_context_) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 state_ = STATE_ERROR; | 183 state_ = STATE_ERROR; |
| 182 callback.Run(false); | 184 callback.Run(false); |
| 183 return; | 185 return; |
| 184 } | 186 } |
| 185 | 187 |
| 186 state_ = STATE_PLAYING; | 188 state_ = STATE_PLAYING; |
| 187 callback.Run(true); | 189 callback.Run(true); |
| 188 } | 190 } |
| 189 | 191 |
| 190 void MojoRendererService::UpdateMediaTime(bool force) { | 192 void MojoRendererService::UpdateMediaTime(bool force) { |
| 191 base::TimeDelta media_time = renderer_->GetMediaTime(); | 193 const base::TimeDelta media_time = renderer_->GetMediaTime(); |
| 192 if (!force && media_time == last_media_time_) | 194 if (!force && media_time == last_media_time_) |
| 193 return; | 195 return; |
| 194 | 196 |
| 195 client_->OnTimeUpdate(media_time, media_time); | 197 base::TimeDelta max_time = media_time; |
| 198 if (time_update_timer_.IsRunning() && (playback_rate_ > 0)) { | |
|
DaleCurtis
2016/09/06 19:21:25
Drop unnecessary parens.
alokp
2016/09/07 16:46:21
Done.
| |
| 199 // Allow some slop to account for delays in scheduling time update tasks. | |
| 200 max_time += base::TimeDelta::FromMilliseconds(2 * kTimeUpdateIntervalMs); | |
|
DaleCurtis
2016/09/06 19:21:25
Hmm, seems like something that may be implementati
alokp
2016/09/07 16:46:21
Are you referring to kTimeUpdateIntervalMs? This p
DaleCurtis
2016/09/08 16:58:23
No I meant the choice of 2*interval as the allowed
alokp
2016/09/08 17:01:42
I just used whatever was being used for the cma pi
DaleCurtis
2016/09/08 17:09:01
100ms just seems like a lot of wiggle room for a t
alokp
2016/09/08 17:36:28
This is not accurate. We always send a time-update
| |
| 201 } | |
| 202 | |
| 203 client_->OnTimeUpdate(media_time, max_time, base::TimeTicks::Now()); | |
| 196 last_media_time_ = media_time; | 204 last_media_time_ = media_time; |
| 197 } | 205 } |
| 198 | 206 |
| 199 void MojoRendererService::CancelPeriodicMediaTimeUpdates() { | 207 void MojoRendererService::CancelPeriodicMediaTimeUpdates() { |
| 200 DVLOG(2) << __FUNCTION__; | 208 DVLOG(2) << __FUNCTION__; |
| 209 | |
| 210 time_update_timer_.Stop(); | |
| 201 UpdateMediaTime(false); | 211 UpdateMediaTime(false); |
| 202 time_update_timer_.Stop(); | |
| 203 } | 212 } |
| 204 | 213 |
| 205 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { | 214 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { |
| 206 DVLOG(2) << __FUNCTION__; | 215 DVLOG(2) << __FUNCTION__; |
| 216 | |
| 207 UpdateMediaTime(true); | 217 UpdateMediaTime(true); |
| 208 time_update_timer_.Start( | 218 time_update_timer_.Start( |
| 209 FROM_HERE, | 219 FROM_HERE, base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), |
| 210 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), | |
| 211 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); | 220 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); |
| 212 } | 221 } |
| 213 | 222 |
| 214 void MojoRendererService::OnFlushCompleted(const FlushCallback& callback) { | 223 void MojoRendererService::OnFlushCompleted(const FlushCallback& callback) { |
| 215 DVLOG(1) << __FUNCTION__; | 224 DVLOG(1) << __FUNCTION__; |
| 216 DCHECK_EQ(state_, STATE_FLUSHING); | 225 DCHECK_EQ(state_, STATE_FLUSHING); |
| 217 state_ = STATE_PLAYING; | 226 state_ = STATE_PLAYING; |
| 218 callback.Run(); | 227 callback.Run(); |
| 219 } | 228 } |
| 220 | 229 |
| 221 void MojoRendererService::OnCdmAttached( | 230 void MojoRendererService::OnCdmAttached( |
| 222 scoped_refptr<MediaKeys> cdm, | 231 scoped_refptr<MediaKeys> cdm, |
| 223 const base::Callback<void(bool)>& callback, | 232 const base::Callback<void(bool)>& callback, |
| 224 bool success) { | 233 bool success) { |
| 225 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; | 234 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; |
| 226 | 235 |
| 227 if (success) | 236 if (success) |
| 228 cdm_ = cdm; | 237 cdm_ = cdm; |
| 229 | 238 |
| 230 callback.Run(success); | 239 callback.Run(success); |
| 231 } | 240 } |
| 232 | 241 |
| 233 } // namespace media | 242 } // namespace media |
| OLD | NEW |