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

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

Issue 2890603004: Freeze the reported media time while audio is restarted (Closed)
Patch Set: Use inline initialization for restarting_audio_time_ Created 3 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/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 base::AutoLock lock(restarting_audio_lock_);
268 if (restarting_audio_) {
269 DCHECK_NE(kNoTimestamp, restarting_audio_time_);
270 return restarting_audio_time_;
271 }
xhwang 2017/05/24 00:23:41 If time_source_->CurrentMediaTime() calls back int
servolk 2017/05/24 00:28:00 Done.
267 return time_source_->CurrentMediaTime(); 272 return time_source_->CurrentMediaTime();
268 } 273 }
269 274
270 void RendererImpl::DisableUnderflowForTesting() { 275 void RendererImpl::DisableUnderflowForTesting() {
271 DVLOG(1) << __func__; 276 DVLOG(1) << __func__;
272 DCHECK(task_runner_->BelongsToCurrentThread()); 277 DCHECK(task_runner_->BelongsToCurrentThread());
273 DCHECK_EQ(state_, STATE_UNINITIALIZED); 278 DCHECK_EQ(state_, STATE_UNINITIALIZED);
274 279
275 underflow_disabled_for_testing_ = true; 280 underflow_disabled_for_testing_ = true;
276 } 281 }
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 ? &RendererImpl::RestartVideoRenderer 573 ? &RendererImpl::RestartVideoRenderer
569 : &RendererImpl::ReinitializeVideoRenderer, 574 : &RendererImpl::ReinitializeVideoRenderer,
570 weak_this_, stream, time); 575 weak_this_, stream, time);
571 if (state_ == STATE_FLUSHED) 576 if (state_ == STATE_FLUSHED)
572 handle_track_status_cb.Run(); 577 handle_track_status_cb.Run();
573 else 578 else
574 video_renderer_->Flush(handle_track_status_cb); 579 video_renderer_->Flush(handle_track_status_cb);
575 } else if (stream->type() == DemuxerStream::AUDIO) { 580 } else if (stream->type() == DemuxerStream::AUDIO) {
576 DCHECK(audio_renderer_); 581 DCHECK(audio_renderer_);
577 DCHECK(time_source_); 582 DCHECK(time_source_);
578 restarting_audio_ = true; 583 {
584 base::AutoLock lock(restarting_audio_lock_);
585 restarting_audio_time_ = time;
586 restarting_audio_ = true;
587 }
579 base::Closure handle_track_status_cb = 588 base::Closure handle_track_status_cb =
580 base::Bind(stream == current_audio_stream_ 589 base::Bind(stream == current_audio_stream_
581 ? &RendererImpl::RestartAudioRenderer 590 ? &RendererImpl::RestartAudioRenderer
582 : &RendererImpl::ReinitializeAudioRenderer, 591 : &RendererImpl::ReinitializeAudioRenderer,
583 weak_this_, stream, time); 592 weak_this_, stream, time);
584 if (state_ == STATE_FLUSHED) { 593 if (state_ == STATE_FLUSHED) {
585 handle_track_status_cb.Run(); 594 handle_track_status_cb.Run();
586 return; 595 return;
587 } 596 }
588 // Stop ticking (transition into paused state) in audio renderer before 597 // Stop ticking (transition into paused state) in audio renderer before
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 } 771 }
763 } 772 }
764 return false; 773 return false;
765 } 774 }
766 775
767 void RendererImpl::OnStreamRestartCompleted() { 776 void RendererImpl::OnStreamRestartCompleted() {
768 DVLOG(3) << __func__ << " restarting_audio_=" << restarting_audio_ 777 DVLOG(3) << __func__ << " restarting_audio_=" << restarting_audio_
769 << " restarting_video_=" << restarting_video_; 778 << " restarting_video_=" << restarting_video_;
770 DCHECK(task_runner_->BelongsToCurrentThread()); 779 DCHECK(task_runner_->BelongsToCurrentThread());
771 DCHECK(restarting_audio_ || restarting_video_); 780 DCHECK(restarting_audio_ || restarting_video_);
772 restarting_audio_ = false; 781 {
782 base::AutoLock lock(restarting_audio_lock_);
783 restarting_audio_ = false;
784 restarting_audio_time_ = kNoTimestamp;
785 }
773 restarting_video_ = false; 786 restarting_video_ = false;
774 if (!pending_actions_.empty()) { 787 if (!pending_actions_.empty()) {
775 base::Closure closure = pending_actions_.front(); 788 base::Closure closure = pending_actions_.front();
776 pending_actions_.pop_front(); 789 pending_actions_.pop_front();
777 closure.Run(); 790 closure.Run();
778 } 791 }
779 } 792 }
780 793
781 void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type, 794 void RendererImpl::OnBufferingStateChange(DemuxerStream::Type type,
782 BufferingState new_buffering_state) { 795 BufferingState new_buffering_state) {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 DCHECK(task_runner_->BelongsToCurrentThread()); 1004 DCHECK(task_runner_->BelongsToCurrentThread());
992 client_->OnVideoNaturalSizeChange(size); 1005 client_->OnVideoNaturalSizeChange(size);
993 } 1006 }
994 1007
995 void RendererImpl::OnVideoOpacityChange(bool opaque) { 1008 void RendererImpl::OnVideoOpacityChange(bool opaque) {
996 DCHECK(task_runner_->BelongsToCurrentThread()); 1009 DCHECK(task_runner_->BelongsToCurrentThread());
997 client_->OnVideoOpacityChange(opaque); 1010 client_->OnVideoOpacityChange(opaque);
998 } 1011 }
999 1012
1000 } // namespace media 1013 } // namespace media
OLDNEW
« media/renderers/renderer_impl.h ('K') | « media/renderers/renderer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698