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 "media/gpu/vaapi_video_decode_accelerator.h" | 5 #include "media/gpu/vaapi_video_decode_accelerator.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 // we can finish all pending output callbacks, releasing associated surfaces. | 630 // we can finish all pending output callbacks, releasing associated surfaces. |
631 DVLOG(1) << "Initiating surface set change"; | 631 DVLOG(1) << "Initiating surface set change"; |
632 awaiting_va_surfaces_recycle_ = true; | 632 awaiting_va_surfaces_recycle_ = true; |
633 | 633 |
634 requested_num_pics_ = num_pics; | 634 requested_num_pics_ = num_pics; |
635 requested_pic_size_ = size; | 635 requested_pic_size_ = size; |
636 | 636 |
637 TryFinishSurfaceSetChange(); | 637 TryFinishSurfaceSetChange(); |
638 } | 638 } |
639 | 639 |
640 static VideoPixelFormat BufferFormatToVideoPixelFormat( | |
641 gfx::BufferFormat format) { | |
642 switch (format) { | |
643 case gfx::BufferFormat::BGRA_8888: | |
644 return PIXEL_FORMAT_ARGB; | |
645 | |
646 default: | |
647 LOG(FATAL) << "Add more cases as needed"; | |
648 return PIXEL_FORMAT_UNKNOWN; | |
649 } | |
650 } | |
651 | |
652 void VaapiVideoDecodeAccelerator::TryFinishSurfaceSetChange() { | 640 void VaapiVideoDecodeAccelerator::TryFinishSurfaceSetChange() { |
653 DCHECK_EQ(message_loop_, base::MessageLoop::current()); | 641 DCHECK_EQ(message_loop_, base::MessageLoop::current()); |
654 | 642 |
655 if (!awaiting_va_surfaces_recycle_) | 643 if (!awaiting_va_surfaces_recycle_) |
656 return; | 644 return; |
657 | 645 |
658 if (!pending_output_cbs_.empty() || | 646 if (!pending_output_cbs_.empty() || |
659 pictures_.size() != available_va_surfaces_.size()) { | 647 pictures_.size() != available_va_surfaces_.size()) { |
660 // Either: | 648 // Either: |
661 // 1. Not all pending pending output callbacks have been executed yet. | 649 // 1. Not all pending pending output callbacks have been executed yet. |
(...skipping 19 matching lines...) Expand all Loading... |
681 DVLOG(2) << "Dismissing picture id: " << iter->first; | 669 DVLOG(2) << "Dismissing picture id: " << iter->first; |
682 if (client_) | 670 if (client_) |
683 client_->DismissPictureBuffer(iter->first); | 671 client_->DismissPictureBuffer(iter->first); |
684 } | 672 } |
685 pictures_.clear(); | 673 pictures_.clear(); |
686 | 674 |
687 // And ask for a new set as requested. | 675 // And ask for a new set as requested. |
688 DVLOG(1) << "Requesting " << requested_num_pics_ | 676 DVLOG(1) << "Requesting " << requested_num_pics_ |
689 << " pictures of size: " << requested_pic_size_.ToString(); | 677 << " pictures of size: " << requested_pic_size_.ToString(); |
690 | 678 |
691 VideoPixelFormat format = | |
692 BufferFormatToVideoPixelFormat(kOutputPictureFormat); | |
693 message_loop_->PostTask( | 679 message_loop_->PostTask( |
694 FROM_HERE, base::Bind(&Client::ProvidePictureBuffers, client_, | 680 FROM_HERE, |
695 requested_num_pics_, format, 1, requested_pic_size_, | 681 base::Bind(&Client::ProvidePictureBuffers, client_, requested_num_pics_, |
696 VaapiPicture::GetGLTextureTarget())); | 682 1, requested_pic_size_, VaapiPicture::GetGLTextureTarget())); |
697 } | 683 } |
698 | 684 |
699 void VaapiVideoDecodeAccelerator::Decode( | 685 void VaapiVideoDecodeAccelerator::Decode( |
700 const media::BitstreamBuffer& bitstream_buffer) { | 686 const media::BitstreamBuffer& bitstream_buffer) { |
701 DCHECK_EQ(message_loop_, base::MessageLoop::current()); | 687 DCHECK_EQ(message_loop_, base::MessageLoop::current()); |
702 | 688 |
703 TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id", | 689 TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id", |
704 bitstream_buffer.id()); | 690 bitstream_buffer.id()); |
705 | 691 |
706 if (bitstream_buffer.id() < 0) { | 692 if (bitstream_buffer.id() < 0) { |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 Cleanup(); | 1037 Cleanup(); |
1052 delete this; | 1038 delete this; |
1053 } | 1039 } |
1054 | 1040 |
1055 bool VaapiVideoDecodeAccelerator::TryToSetupDecodeOnSeparateThread( | 1041 bool VaapiVideoDecodeAccelerator::TryToSetupDecodeOnSeparateThread( |
1056 const base::WeakPtr<Client>& decode_client, | 1042 const base::WeakPtr<Client>& decode_client, |
1057 const scoped_refptr<base::SingleThreadTaskRunner>& decode_task_runner) { | 1043 const scoped_refptr<base::SingleThreadTaskRunner>& decode_task_runner) { |
1058 return false; | 1044 return false; |
1059 } | 1045 } |
1060 | 1046 |
| 1047 static VideoPixelFormat BufferFormatToVideoPixelFormat( |
| 1048 gfx::BufferFormat format) { |
| 1049 switch (format) { |
| 1050 case gfx::BufferFormat::BGRA_8888: |
| 1051 return PIXEL_FORMAT_ARGB; |
| 1052 |
| 1053 default: |
| 1054 LOG(FATAL) << "Add more cases as needed"; |
| 1055 return PIXEL_FORMAT_UNKNOWN; |
| 1056 } |
| 1057 } |
| 1058 |
| 1059 VideoPixelFormat VaapiVideoDecodeAccelerator::GetOutputFormat() const { |
| 1060 return BufferFormatToVideoPixelFormat(kOutputPictureFormat); |
| 1061 } |
| 1062 |
1061 bool VaapiVideoDecodeAccelerator::DecodeSurface( | 1063 bool VaapiVideoDecodeAccelerator::DecodeSurface( |
1062 const scoped_refptr<VaapiDecodeSurface>& dec_surface) { | 1064 const scoped_refptr<VaapiDecodeSurface>& dec_surface) { |
1063 if (!vaapi_wrapper_->ExecuteAndDestroyPendingBuffers( | 1065 if (!vaapi_wrapper_->ExecuteAndDestroyPendingBuffers( |
1064 dec_surface->va_surface()->id())) { | 1066 dec_surface->va_surface()->id())) { |
1065 DVLOG(1) << "Failed decoding picture"; | 1067 DVLOG(1) << "Failed decoding picture"; |
1066 return false; | 1068 return false; |
1067 } | 1069 } |
1068 | 1070 |
1069 return true; | 1071 return true; |
1070 } | 1072 } |
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1829 return vaapi_pic->dec_surface(); | 1831 return vaapi_pic->dec_surface(); |
1830 } | 1832 } |
1831 | 1833 |
1832 // static | 1834 // static |
1833 media::VideoDecodeAccelerator::SupportedProfiles | 1835 media::VideoDecodeAccelerator::SupportedProfiles |
1834 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { | 1836 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { |
1835 return VaapiWrapper::GetSupportedDecodeProfiles(); | 1837 return VaapiWrapper::GetSupportedDecodeProfiles(); |
1836 } | 1838 } |
1837 | 1839 |
1838 } // namespace media | 1840 } // namespace media |
OLD | NEW |