Index: media/renderers/renderer_impl.cc |
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc |
index 210e5cc574f2437b4368c498f56b02facf5c1e61..3382179fe779654d095b52589b66031e234740b8 100644 |
--- a/media/renderers/renderer_impl.cc |
+++ b/media/renderers/renderer_impl.cc |
@@ -111,6 +111,8 @@ RendererImpl::~RendererImpl() { |
DVLOG(1) << __func__; |
DCHECK(task_runner_->BelongsToCurrentThread()); |
+ state_ = STATE_SHUTDOWN; |
+ |
// Tear down in opposite order of construction as |video_renderer_| can still |
// need |time_source_| (which can be |audio_renderer_|) to be alive. |
video_renderer_.reset(); |
@@ -246,20 +248,22 @@ void RendererImpl::RestartStreamPlayback(DemuxerStream* stream, |
void RendererImpl::RestartVideoRenderer(base::TimeDelta time) { |
DVLOG(3) << __func__; |
DCHECK(task_runner_->BelongsToCurrentThread()); |
- DCHECK(video_renderer_); |
- DCHECK_EQ(state_, STATE_PLAYING); |
- video_ended_ = false; |
- video_renderer_->StartPlayingFrom(time); |
+ if (state_ == STATE_PLAYING) { |
whywhat
2016/12/13 05:08:41
nit: maybe you should rather check for STATE_SHUTD
servolk
2016/12/13 19:39:47
Yes, I've considered doing that, but I've decided
whywhat
2016/12/13 20:10:54
Calling this method in any other state than PLAYIN
servolk
2016/12/13 20:57:10
I want to make two notes here:
1. Calling this met
whywhat
2016/12/13 21:43:07
I agree that fixing this specific crash by making
servolk
2016/12/13 22:18:33
I see your points. But my counterarguments are:
1.
|
+ DCHECK(video_renderer_); |
+ video_ended_ = false; |
+ video_renderer_->StartPlayingFrom(time); |
+ } |
} |
void RendererImpl::RestartAudioRenderer(base::TimeDelta time) { |
DVLOG(3) << __func__; |
DCHECK(task_runner_->BelongsToCurrentThread()); |
- DCHECK_EQ(state_, STATE_PLAYING); |
- DCHECK(time_source_); |
- DCHECK(audio_renderer_); |
- audio_ended_ = false; |
- audio_renderer_->StartPlaying(); |
+ if (state_ == STATE_PLAYING) { |
whywhat
2016/12/13 21:43:07
nit: you could still do
if (state_ != STATE_PLAYI
servolk
2016/12/13 22:18:33
Done.
|
+ DCHECK(time_source_); |
+ DCHECK(audio_renderer_); |
+ audio_ended_ = false; |
+ audio_renderer_->StartPlaying(); |
+ } |
} |
void RendererImpl::SetPlaybackRate(double playback_rate) { |
@@ -724,6 +728,7 @@ void RendererImpl::PausePlayback() { |
case STATE_UNINITIALIZED: |
case STATE_INIT_PENDING_CDM: |
case STATE_INITIALIZING: |
+ case STATE_SHUTDOWN: |
NOTREACHED() << "Invalid state: " << state_; |
break; |