| 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/clients/mojo_renderer.h" | 5 #include "media/mojo/clients/mojo_renderer.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 | 48 |
| 49 if (encountered_error_) { | 49 if (encountered_error_) { |
| 50 task_runner_->PostTask( | 50 task_runner_->PostTask( |
| 51 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INITIALIZATION_FAILED)); | 51 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INITIALIZATION_FAILED)); |
| 52 return; | 52 return; |
| 53 } | 53 } |
| 54 | 54 |
| 55 demuxer_stream_provider_ = demuxer_stream_provider; | 55 demuxer_stream_provider_ = demuxer_stream_provider; |
| 56 init_cb_ = init_cb; | 56 init_cb_ = init_cb; |
| 57 | 57 |
| 58 switch (demuxer_stream_provider_->GetType()) { |
| 59 case DemuxerStreamProvider::Type::STREAM: |
| 60 InitializeRendererFromStreams(client); |
| 61 break; |
| 62 case DemuxerStreamProvider::Type::URL: |
| 63 InitializeRendererFromUrl(client); |
| 64 break; |
| 65 } |
| 66 } |
| 67 |
| 68 void MojoRenderer::InitializeRendererFromStreams( |
| 69 media::RendererClient* client) { |
| 70 DVLOG(1) << __FUNCTION__; |
| 71 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 72 |
| 58 // Create audio and video mojom::DemuxerStream and bind its lifetime to | 73 // Create audio and video mojom::DemuxerStream and bind its lifetime to |
| 59 // the pipe. | 74 // the pipe. |
| 60 DemuxerStream* const audio = | 75 DemuxerStream* const audio = |
| 61 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); | 76 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); |
| 62 DemuxerStream* const video = | 77 DemuxerStream* const video = |
| 63 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); | 78 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); |
| 64 | 79 |
| 65 mojom::DemuxerStreamPtr audio_stream; | 80 mojom::DemuxerStreamPtr audio_stream; |
| 66 if (audio) { | 81 if (audio) { |
| 67 audio_stream_.reset( | 82 audio_stream_.reset( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 86 base::Unretained(this), DemuxerStream::VIDEO)); | 101 base::Unretained(this), DemuxerStream::VIDEO)); |
| 87 } | 102 } |
| 88 | 103 |
| 89 BindRemoteRendererIfNeeded(); | 104 BindRemoteRendererIfNeeded(); |
| 90 | 105 |
| 91 // Using base::Unretained(this) is safe because |this| owns | 106 // Using base::Unretained(this) is safe because |this| owns |
| 92 // |remote_renderer_|, and the callback won't be dispatched if | 107 // |remote_renderer_|, and the callback won't be dispatched if |
| 93 // |remote_renderer_| is destroyed. | 108 // |remote_renderer_| is destroyed. |
| 94 remote_renderer_->Initialize( | 109 remote_renderer_->Initialize( |
| 95 binding_.CreateInterfacePtrAndBind(), std::move(audio_stream), | 110 binding_.CreateInterfacePtrAndBind(), std::move(audio_stream), |
| 96 std::move(video_stream), | 111 std::move(video_stream), GURL(), |
| 97 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); | 112 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); |
| 98 } | 113 } |
| 99 | 114 |
| 115 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) { |
| 116 DVLOG(2) << __FUNCTION__; |
| 117 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 118 |
| 119 BindRemoteRendererIfNeeded(); |
| 120 |
| 121 // Using base::Unretained(this) is safe because |this| owns |
| 122 // |remote_renderer_|, and the callback won't be dispatched if |
| 123 // |remote_renderer_| is destroyed. |
| 124 remote_renderer_->Initialize( |
| 125 binding_.CreateInterfacePtrAndBind(), mojom::DemuxerStreamPtr(), |
| 126 mojom::DemuxerStreamPtr(), |
| 127 demuxer_stream_provider_->GetUrl(), |
| 128 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); |
| 129 } |
| 130 |
| 100 void MojoRenderer::SetCdm(CdmContext* cdm_context, | 131 void MojoRenderer::SetCdm(CdmContext* cdm_context, |
| 101 const CdmAttachedCB& cdm_attached_cb) { | 132 const CdmAttachedCB& cdm_attached_cb) { |
| 102 DVLOG(1) << __FUNCTION__; | 133 DVLOG(1) << __FUNCTION__; |
| 103 DCHECK(task_runner_->BelongsToCurrentThread()); | 134 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 104 DCHECK(cdm_context); | 135 DCHECK(cdm_context); |
| 105 DCHECK(!cdm_attached_cb.is_null()); | 136 DCHECK(!cdm_attached_cb.is_null()); |
| 106 DCHECK(cdm_attached_cb_.is_null()); | 137 DCHECK(cdm_attached_cb_.is_null()); |
| 107 | 138 |
| 108 if (encountered_error_) { | 139 if (encountered_error_) { |
| 109 task_runner_->PostTask(FROM_HERE, base::Bind(cdm_attached_cb, false)); | 140 task_runner_->PostTask(FROM_HERE, base::Bind(cdm_attached_cb, false)); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 base::AutoLock auto_lock(lock_); | 206 base::AutoLock auto_lock(lock_); |
| 176 DVLOG(3) << __FUNCTION__ << ": " << time_.InMilliseconds() << " ms"; | 207 DVLOG(3) << __FUNCTION__ << ": " << time_.InMilliseconds() << " ms"; |
| 177 return time_; | 208 return time_; |
| 178 } | 209 } |
| 179 | 210 |
| 180 bool MojoRenderer::HasAudio() { | 211 bool MojoRenderer::HasAudio() { |
| 181 DVLOG(1) << __FUNCTION__; | 212 DVLOG(1) << __FUNCTION__; |
| 182 DCHECK(task_runner_->BelongsToCurrentThread()); | 213 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 183 DCHECK(remote_renderer_.is_bound()); | 214 DCHECK(remote_renderer_.is_bound()); |
| 184 | 215 |
| 216 if (demuxer_stream_provider_->GetType() == DemuxerStreamProvider::Type::URL) { |
| 217 NOTIMPLEMENTED(); |
| 218 return false; |
| 219 } |
| 220 |
| 185 return !!demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); | 221 return !!demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); |
| 186 } | 222 } |
| 187 | 223 |
| 188 bool MojoRenderer::HasVideo() { | 224 bool MojoRenderer::HasVideo() { |
| 189 DVLOG(1) << __FUNCTION__; | 225 DVLOG(1) << __FUNCTION__; |
| 190 DCHECK(task_runner_->BelongsToCurrentThread()); | 226 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 191 DCHECK(remote_renderer_.is_bound()); | 227 DCHECK(remote_renderer_.is_bound()); |
| 192 | 228 |
| 229 if (demuxer_stream_provider_->GetType() == DemuxerStreamProvider::Type::URL) { |
| 230 NOTIMPLEMENTED(); |
| 231 return false; |
| 232 } |
| 233 |
| 193 return !!demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); | 234 return !!demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); |
| 194 } | 235 } |
| 195 | 236 |
| 196 void MojoRenderer::OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) { | 237 void MojoRenderer::OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) { |
| 197 DVLOG(3) << __FUNCTION__ << ": " << time_usec << ", " << max_time_usec; | 238 DVLOG(3) << __FUNCTION__ << ": " << time_usec << ", " << max_time_usec; |
| 198 DCHECK(task_runner_->BelongsToCurrentThread()); | 239 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 199 | 240 |
| 200 base::AutoLock auto_lock(lock_); | 241 base::AutoLock auto_lock(lock_); |
| 201 time_ = base::TimeDelta::FromMicroseconds(time_usec); | 242 time_ = base::TimeDelta::FromMicroseconds(time_usec); |
| 202 } | 243 } |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); | 376 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); |
| 336 | 377 |
| 337 if (!flush_cb_.is_null()) | 378 if (!flush_cb_.is_null()) |
| 338 base::ResetAndReturn(&flush_cb_).Run(); | 379 base::ResetAndReturn(&flush_cb_).Run(); |
| 339 | 380 |
| 340 if (!cdm_attached_cb_.is_null()) | 381 if (!cdm_attached_cb_.is_null()) |
| 341 base::ResetAndReturn(&cdm_attached_cb_).Run(false); | 382 base::ResetAndReturn(&cdm_attached_cb_).Run(false); |
| 342 } | 383 } |
| 343 | 384 |
| 344 } // namespace media | 385 } // namespace media |
| OLD | NEW |