| Index: media/gpu/android_video_decode_accelerator.cc
|
| diff --git a/media/gpu/android_video_decode_accelerator.cc b/media/gpu/android_video_decode_accelerator.cc
|
| index 06298d81bc767142eeb2dcfdd64beb80b0dab754..6e371786589982a5ba4098ef709b199eef6986f5 100644
|
| --- a/media/gpu/android_video_decode_accelerator.cc
|
| +++ b/media/gpu/android_video_decode_accelerator.cc
|
| @@ -724,9 +724,17 @@ bool AndroidVideoDecodeAccelerator::DequeueOutput() {
|
| base::AutoReset<bool> auto_reset(&defer_errors_, true);
|
| if (state_ == ERROR || state_ == WAITING_FOR_CODEC)
|
| return false;
|
| - if (picturebuffers_requested_ && output_picture_buffers_.empty())
|
| + // If we're draining for reset or destroy, then we don't need picture buffers
|
| + // since we won't send any decoded frames anyway. There might not be any,
|
| + // since the pipeline might not be sending them back and / or they don't
|
| + // exist anymore. From the pipeline's point of view, for Destroy at least,
|
| + // the VDA is already gone.
|
| + if (picturebuffers_requested_ && output_picture_buffers_.empty() &&
|
| + !IsDrainingForResetOrDestroy()) {
|
| return false;
|
| - if (!output_picture_buffers_.empty() && free_picture_ids_.empty()) {
|
| + }
|
| + if (!output_picture_buffers_.empty() && free_picture_ids_.empty() &&
|
| + !IsDrainingForResetOrDestroy()) {
|
| // Don't have any picture buffer to send. Need to wait.
|
| return false;
|
| }
|
|
|