OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/common/gpu/media/android_video_decode_accelerator.h" | 5 #include "content/common/gpu/media/android_video_decode_accelerator.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/android/build_info.h" | 9 #include "base/android/build_info.h" |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
529 DVLOG(1) << "QueueSecureInputBuffer failed: NO_KEY"; | 529 DVLOG(1) << "QueueSecureInputBuffer failed: NO_KEY"; |
530 pending_input_buf_index_ = input_buf_index; | 530 pending_input_buf_index_ = input_buf_index; |
531 state_ = WAITING_FOR_KEY; | 531 state_ = WAITING_FOR_KEY; |
532 return false; | 532 return false; |
533 } | 533 } |
534 | 534 |
535 pending_input_buf_index_ = -1; | 535 pending_input_buf_index_ = -1; |
536 pending_bitstream_buffers_.pop(); | 536 pending_bitstream_buffers_.pop(); |
537 TRACE_COUNTER1("media", "AVDA::PendingBitstreamBufferCount", | 537 TRACE_COUNTER1("media", "AVDA::PendingBitstreamBufferCount", |
538 pending_bitstream_buffers_.size()); | 538 pending_bitstream_buffers_.size()); |
539 | |
540 if (status != media::MEDIA_CODEC_OK) { | |
541 POST_ERROR(PLATFORM_FAILURE, "Failed to QueueInputBuffer: " << status); | |
542 return false; | |
543 } | |
544 | |
545 // We should call NotifyEndOfBitstreamBuffer(), when no more decoded output | 539 // We should call NotifyEndOfBitstreamBuffer(), when no more decoded output |
546 // will be returned from the bitstream buffer. However, MediaCodec API is | 540 // will be returned from the bitstream buffer. However, MediaCodec API is |
547 // not enough to guarantee it. | 541 // not enough to guarantee it. |
548 // So, here, we calls NotifyEndOfBitstreamBuffer() in advance in order to | 542 // So, here, we calls NotifyEndOfBitstreamBuffer() in advance in order to |
549 // keep getting more bitstreams from the client, and throttle them by using | 543 // keep getting more bitstreams from the client, and throttle them by using |
550 // |bitstreams_notified_in_advance_|. | 544 // |bitstreams_notified_in_advance_|. |
551 // TODO(dwkang): check if there is a way to remove this workaround. | 545 // TODO(dwkang): check if there is a way to remove this workaround. |
552 base::MessageLoop::current()->PostTask( | 546 base::MessageLoop::current()->PostTask( |
553 FROM_HERE, | 547 FROM_HERE, |
554 base::Bind(&AndroidVideoDecodeAccelerator::NotifyEndOfBitstreamBuffer, | 548 base::Bind(&AndroidVideoDecodeAccelerator::NotifyEndOfBitstreamBuffer, |
555 weak_this_factory_.GetWeakPtr(), bitstream_buffer.id())); | 549 weak_this_factory_.GetWeakPtr(), bitstream_buffer.id())); |
556 bitstreams_notified_in_advance_.push_back(bitstream_buffer.id()); | 550 bitstreams_notified_in_advance_.push_back(bitstream_buffer.id()); |
liberato (no reviews please)
2016/03/29 20:17:25
i was going to say that |bitstreams_notified_in_ad
| |
557 | 551 |
552 if (status != media::MEDIA_CODEC_OK) { | |
553 POST_ERROR(PLATFORM_FAILURE, "Failed to QueueInputBuffer: " << status); | |
554 return false; | |
555 } | |
556 | |
558 return true; | 557 return true; |
559 } | 558 } |
560 | 559 |
561 bool AndroidVideoDecodeAccelerator::DequeueOutput() { | 560 bool AndroidVideoDecodeAccelerator::DequeueOutput() { |
562 DCHECK(thread_checker_.CalledOnValidThread()); | 561 DCHECK(thread_checker_.CalledOnValidThread()); |
563 TRACE_EVENT0("media", "AVDA::DequeueOutput"); | 562 TRACE_EVENT0("media", "AVDA::DequeueOutput"); |
564 base::AutoReset<bool> auto_reset(&defer_errors_, true); | 563 base::AutoReset<bool> auto_reset(&defer_errors_, true); |
565 if (picturebuffers_requested_ && output_picture_buffers_.empty()) | 564 if (picturebuffers_requested_ && output_picture_buffers_.empty()) |
566 return false; | 565 return false; |
567 | 566 |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1213 capabilities.flags = media::VideoDecodeAccelerator::Capabilities:: | 1212 capabilities.flags = media::VideoDecodeAccelerator::Capabilities:: |
1214 NEEDS_ALL_PICTURE_BUFFERS_TO_DECODE | | 1213 NEEDS_ALL_PICTURE_BUFFERS_TO_DECODE | |
1215 media::VideoDecodeAccelerator::Capabilities:: | 1214 media::VideoDecodeAccelerator::Capabilities:: |
1216 SUPPORTS_EXTERNAL_OUTPUT_SURFACE; | 1215 SUPPORTS_EXTERNAL_OUTPUT_SURFACE; |
1217 } | 1216 } |
1218 | 1217 |
1219 return capabilities; | 1218 return capabilities; |
1220 } | 1219 } |
1221 | 1220 |
1222 } // namespace content | 1221 } // namespace content |
OLD | NEW |