Chromium Code Reviews| 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; |