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

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

Issue 2890603004: Freeze the reported media time while audio is restarted (Closed)
Patch Set: Fixed nits Created 3 years, 6 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
« no previous file with comments | « media/renderers/renderer_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
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
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
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
OLDNEW
« no previous file with comments | « media/renderers/renderer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698