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

Side by Side Diff: media/video/gpu_memory_buffer_video_frame_pool.cc

Issue 1960563002: Add media::VideoFrame::WrapNativeTextures() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « media/renderers/skcanvas_video_renderer_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « media/renderers/skcanvas_video_renderer_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698