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

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, 9 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 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698