diff --git a/media/base/android/media_codec_decoder.cc b/media/base/android/media_codec_decoder.cc index c7b9e2a508563..cdbaf07c17132 100644 --- a/media/base/android/media_codec_decoder.cc +++ b/media/base/android/media_codec_decoder.cc @@ -541,6 +541,19 @@ void MediaCodecDecoder::OnCodecError() { void MediaCodecDecoder::RequestData() { DCHECK(media_task_runner_->BelongsToCurrentThread()); + // We request data only in kPrefetching, kPrerolling and kRunning states. + // For kPrerolling and kRunning this method is posted from Decoder thread, + // and by the time it arrives the player might be doing something else, e.g. + // seeking, in which case we should not request more data + switch (GetState()) { + case kPrefetching: + case kPrerolling: + case kRunning: + break; // continue + default: + return; // skip + } + // Ensure one data request at a time. if (!is_data_request_in_progress_) { is_data_request_in_progress_ = true;