Index: content/common/gpu/media/android_video_decode_accelerator.cc |
diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc |
index 37ea2c771c0a6bb73f016a010a540b9a1a6a015a..d12add9dce58a3ec84f933645ffeeea539e1f3cf 100644 |
--- a/content/common/gpu/media/android_video_decode_accelerator.cc |
+++ b/content/common/gpu/media/android_video_decode_accelerator.cc |
@@ -619,14 +619,28 @@ void AndroidVideoDecodeAccelerator::SendDecodedFrameToClient( |
void AndroidVideoDecodeAccelerator::Decode( |
const media::BitstreamBuffer& bitstream_buffer) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (bitstream_buffer.id() != -1 && bitstream_buffer.size() == 0) { |
+ |
+ if (bitstream_buffer.id() >= 0 && bitstream_buffer.size() > 0) { |
+ DecodeBuffer(bitstream_buffer); |
+ return; |
+ } |
+ |
+ if (base::SharedMemory::IsHandleValid(bitstream_buffer.handle())) |
+ base::SharedMemory::CloseHandle(bitstream_buffer.handle()); |
+ |
+ if (bitstream_buffer.id() < 0) { |
+ POST_ERROR(INVALID_ARGUMENT, |
+ "Invalid bistream_buffer, id: " << bitstream_buffer.id()); |
+ } else { |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |
base::Bind(&AndroidVideoDecodeAccelerator::NotifyEndOfBitstreamBuffer, |
weak_this_factory_.GetWeakPtr(), bitstream_buffer.id())); |
- return; |
} |
+} |
+void AndroidVideoDecodeAccelerator::DecodeBuffer( |
+ const media::BitstreamBuffer& bitstream_buffer) { |
pending_bitstream_buffers_.push( |
std::make_pair(bitstream_buffer, base::Time::Now())); |
TRACE_COUNTER1("media", "AVDA::PendingBitstreamBufferCount", |
@@ -704,7 +718,7 @@ void AndroidVideoDecodeAccelerator::ReusePictureBuffer( |
void AndroidVideoDecodeAccelerator::Flush() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- Decode(media::BitstreamBuffer(-1, base::SharedMemoryHandle(), 0)); |
+ DecodeBuffer(media::BitstreamBuffer(-1, base::SharedMemoryHandle(), 0)); |
} |
bool AndroidVideoDecodeAccelerator::ConfigureMediaCodec() { |