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/clients/mojo_renderer_impl.h" | 5 #include "media/mojo/clients/mojo_renderer_impl.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 26 matching lines...) Expand all Loading... | |
| 37 } | 37 } |
| 38 | 38 |
| 39 void MojoRendererImpl::Initialize( | 39 void MojoRendererImpl::Initialize( |
| 40 DemuxerStreamProvider* demuxer_stream_provider, | 40 DemuxerStreamProvider* demuxer_stream_provider, |
| 41 media::RendererClient* client, | 41 media::RendererClient* client, |
| 42 const PipelineStatusCB& init_cb) { | 42 const PipelineStatusCB& init_cb) { |
| 43 DVLOG(1) << __FUNCTION__; | 43 DVLOG(1) << __FUNCTION__; |
| 44 DCHECK(task_runner_->BelongsToCurrentThread()); | 44 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 45 DCHECK(demuxer_stream_provider); | 45 DCHECK(demuxer_stream_provider); |
| 46 | 46 |
| 47 demuxer_stream_provider_ = demuxer_stream_provider; | |
| 48 client_ = client; | 47 client_ = client; |
| 49 init_cb_ = init_cb; | 48 init_cb_ = init_cb; |
| 50 | 49 |
| 51 // Create audio and video mojom::DemuxerStream and bind its lifetime to | 50 // Create audio and video mojom::DemuxerStream and bind its lifetime to |
| 52 // the pipe. | 51 // the pipe. |
| 53 DemuxerStream* const audio = | 52 DemuxerStream* const audio = |
| 54 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); | 53 demuxer_stream_provider->GetStream(DemuxerStream::AUDIO); |
| 55 DemuxerStream* const video = | 54 DemuxerStream* const video = |
| 56 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); | 55 demuxer_stream_provider->GetStream(DemuxerStream::VIDEO); |
| 57 | 56 |
| 58 mojom::DemuxerStreamPtr audio_stream; | 57 mojom::DemuxerStreamPtr audio_stream; |
| 59 if (audio) | 58 if (audio) { |
| 60 new MojoDemuxerStreamImpl(audio, GetProxy(&audio_stream)); | 59 audio_stream_.reset( |
| 60 new MojoDemuxerStreamImpl(audio, GetProxy(&audio_stream))); | |
| 61 } | |
| 61 | 62 |
| 62 mojom::DemuxerStreamPtr video_stream; | 63 mojom::DemuxerStreamPtr video_stream; |
| 63 if (video) | 64 if (video) { |
| 64 new MojoDemuxerStreamImpl(video, GetProxy(&video_stream)); | 65 video_stream_.reset( |
| 66 new MojoDemuxerStreamImpl(video, GetProxy(&video_stream))); | |
| 67 } | |
|
xhwang
2016/06/17 18:47:00
In theory, if the remote renderer doesn't care abo
alokp
2016/06/17 20:16:37
If we decide to support this use case it would be
alokp
2016/06/17 20:40:28
Whoops I did not think this through. You would sti
| |
| 65 | 68 |
| 66 BindRemoteRendererIfNeeded(); | 69 BindRemoteRendererIfNeeded(); |
| 67 | 70 |
| 68 // Using base::Unretained(this) is safe because |this| owns | 71 // Using base::Unretained(this) is safe because |this| owns |
| 69 // |remote_renderer_|, and the callback won't be dispatched if | 72 // |remote_renderer_|, and the callback won't be dispatched if |
| 70 // |remote_renderer_| is destroyed. | 73 // |remote_renderer_| is destroyed. |
| 71 remote_renderer_->Initialize( | 74 remote_renderer_->Initialize( |
| 72 binding_.CreateInterfacePtrAndBind(), std::move(audio_stream), | 75 binding_.CreateInterfacePtrAndBind(), std::move(audio_stream), |
| 73 std::move(video_stream), | 76 std::move(video_stream), |
| 74 base::Bind(&MojoRendererImpl::OnInitialized, base::Unretained(this))); | 77 base::Bind(&MojoRendererImpl::OnInitialized, base::Unretained(this))); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 base::TimeDelta MojoRendererImpl::GetMediaTime() { | 132 base::TimeDelta MojoRendererImpl::GetMediaTime() { |
| 130 base::AutoLock auto_lock(lock_); | 133 base::AutoLock auto_lock(lock_); |
| 131 DVLOG(3) << __FUNCTION__ << ": " << time_.InMilliseconds() << " ms"; | 134 DVLOG(3) << __FUNCTION__ << ": " << time_.InMilliseconds() << " ms"; |
| 132 return time_; | 135 return time_; |
| 133 } | 136 } |
| 134 | 137 |
| 135 bool MojoRendererImpl::HasAudio() { | 138 bool MojoRendererImpl::HasAudio() { |
| 136 DVLOG(1) << __FUNCTION__; | 139 DVLOG(1) << __FUNCTION__; |
| 137 DCHECK(task_runner_->BelongsToCurrentThread()); | 140 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 138 DCHECK(remote_renderer_.get()); // We always bind the renderer. | 141 DCHECK(remote_renderer_.get()); // We always bind the renderer. |
| 139 return !!demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); | 142 return !!audio_stream_; |
| 140 } | 143 } |
| 141 | 144 |
| 142 bool MojoRendererImpl::HasVideo() { | 145 bool MojoRendererImpl::HasVideo() { |
| 143 DVLOG(1) << __FUNCTION__; | 146 DVLOG(1) << __FUNCTION__; |
| 144 DCHECK(task_runner_->BelongsToCurrentThread()); | 147 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 145 return !!demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); | 148 return !!video_stream_; |
| 146 } | 149 } |
| 147 | 150 |
| 148 void MojoRendererImpl::OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) { | 151 void MojoRendererImpl::OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) { |
| 149 DVLOG(3) << __FUNCTION__ << ": " << time_usec << ", " << max_time_usec; | 152 DVLOG(3) << __FUNCTION__ << ": " << time_usec << ", " << max_time_usec; |
| 150 DCHECK(task_runner_->BelongsToCurrentThread()); | 153 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 151 | 154 |
| 152 base::AutoLock auto_lock(lock_); | 155 base::AutoLock auto_lock(lock_); |
| 153 time_ = base::TimeDelta::FromMicroseconds(time_usec); | 156 time_ = base::TimeDelta::FromMicroseconds(time_usec); |
| 154 } | 157 } |
| 155 | 158 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 224 void MojoRendererImpl::OnInitialized(bool success) { | 227 void MojoRendererImpl::OnInitialized(bool success) { |
| 225 DVLOG(1) << __FUNCTION__; | 228 DVLOG(1) << __FUNCTION__; |
| 226 DCHECK(task_runner_->BelongsToCurrentThread()); | 229 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 227 DCHECK(!init_cb_.is_null()); | 230 DCHECK(!init_cb_.is_null()); |
| 228 | 231 |
| 229 base::ResetAndReturn(&init_cb_).Run( | 232 base::ResetAndReturn(&init_cb_).Run( |
| 230 success ? PIPELINE_OK : PIPELINE_ERROR_INITIALIZATION_FAILED); | 233 success ? PIPELINE_OK : PIPELINE_ERROR_INITIALIZATION_FAILED); |
| 231 } | 234 } |
| 232 | 235 |
| 233 } // namespace media | 236 } // namespace media |
| OLD | NEW |