| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/video/gpu_memory_buffer_video_frame_pool.h" | 5 #include "media/video/gpu_memory_buffer_video_frame_pool.h" |
| 6 | 6 |
| 7 #include <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
| 8 #include <GLES2/gl2ext.h> | 8 #include <GLES2/gl2ext.h> |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 #include <stdint.h> | 10 #include <stdint.h> |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 // mailboxes refer to will be used only after all the previous commands posted | 583 // mailboxes refer to will be used only after all the previous commands posted |
| 584 // in the command buffer have been processed. | 584 // in the command buffer have been processed. |
| 585 const GLuint64 fence_sync = gles2->InsertFenceSyncCHROMIUM(); | 585 const GLuint64 fence_sync = gles2->InsertFenceSyncCHROMIUM(); |
| 586 gles2->OrderingBarrierCHROMIUM(); | 586 gles2->OrderingBarrierCHROMIUM(); |
| 587 | 587 |
| 588 gpu::SyncToken sync_token; | 588 gpu::SyncToken sync_token; |
| 589 gles2->GenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); | 589 gles2->GenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); |
| 590 for (size_t i = 0; i < num_planes; i += planes_per_copy) | 590 for (size_t i = 0; i < num_planes; i += planes_per_copy) |
| 591 mailbox_holders[i].sync_token = sync_token; | 591 mailbox_holders[i].sync_token = sync_token; |
| 592 | 592 |
| 593 scoped_refptr<VideoFrame> frame; | |
| 594 | 593 |
| 595 auto release_mailbox_callback = BindToCurrentLoop( | 594 auto release_mailbox_callback = BindToCurrentLoop( |
| 596 base::Bind(&PoolImpl::MailboxHoldersReleased, this, frame_resources)); | 595 base::Bind(&PoolImpl::MailboxHoldersReleased, this, frame_resources)); |
| 597 | 596 |
| 598 // Create the VideoFrame backed by native textures. | 597 // Create the VideoFrame backed by native textures. |
| 599 gfx::Size visible_size = video_frame->visible_rect().size(); | 598 gfx::Size visible_size = video_frame->visible_rect().size(); |
| 600 switch (output_format_) { | 599 scoped_refptr<VideoFrame> frame = VideoFrame::WrapNativeTextures( |
| 601 case PIXEL_FORMAT_I420: | 600 output_format_, mailbox_holders, release_mailbox_callback, coded_size, |
| 602 frame = VideoFrame::WrapYUV420NativeTextures( | 601 gfx::Rect(visible_size), video_frame->natural_size(), |
| 603 mailbox_holders[VideoFrame::kYPlane], | 602 video_frame->timestamp()); |
| 604 mailbox_holders[VideoFrame::kUPlane], | 603 if (frame && |
| 605 mailbox_holders[VideoFrame::kVPlane], release_mailbox_callback, | 604 video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY)) |
| 606 coded_size, gfx::Rect(visible_size), video_frame->natural_size(), | 605 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); |
| 607 video_frame->timestamp()); | |
| 608 if (frame && | |
| 609 video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY)) | |
| 610 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); | |
| 611 break; | |
| 612 case PIXEL_FORMAT_NV12: | |
| 613 case PIXEL_FORMAT_UYVY: | |
| 614 frame = VideoFrame::WrapNativeTexture( | |
| 615 output_format_, mailbox_holders[VideoFrame::kYPlane], | |
| 616 release_mailbox_callback, coded_size, gfx::Rect(visible_size), | |
| 617 video_frame->natural_size(), video_frame->timestamp()); | |
| 618 if (frame) | |
| 619 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); | |
| 620 break; | |
| 621 default: | |
| 622 NOTREACHED(); | |
| 623 } | |
| 624 | 606 |
| 625 if (!frame) { | 607 if (!frame) { |
| 626 release_mailbox_callback.Run(gpu::SyncToken()); | 608 release_mailbox_callback.Run(gpu::SyncToken()); |
| 627 frame_ready_cb.Run(video_frame); | 609 frame_ready_cb.Run(video_frame); |
| 628 return; | 610 return; |
| 629 } | 611 } |
| 630 | 612 |
| 631 base::TimeTicks render_time; | 613 base::TimeTicks render_time; |
| 632 if (video_frame->metadata()->GetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, | 614 if (video_frame->metadata()->GetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, |
| 633 &render_time)) { | 615 &render_time)) { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 } | 750 } |
| 769 | 751 |
| 770 void GpuMemoryBufferVideoFramePool::MaybeCreateHardwareFrame( | 752 void GpuMemoryBufferVideoFramePool::MaybeCreateHardwareFrame( |
| 771 const scoped_refptr<VideoFrame>& video_frame, | 753 const scoped_refptr<VideoFrame>& video_frame, |
| 772 const FrameReadyCB& frame_ready_cb) { | 754 const FrameReadyCB& frame_ready_cb) { |
| 773 DCHECK(video_frame); | 755 DCHECK(video_frame); |
| 774 pool_impl_->CreateHardwareFrame(video_frame, frame_ready_cb); | 756 pool_impl_->CreateHardwareFrame(video_frame, frame_ready_cb); |
| 775 } | 757 } |
| 776 | 758 |
| 777 } // namespace media | 759 } // namespace media |
| OLD | NEW |