| 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 |