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