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

Side by Side Diff: media/filters/renderer_impl.cc

Issue 523283002: media: Introduce DemuxerStreamProvider interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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/filters/renderer_impl.h" 5 #include "media/filters/renderer_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.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/audio_renderer.h" 13 #include "media/base/audio_renderer.h"
14 #include "media/base/demuxer.h" 14 #include "media/base/demuxer_stream_provider.h"
15 #include "media/base/time_delta_interpolator.h" 15 #include "media/base/time_delta_interpolator.h"
16 #include "media/base/time_source.h" 16 #include "media/base/time_source.h"
17 #include "media/base/video_renderer.h" 17 #include "media/base/video_renderer.h"
18 18
19 namespace media { 19 namespace media {
20 20
21 RendererImpl::RendererImpl( 21 RendererImpl::RendererImpl(
22 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 22 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
23 Demuxer* demuxer, 23 DemuxerStreamProvider* demuxer_stream_provider,
24 scoped_ptr<AudioRenderer> audio_renderer, 24 scoped_ptr<AudioRenderer> audio_renderer,
25 scoped_ptr<VideoRenderer> video_renderer) 25 scoped_ptr<VideoRenderer> video_renderer)
26 : state_(STATE_UNINITIALIZED), 26 : state_(STATE_UNINITIALIZED),
27 task_runner_(task_runner), 27 task_runner_(task_runner),
28 demuxer_(demuxer), 28 demuxer_stream_provider_(demuxer_stream_provider),
29 audio_renderer_(audio_renderer.Pass()), 29 audio_renderer_(audio_renderer.Pass()),
30 video_renderer_(video_renderer.Pass()), 30 video_renderer_(video_renderer.Pass()),
31 time_source_(NULL), 31 time_source_(NULL),
32 audio_buffering_state_(BUFFERING_HAVE_NOTHING), 32 audio_buffering_state_(BUFFERING_HAVE_NOTHING),
33 video_buffering_state_(BUFFERING_HAVE_NOTHING), 33 video_buffering_state_(BUFFERING_HAVE_NOTHING),
34 audio_ended_(false), 34 audio_ended_(false),
35 video_ended_(false), 35 video_ended_(false),
36 underflow_disabled_for_testing_(false), 36 underflow_disabled_for_testing_(false),
37 interpolator_(new TimeDeltaInterpolator(&default_tick_clock_)), 37 interpolator_(new TimeDeltaInterpolator(&default_tick_clock_)),
38 interpolation_state_(INTERPOLATION_STOPPED), 38 interpolation_state_(INTERPOLATION_STOPPED),
(...skipping 21 matching lines...) Expand all
60 const TimeDeltaCB& get_duration_cb) { 60 const TimeDeltaCB& get_duration_cb) {
61 DVLOG(1) << __FUNCTION__; 61 DVLOG(1) << __FUNCTION__;
62 DCHECK(task_runner_->BelongsToCurrentThread()); 62 DCHECK(task_runner_->BelongsToCurrentThread());
63 DCHECK_EQ(state_, STATE_UNINITIALIZED) << state_; 63 DCHECK_EQ(state_, STATE_UNINITIALIZED) << state_;
64 DCHECK(!init_cb.is_null()); 64 DCHECK(!init_cb.is_null());
65 DCHECK(!statistics_cb.is_null()); 65 DCHECK(!statistics_cb.is_null());
66 DCHECK(!ended_cb.is_null()); 66 DCHECK(!ended_cb.is_null());
67 DCHECK(!error_cb.is_null()); 67 DCHECK(!error_cb.is_null());
68 DCHECK(!buffering_state_cb.is_null()); 68 DCHECK(!buffering_state_cb.is_null());
69 DCHECK(!get_duration_cb.is_null()); 69 DCHECK(!get_duration_cb.is_null());
70 DCHECK(demuxer_->GetStream(DemuxerStream::AUDIO) || 70 DCHECK(demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO) ||
71 demuxer_->GetStream(DemuxerStream::VIDEO)); 71 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO));
72 72
73 statistics_cb_ = statistics_cb; 73 statistics_cb_ = statistics_cb;
74 ended_cb_ = ended_cb; 74 ended_cb_ = ended_cb;
75 error_cb_ = error_cb; 75 error_cb_ = error_cb;
76 buffering_state_cb_ = buffering_state_cb; 76 buffering_state_cb_ = buffering_state_cb;
77 get_duration_cb_ = get_duration_cb; 77 get_duration_cb_ = get_duration_cb;
78 78
79 init_cb_ = init_cb; 79 init_cb_ = init_cb;
80 state_ = STATE_INITIALIZING; 80 state_ = STATE_INITIALIZING;
81 InitializeAudioRenderer(); 81 InitializeAudioRenderer();
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 void RendererImpl::InitializeAudioRenderer() { 190 void RendererImpl::InitializeAudioRenderer() {
191 DVLOG(2) << __FUNCTION__; 191 DVLOG(2) << __FUNCTION__;
192 DCHECK(task_runner_->BelongsToCurrentThread()); 192 DCHECK(task_runner_->BelongsToCurrentThread());
193 DCHECK_EQ(state_, STATE_INITIALIZING) << state_; 193 DCHECK_EQ(state_, STATE_INITIALIZING) << state_;
194 DCHECK(!init_cb_.is_null()); 194 DCHECK(!init_cb_.is_null());
195 195
196 PipelineStatusCB done_cb = 196 PipelineStatusCB done_cb =
197 base::Bind(&RendererImpl::OnAudioRendererInitializeDone, weak_this_); 197 base::Bind(&RendererImpl::OnAudioRendererInitializeDone, weak_this_);
198 198
199 if (!demuxer_->GetStream(DemuxerStream::AUDIO)) { 199 if (!demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO)) {
200 audio_renderer_.reset(); 200 audio_renderer_.reset();
201 task_runner_->PostTask(FROM_HERE, base::Bind(done_cb, PIPELINE_OK)); 201 task_runner_->PostTask(FROM_HERE, base::Bind(done_cb, PIPELINE_OK));
202 return; 202 return;
203 } 203 }
204 204
205 audio_renderer_->Initialize( 205 audio_renderer_->Initialize(
206 demuxer_->GetStream(DemuxerStream::AUDIO), 206 demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO),
207 done_cb, 207 done_cb,
208 base::Bind(&RendererImpl::OnUpdateStatistics, weak_this_), 208 base::Bind(&RendererImpl::OnUpdateStatistics, weak_this_),
209 base::Bind(&RendererImpl::OnAudioTimeUpdate, weak_this_), 209 base::Bind(&RendererImpl::OnAudioTimeUpdate, weak_this_),
210 base::Bind(&RendererImpl::OnBufferingStateChanged, weak_this_, 210 base::Bind(&RendererImpl::OnBufferingStateChanged, weak_this_,
211 &audio_buffering_state_), 211 &audio_buffering_state_),
212 base::Bind(&RendererImpl::OnAudioRendererEnded, weak_this_), 212 base::Bind(&RendererImpl::OnAudioRendererEnded, weak_this_),
213 base::Bind(&RendererImpl::OnError, weak_this_)); 213 base::Bind(&RendererImpl::OnError, weak_this_));
214 } 214 }
215 215
216 void RendererImpl::OnAudioRendererInitializeDone(PipelineStatus status) { 216 void RendererImpl::OnAudioRendererInitializeDone(PipelineStatus status) {
(...skipping 17 matching lines...) Expand all
234 234
235 void RendererImpl::InitializeVideoRenderer() { 235 void RendererImpl::InitializeVideoRenderer() {
236 DVLOG(2) << __FUNCTION__; 236 DVLOG(2) << __FUNCTION__;
237 DCHECK(task_runner_->BelongsToCurrentThread()); 237 DCHECK(task_runner_->BelongsToCurrentThread());
238 DCHECK_EQ(state_, STATE_INITIALIZING) << state_; 238 DCHECK_EQ(state_, STATE_INITIALIZING) << state_;
239 DCHECK(!init_cb_.is_null()); 239 DCHECK(!init_cb_.is_null());
240 240
241 PipelineStatusCB done_cb = 241 PipelineStatusCB done_cb =
242 base::Bind(&RendererImpl::OnVideoRendererInitializeDone, weak_this_); 242 base::Bind(&RendererImpl::OnVideoRendererInitializeDone, weak_this_);
243 243
244 if (!demuxer_->GetStream(DemuxerStream::VIDEO)) { 244 if (!demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO)) {
245 video_renderer_.reset(); 245 video_renderer_.reset();
246 task_runner_->PostTask(FROM_HERE, base::Bind(done_cb, PIPELINE_OK)); 246 task_runner_->PostTask(FROM_HERE, base::Bind(done_cb, PIPELINE_OK));
247 return; 247 return;
248 } 248 }
249 249
250 video_renderer_->Initialize( 250 video_renderer_->Initialize(
251 demuxer_->GetStream(DemuxerStream::VIDEO), 251 demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO),
252 demuxer_->GetLiveness() == Demuxer::LIVENESS_LIVE, 252 demuxer_stream_provider_->GetLiveness() ==
253 DemuxerStreamProvider::LIVENESS_LIVE,
253 done_cb, 254 done_cb,
254 base::Bind(&RendererImpl::OnUpdateStatistics, weak_this_), 255 base::Bind(&RendererImpl::OnUpdateStatistics, weak_this_),
255 base::Bind(&RendererImpl::OnVideoTimeUpdate, weak_this_), 256 base::Bind(&RendererImpl::OnVideoTimeUpdate, weak_this_),
256 base::Bind(&RendererImpl::OnBufferingStateChanged, weak_this_, 257 base::Bind(&RendererImpl::OnBufferingStateChanged,
258 weak_this_,
257 &video_buffering_state_), 259 &video_buffering_state_),
258 base::Bind(&RendererImpl::OnVideoRendererEnded, weak_this_), 260 base::Bind(&RendererImpl::OnVideoRendererEnded, weak_this_),
259 base::Bind(&RendererImpl::OnError, weak_this_), 261 base::Bind(&RendererImpl::OnError, weak_this_),
260 base::Bind(&RendererImpl::GetMediaTime, base::Unretained(this)), 262 base::Bind(&RendererImpl::GetMediaTime, base::Unretained(this)),
261 base::Bind(&RendererImpl::GetMediaDuration, base::Unretained(this))); 263 base::Bind(&RendererImpl::GetMediaDuration, base::Unretained(this)));
262 } 264 }
263 265
264 void RendererImpl::OnVideoRendererInitializeDone(PipelineStatus status) { 266 void RendererImpl::OnVideoRendererInitializeDone(PipelineStatus status) {
265 DVLOG(2) << __FUNCTION__ << ": " << status; 267 DVLOG(2) << __FUNCTION__ << ": " << status;
266 DCHECK(task_runner_->BelongsToCurrentThread()); 268 DCHECK(task_runner_->BelongsToCurrentThread());
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 DCHECK(task_runner_->BelongsToCurrentThread()); 566 DCHECK(task_runner_->BelongsToCurrentThread());
565 567
566 if (!init_cb_.is_null()) 568 if (!init_cb_.is_null())
567 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT); 569 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT);
568 570
569 if (!flush_cb_.is_null()) 571 if (!flush_cb_.is_null())
570 base::ResetAndReturn(&flush_cb_).Run(); 572 base::ResetAndReturn(&flush_cb_).Run();
571 } 573 }
572 574
573 } // namespace media 575 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698