| 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/renderers/renderer_impl.h" | 5 #include "media/renderers/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.h" | 10 #include "base/callback.h" | 
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 257   DVLOG(1) << __func__; | 257   DVLOG(1) << __func__; | 
| 258   DCHECK(task_runner_->BelongsToCurrentThread()); | 258   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 259 | 259 | 
| 260   if (audio_renderer_) | 260   if (audio_renderer_) | 
| 261     audio_renderer_->SetVolume(volume); | 261     audio_renderer_->SetVolume(volume); | 
| 262 } | 262 } | 
| 263 | 263 | 
| 264 base::TimeDelta RendererImpl::GetMediaTime() { | 264 base::TimeDelta RendererImpl::GetMediaTime() { | 
| 265   // No BelongsToCurrentThread() checking because this can be called from other | 265   // No BelongsToCurrentThread() checking because this can be called from other | 
| 266   // threads. | 266   // threads. | 
|  | 267   { | 
|  | 268     base::AutoLock lock(restarting_audio_lock_); | 
|  | 269     if (restarting_audio_) { | 
|  | 270       DCHECK_NE(kNoTimestamp, restarting_audio_time_); | 
|  | 271       return restarting_audio_time_; | 
|  | 272     } | 
|  | 273   } | 
| 267   return time_source_->CurrentMediaTime(); | 274   return time_source_->CurrentMediaTime(); | 
| 268 } | 275 } | 
| 269 | 276 | 
| 270 void RendererImpl::DisableUnderflowForTesting() { | 277 void RendererImpl::DisableUnderflowForTesting() { | 
| 271   DVLOG(1) << __func__; | 278   DVLOG(1) << __func__; | 
| 272   DCHECK(task_runner_->BelongsToCurrentThread()); | 279   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 273   DCHECK_EQ(state_, STATE_UNINITIALIZED); | 280   DCHECK_EQ(state_, STATE_UNINITIALIZED); | 
| 274 | 281 | 
| 275   underflow_disabled_for_testing_ = true; | 282   underflow_disabled_for_testing_ = true; | 
| 276 } | 283 } | 
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 568                        ? &RendererImpl::RestartVideoRenderer | 575                        ? &RendererImpl::RestartVideoRenderer | 
| 569                        : &RendererImpl::ReinitializeVideoRenderer, | 576                        : &RendererImpl::ReinitializeVideoRenderer, | 
| 570                    weak_this_, stream, time); | 577                    weak_this_, stream, time); | 
| 571     if (state_ == STATE_FLUSHED) | 578     if (state_ == STATE_FLUSHED) | 
| 572       handle_track_status_cb.Run(); | 579       handle_track_status_cb.Run(); | 
| 573     else | 580     else | 
| 574       video_renderer_->Flush(handle_track_status_cb); | 581       video_renderer_->Flush(handle_track_status_cb); | 
| 575   } else if (stream->type() == DemuxerStream::AUDIO) { | 582   } else if (stream->type() == DemuxerStream::AUDIO) { | 
| 576     DCHECK(audio_renderer_); | 583     DCHECK(audio_renderer_); | 
| 577     DCHECK(time_source_); | 584     DCHECK(time_source_); | 
| 578     restarting_audio_ = true; | 585     { | 
|  | 586       base::AutoLock lock(restarting_audio_lock_); | 
|  | 587       restarting_audio_time_ = time; | 
|  | 588       restarting_audio_ = true; | 
|  | 589     } | 
| 579     base::Closure handle_track_status_cb = | 590     base::Closure handle_track_status_cb = | 
| 580         base::Bind(stream == current_audio_stream_ | 591         base::Bind(stream == current_audio_stream_ | 
| 581                        ? &RendererImpl::RestartAudioRenderer | 592                        ? &RendererImpl::RestartAudioRenderer | 
| 582                        : &RendererImpl::ReinitializeAudioRenderer, | 593                        : &RendererImpl::ReinitializeAudioRenderer, | 
| 583                    weak_this_, stream, time); | 594                    weak_this_, stream, time); | 
| 584     if (state_ == STATE_FLUSHED) { | 595     if (state_ == STATE_FLUSHED) { | 
| 585       handle_track_status_cb.Run(); | 596       handle_track_status_cb.Run(); | 
| 586       return; | 597       return; | 
| 587     } | 598     } | 
| 588     // Stop ticking (transition into paused state) in audio renderer before | 599     // Stop ticking (transition into paused state) in audio renderer before | 
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 762     } | 773     } | 
| 763   } | 774   } | 
| 764   return false; | 775   return false; | 
| 765 } | 776 } | 
| 766 | 777 | 
| 767 void RendererImpl::OnStreamRestartCompleted() { | 778 void RendererImpl::OnStreamRestartCompleted() { | 
| 768   DVLOG(3) << __func__ << " restarting_audio_=" << restarting_audio_ | 779   DVLOG(3) << __func__ << " restarting_audio_=" << restarting_audio_ | 
| 769            << " restarting_video_=" << restarting_video_; | 780            << " restarting_video_=" << restarting_video_; | 
| 770   DCHECK(task_runner_->BelongsToCurrentThread()); | 781   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 771   DCHECK(restarting_audio_ || restarting_video_); | 782   DCHECK(restarting_audio_ || restarting_video_); | 
| 772   restarting_audio_ = false; | 783   { | 
|  | 784     base::AutoLock lock(restarting_audio_lock_); | 
|  | 785     restarting_audio_ = false; | 
|  | 786     restarting_audio_time_ = kNoTimestamp; | 
|  | 787   } | 
| 773   restarting_video_ = false; | 788   restarting_video_ = false; | 
| 774   if (!pending_actions_.empty()) { | 789   if (!pending_actions_.empty()) { | 
| 775     base::Closure closure = pending_actions_.front(); | 790     base::Closure closure = pending_actions_.front(); | 
| 776     pending_actions_.pop_front(); | 791     pending_actions_.pop_front(); | 
| 777     closure.Run(); | 792     closure.Run(); | 
| 778   } | 793   } | 
| 779 } | 794 } | 
| 780 | 795 | 
| 781 void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type, | 796 void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type, | 
| 782                                           BufferingState new_buffering_state) { | 797                                           BufferingState new_buffering_state) { | 
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 991   DCHECK(task_runner_->BelongsToCurrentThread()); | 1006   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 992   client_->OnVideoNaturalSizeChange(size); | 1007   client_->OnVideoNaturalSizeChange(size); | 
| 993 } | 1008 } | 
| 994 | 1009 | 
| 995 void RendererImpl::OnVideoOpacityChange(bool opaque) { | 1010 void RendererImpl::OnVideoOpacityChange(bool opaque) { | 
| 996   DCHECK(task_runner_->BelongsToCurrentThread()); | 1011   DCHECK(task_runner_->BelongsToCurrentThread()); | 
| 997   client_->OnVideoOpacityChange(opaque); | 1012   client_->OnVideoOpacityChange(opaque); | 
| 998 } | 1013 } | 
| 999 | 1014 | 
| 1000 }  // namespace media | 1015 }  // namespace media | 
| OLD | NEW | 
|---|