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), mojo::String(), |
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 mojo::String::From(demuxer_stream_provider_->GetUrl().spec()), |
| 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 |