Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: media/mojo/services/mojo_renderer_impl.cc

Issue 1955843002: Move Renderer permanent callbacks into RendererClient interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updates media::Renderer subclasses Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_impl.h" 5 #include "media/mojo/services/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"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/single_thread_task_runner.h"
13 #include "media/base/demuxer_stream_provider.h" 13 #include "media/base/demuxer_stream_provider.h"
14 #include "media/base/renderer_client.h"
14 #include "media/mojo/services/mojo_demuxer_stream_impl.h" 15 #include "media/mojo/services/mojo_demuxer_stream_impl.h"
15 16
16 namespace media { 17 namespace media {
17 18
18 MojoRendererImpl::MojoRendererImpl( 19 MojoRendererImpl::MojoRendererImpl(
19 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 20 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
20 interfaces::RendererPtr remote_renderer) 21 interfaces::RendererPtr remote_renderer)
21 : task_runner_(task_runner), 22 : task_runner_(task_runner),
22 remote_renderer_info_(remote_renderer.PassInterface()), 23 remote_renderer_info_(remote_renderer.PassInterface()),
23 binding_(this) { 24 binding_(this) {
24 DVLOG(1) << __FUNCTION__; 25 DVLOG(1) << __FUNCTION__;
25 } 26 }
26 27
27 MojoRendererImpl::~MojoRendererImpl() { 28 MojoRendererImpl::~MojoRendererImpl() {
28 DVLOG(1) << __FUNCTION__; 29 DVLOG(1) << __FUNCTION__;
29 DCHECK(task_runner_->BelongsToCurrentThread()); 30 DCHECK(task_runner_->BelongsToCurrentThread());
30 } 31 }
31 32
32 // TODO(xhwang): Support |waiting_for_decryption_key_cb| and |statictics_cb|. 33 // TODO(xhwang): Support |waiting_for_decryption_key_cb| and |statictics_cb|.
33 // See http://crbug.com/585287 34 // See http://crbug.com/585287
xhwang 2016/05/12 20:51:18 You can remove this now.
alokp 2016/05/12 21:46:50 Done.
34 void MojoRendererImpl::Initialize( 35 void MojoRendererImpl::Initialize(
35 DemuxerStreamProvider* demuxer_stream_provider, 36 DemuxerStreamProvider* demuxer_stream_provider,
36 const PipelineStatusCB& init_cb, 37 media::RendererClient* client,
37 const StatisticsCB& /* statistics_cb */, 38 const PipelineStatusCB& init_cb) {
38 const BufferingStateCB& buffering_state_cb,
39 const base::Closure& ended_cb,
40 const PipelineStatusCB& error_cb,
41 const base::Closure& /* waiting_for_decryption_key_cb */) {
42 DVLOG(1) << __FUNCTION__; 39 DVLOG(1) << __FUNCTION__;
43 DCHECK(task_runner_->BelongsToCurrentThread()); 40 DCHECK(task_runner_->BelongsToCurrentThread());
44 DCHECK(demuxer_stream_provider); 41 DCHECK(demuxer_stream_provider);
45 42
46 // Bind |remote_renderer_| to the |task_runner_|. 43 // Bind |remote_renderer_| to the |task_runner_|.
47 remote_renderer_.Bind(std::move(remote_renderer_info_)); 44 remote_renderer_.Bind(std::move(remote_renderer_info_));
48 45
49 // If connection error has happened, fail immediately. 46 // If connection error has happened, fail immediately.
50 if (remote_renderer_.encountered_error()) { 47 if (remote_renderer_.encountered_error()) {
51 task_runner_->PostTask( 48 task_runner_->PostTask(
52 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INITIALIZATION_FAILED)); 49 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INITIALIZATION_FAILED));
53 return; 50 return;
54 } 51 }
55 52
56 // Otherwise, set an error handler to catch the connection error. 53 // Otherwise, set an error handler to catch the connection error.
57 // Using base::Unretained(this) is safe because |this| owns 54 // Using base::Unretained(this) is safe because |this| owns
58 // |remote_renderer_|, and the error handler can't be invoked once 55 // |remote_renderer_|, and the error handler can't be invoked once
59 // |remote_renderer_| is destroyed. 56 // |remote_renderer_| is destroyed.
60 remote_renderer_.set_connection_error_handler( 57 remote_renderer_.set_connection_error_handler(
61 base::Bind(&MojoRendererImpl::OnConnectionError, base::Unretained(this))); 58 base::Bind(&MojoRendererImpl::OnConnectionError, base::Unretained(this)));
62 59
63 demuxer_stream_provider_ = demuxer_stream_provider; 60 demuxer_stream_provider_ = demuxer_stream_provider;
61 client_ = client;
64 init_cb_ = init_cb; 62 init_cb_ = init_cb;
65 buffering_state_cb_ = buffering_state_cb;
66 ended_cb_ = ended_cb;
67 error_cb_ = error_cb;
68 63
69 // Create audio and video interfaces::DemuxerStream and bind its lifetime to 64 // Create audio and video interfaces::DemuxerStream and bind its lifetime to
70 // the pipe. 65 // the pipe.
71 DemuxerStream* const audio = 66 DemuxerStream* const audio =
72 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); 67 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO);
73 DemuxerStream* const video = 68 DemuxerStream* const video =
74 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); 69 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO);
75 70
76 interfaces::DemuxerStreamPtr audio_stream; 71 interfaces::DemuxerStreamPtr audio_stream;
77 if (audio) 72 if (audio)
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 DCHECK(task_runner_->BelongsToCurrentThread()); 155 DCHECK(task_runner_->BelongsToCurrentThread());
161 156
162 base::AutoLock auto_lock(lock_); 157 base::AutoLock auto_lock(lock_);
163 time_ = base::TimeDelta::FromMicroseconds(time_usec); 158 time_ = base::TimeDelta::FromMicroseconds(time_usec);
164 } 159 }
165 160
166 void MojoRendererImpl::OnBufferingStateChange( 161 void MojoRendererImpl::OnBufferingStateChange(
167 interfaces::BufferingState state) { 162 interfaces::BufferingState state) {
168 DVLOG(2) << __FUNCTION__; 163 DVLOG(2) << __FUNCTION__;
169 DCHECK(task_runner_->BelongsToCurrentThread()); 164 DCHECK(task_runner_->BelongsToCurrentThread());
170 buffering_state_cb_.Run(static_cast<media::BufferingState>(state)); 165 client_->OnBufferingStateChange(static_cast<media::BufferingState>(state));
171 } 166 }
172 167
173 void MojoRendererImpl::OnEnded() { 168 void MojoRendererImpl::OnEnded() {
174 DVLOG(1) << __FUNCTION__; 169 DVLOG(1) << __FUNCTION__;
175 DCHECK(task_runner_->BelongsToCurrentThread()); 170 DCHECK(task_runner_->BelongsToCurrentThread());
176 ended_cb_.Run(); 171 client_->OnEnded();
177 } 172 }
178 173
179 void MojoRendererImpl::OnError() { 174 void MojoRendererImpl::OnError() {
180 DVLOG(1) << __FUNCTION__; 175 DVLOG(1) << __FUNCTION__;
181 DCHECK(task_runner_->BelongsToCurrentThread()); 176 DCHECK(task_runner_->BelongsToCurrentThread());
182 DCHECK(init_cb_.is_null()); 177 DCHECK(init_cb_.is_null());
183 178
184 // TODO(tim): Should we plumb error code from remote renderer? 179 // TODO(tim): Should we plumb error code from remote renderer?
185 // http://crbug.com/410451. 180 // http://crbug.com/410451.
186 error_cb_.Run(PIPELINE_ERROR_DECODE); 181 client_->OnError(PIPELINE_ERROR_DECODE);
187 } 182 }
188 183
189 void MojoRendererImpl::OnConnectionError() { 184 void MojoRendererImpl::OnConnectionError() {
190 DVLOG(1) << __FUNCTION__; 185 DVLOG(1) << __FUNCTION__;
191 DCHECK(task_runner_->BelongsToCurrentThread()); 186 DCHECK(task_runner_->BelongsToCurrentThread());
192 187
193 if (!init_cb_.is_null()) { 188 if (!init_cb_.is_null()) {
194 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); 189 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED);
195 return; 190 return;
196 } 191 }
197 192
198 error_cb_.Run(PIPELINE_ERROR_DECODE); 193 client_->OnError(PIPELINE_ERROR_DECODE);
199 } 194 }
200 195
201 void MojoRendererImpl::OnInitialized(bool success) { 196 void MojoRendererImpl::OnInitialized(bool success) {
202 DVLOG(1) << __FUNCTION__; 197 DVLOG(1) << __FUNCTION__;
203 DCHECK(task_runner_->BelongsToCurrentThread()); 198 DCHECK(task_runner_->BelongsToCurrentThread());
204 DCHECK(!init_cb_.is_null()); 199 DCHECK(!init_cb_.is_null());
205 200
206 base::ResetAndReturn(&init_cb_) 201 base::ResetAndReturn(&init_cb_)
207 .Run(success ? PIPELINE_OK : PIPELINE_ERROR_INITIALIZATION_FAILED); 202 .Run(success ? PIPELINE_OK : PIPELINE_ERROR_INITIALIZATION_FAILED);
208 } 203 }
209 204
210 } // namespace media 205 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698