| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/vaapi_video_decode_accelerator.h" | 5 #include "content/common/gpu/media/vaapi_video_decode_accelerator.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 } | 652 } |
| 653 pictures_.clear(); | 653 pictures_.clear(); |
| 654 | 654 |
| 655 // And ask for a new set as requested. | 655 // And ask for a new set as requested. |
| 656 DVLOG(1) << "Requesting " << requested_num_pics_ << " pictures of size: " | 656 DVLOG(1) << "Requesting " << requested_num_pics_ << " pictures of size: " |
| 657 << requested_pic_size_.ToString(); | 657 << requested_pic_size_.ToString(); |
| 658 | 658 |
| 659 message_loop_->PostTask( | 659 message_loop_->PostTask( |
| 660 FROM_HERE, | 660 FROM_HERE, |
| 661 base::Bind(&Client::ProvidePictureBuffers, client_, requested_num_pics_, | 661 base::Bind(&Client::ProvidePictureBuffers, client_, requested_num_pics_, |
| 662 requested_pic_size_, VaapiPicture::GetGLTextureTarget())); | 662 1, requested_pic_size_, VaapiPicture::GetGLTextureTarget())); |
| 663 } | 663 } |
| 664 | 664 |
| 665 void VaapiVideoDecodeAccelerator::Decode( | 665 void VaapiVideoDecodeAccelerator::Decode( |
| 666 const media::BitstreamBuffer& bitstream_buffer) { | 666 const media::BitstreamBuffer& bitstream_buffer) { |
| 667 DCHECK_EQ(message_loop_, base::MessageLoop::current()); | 667 DCHECK_EQ(message_loop_, base::MessageLoop::current()); |
| 668 | 668 |
| 669 TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id", | 669 TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id", |
| 670 bitstream_buffer.id()); | 670 bitstream_buffer.id()); |
| 671 | 671 |
| 672 RETURN_AND_NOTIFY_ON_FAILURE( | 672 RETURN_AND_NOTIFY_ON_FAILURE( |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 DCHECK(requested_pic_size_ == buffers[0].size()); | 729 DCHECK(requested_pic_size_ == buffers[0].size()); |
| 730 | 730 |
| 731 std::vector<VASurfaceID> va_surface_ids; | 731 std::vector<VASurfaceID> va_surface_ids; |
| 732 RETURN_AND_NOTIFY_ON_FAILURE( | 732 RETURN_AND_NOTIFY_ON_FAILURE( |
| 733 vaapi_wrapper_->CreateSurfaces(VA_RT_FORMAT_YUV420, requested_pic_size_, | 733 vaapi_wrapper_->CreateSurfaces(VA_RT_FORMAT_YUV420, requested_pic_size_, |
| 734 buffers.size(), &va_surface_ids), | 734 buffers.size(), &va_surface_ids), |
| 735 "Failed creating VA Surfaces", PLATFORM_FAILURE, ); | 735 "Failed creating VA Surfaces", PLATFORM_FAILURE, ); |
| 736 DCHECK_EQ(va_surface_ids.size(), buffers.size()); | 736 DCHECK_EQ(va_surface_ids.size(), buffers.size()); |
| 737 | 737 |
| 738 for (size_t i = 0; i < buffers.size(); ++i) { | 738 for (size_t i = 0; i < buffers.size(); ++i) { |
| 739 DCHECK_LE(1u, buffers[i].texture_ids().size()); |
| 739 DVLOG(2) << "Assigning picture id: " << buffers[i].id() | 740 DVLOG(2) << "Assigning picture id: " << buffers[i].id() |
| 740 << " to texture id: " << buffers[i].texture_id() | 741 << " to texture id: " << buffers[i].texture_ids()[0] |
| 741 << " VASurfaceID: " << va_surface_ids[i]; | 742 << " VASurfaceID: " << va_surface_ids[i]; |
| 742 | 743 |
| 743 linked_ptr<VaapiPicture> picture(VaapiPicture::CreatePicture( | 744 linked_ptr<VaapiPicture> picture(VaapiPicture::CreatePicture( |
| 744 vaapi_wrapper_, make_context_current_, buffers[i].id(), | 745 vaapi_wrapper_, make_context_current_, buffers[i].id(), |
| 745 buffers[i].texture_id(), requested_pic_size_)); | 746 buffers[i].texture_ids()[0], requested_pic_size_)); |
| 746 | 747 |
| 747 scoped_refptr<gl::GLImage> image = picture->GetImageToBind(); | 748 scoped_refptr<gl::GLImage> image = picture->GetImageToBind(); |
| 748 if (image) { | 749 if (image) { |
| 749 bind_image_.Run(buffers[i].internal_texture_id(), | 750 DCHECK_LE(1u, buffers[i].internal_texture_ids().size()); |
| 751 bind_image_.Run(buffers[i].internal_texture_ids()[0], |
| 750 VaapiPicture::GetGLTextureTarget(), image, true); | 752 VaapiPicture::GetGLTextureTarget(), image, true); |
| 751 } | 753 } |
| 752 | 754 |
| 753 RETURN_AND_NOTIFY_ON_FAILURE( | 755 RETURN_AND_NOTIFY_ON_FAILURE( |
| 754 picture.get(), "Failed assigning picture buffer to a texture.", | 756 picture.get(), "Failed assigning picture buffer to a texture.", |
| 755 PLATFORM_FAILURE, ); | 757 PLATFORM_FAILURE, ); |
| 756 | 758 |
| 757 bool inserted = | 759 bool inserted = |
| 758 pictures_.insert(std::make_pair(buffers[i].id(), picture)).second; | 760 pictures_.insert(std::make_pair(buffers[i].id(), picture)).second; |
| 759 DCHECK(inserted); | 761 DCHECK(inserted); |
| (...skipping 984 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1744 return vaapi_pic->dec_surface(); | 1746 return vaapi_pic->dec_surface(); |
| 1745 } | 1747 } |
| 1746 | 1748 |
| 1747 // static | 1749 // static |
| 1748 media::VideoDecodeAccelerator::SupportedProfiles | 1750 media::VideoDecodeAccelerator::SupportedProfiles |
| 1749 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { | 1751 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { |
| 1750 return VaapiWrapper::GetSupportedDecodeProfiles(); | 1752 return VaapiWrapper::GetSupportedDecodeProfiles(); |
| 1751 } | 1753 } |
| 1752 | 1754 |
| 1753 } // namespace content | 1755 } // namespace content |
| OLD | NEW |