Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: content/common/gpu/media/vaapi_video_decode_accelerator.cc

Issue 1751323002: Allow multiple texture ids per picture buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 } 653 }
654 pictures_.clear(); 654 pictures_.clear();
655 655
656 // And ask for a new set as requested. 656 // And ask for a new set as requested.
657 DVLOG(1) << "Requesting " << requested_num_pics_ << " pictures of size: " 657 DVLOG(1) << "Requesting " << requested_num_pics_ << " pictures of size: "
658 << requested_pic_size_.ToString(); 658 << requested_pic_size_.ToString();
659 659
660 message_loop_->PostTask( 660 message_loop_->PostTask(
661 FROM_HERE, 661 FROM_HERE,
662 base::Bind(&Client::ProvidePictureBuffers, client_, requested_num_pics_, 662 base::Bind(&Client::ProvidePictureBuffers, client_, requested_num_pics_,
663 requested_pic_size_, VaapiPicture::GetGLTextureTarget())); 663 1, requested_pic_size_, VaapiPicture::GetGLTextureTarget()));
664 } 664 }
665 665
666 void VaapiVideoDecodeAccelerator::Decode( 666 void VaapiVideoDecodeAccelerator::Decode(
667 const media::BitstreamBuffer& bitstream_buffer) { 667 const media::BitstreamBuffer& bitstream_buffer) {
668 DCHECK_EQ(message_loop_, base::MessageLoop::current()); 668 DCHECK_EQ(message_loop_, base::MessageLoop::current());
669 669
670 TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id", 670 TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id",
671 bitstream_buffer.id()); 671 bitstream_buffer.id());
672 672
673 RETURN_AND_NOTIFY_ON_FAILURE( 673 RETURN_AND_NOTIFY_ON_FAILURE(
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 DCHECK(requested_pic_size_ == buffers[0].size()); 730 DCHECK(requested_pic_size_ == buffers[0].size());
731 731
732 std::vector<VASurfaceID> va_surface_ids; 732 std::vector<VASurfaceID> va_surface_ids;
733 RETURN_AND_NOTIFY_ON_FAILURE( 733 RETURN_AND_NOTIFY_ON_FAILURE(
734 vaapi_wrapper_->CreateSurfaces(VA_RT_FORMAT_YUV420, requested_pic_size_, 734 vaapi_wrapper_->CreateSurfaces(VA_RT_FORMAT_YUV420, requested_pic_size_,
735 buffers.size(), &va_surface_ids), 735 buffers.size(), &va_surface_ids),
736 "Failed creating VA Surfaces", PLATFORM_FAILURE, ); 736 "Failed creating VA Surfaces", PLATFORM_FAILURE, );
737 DCHECK_EQ(va_surface_ids.size(), buffers.size()); 737 DCHECK_EQ(va_surface_ids.size(), buffers.size());
738 738
739 for (size_t i = 0; i < buffers.size(); ++i) { 739 for (size_t i = 0; i < buffers.size(); ++i) {
740 DCHECK_LE(1u, buffers[i].texture_ids().size());
740 DVLOG(2) << "Assigning picture id: " << buffers[i].id() 741 DVLOG(2) << "Assigning picture id: " << buffers[i].id()
741 << " to texture id: " << buffers[i].texture_id() 742 << " to texture id: " << buffers[i].texture_ids()[0]
742 << " VASurfaceID: " << va_surface_ids[i]; 743 << " VASurfaceID: " << va_surface_ids[i];
743 744
744 linked_ptr<VaapiPicture> picture(VaapiPicture::CreatePicture( 745 linked_ptr<VaapiPicture> picture(VaapiPicture::CreatePicture(
745 vaapi_wrapper_, make_context_current_, buffers[i].id(), 746 vaapi_wrapper_, make_context_current_, buffers[i].id(),
746 buffers[i].texture_id(), requested_pic_size_)); 747 buffers[i].texture_ids()[0], requested_pic_size_));
747 748
748 scoped_refptr<gl::GLImage> image = picture->GetImageToBind(); 749 scoped_refptr<gl::GLImage> image = picture->GetImageToBind();
749 if (image) { 750 if (image) {
750 bind_image_.Run(buffers[i].internal_texture_id(), 751 DCHECK_LE(1u, buffers[i].internal_texture_ids().size());
752 bind_image_.Run(buffers[i].internal_texture_ids()[0],
751 VaapiPicture::GetGLTextureTarget(), image); 753 VaapiPicture::GetGLTextureTarget(), image);
752 } 754 }
753 755
754 RETURN_AND_NOTIFY_ON_FAILURE( 756 RETURN_AND_NOTIFY_ON_FAILURE(
755 picture.get(), "Failed assigning picture buffer to a texture.", 757 picture.get(), "Failed assigning picture buffer to a texture.",
756 PLATFORM_FAILURE, ); 758 PLATFORM_FAILURE, );
757 759
758 bool inserted = 760 bool inserted =
759 pictures_.insert(std::make_pair(buffers[i].id(), picture)).second; 761 pictures_.insert(std::make_pair(buffers[i].id(), picture)).second;
760 DCHECK(inserted); 762 DCHECK(inserted);
(...skipping 984 matching lines...) Expand 10 before | Expand all | Expand 10 after
1745 return vaapi_pic->dec_surface(); 1747 return vaapi_pic->dec_surface();
1746 } 1748 }
1747 1749
1748 // static 1750 // static
1749 media::VideoDecodeAccelerator::SupportedProfiles 1751 media::VideoDecodeAccelerator::SupportedProfiles
1750 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { 1752 VaapiVideoDecodeAccelerator::GetSupportedProfiles() {
1751 return VaapiWrapper::GetSupportedDecodeProfiles(); 1753 return VaapiWrapper::GetSupportedDecodeProfiles();
1752 } 1754 }
1753 1755
1754 } // namespace content 1756 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698