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

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

Issue 1476523005: Verify returned frames from media::VideoFrame::Wrap*() methods (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: halliwell@ comments. Created 4 years, 11 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 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 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 // Create the VideoFrame backed by native textures. 595 // Create the VideoFrame backed by native textures.
596 gfx::Size visible_size = video_frame->visible_rect().size(); 596 gfx::Size visible_size = video_frame->visible_rect().size();
597 switch (output_format_) { 597 switch (output_format_) {
598 case PIXEL_FORMAT_I420: 598 case PIXEL_FORMAT_I420:
599 frame = VideoFrame::WrapYUV420NativeTextures( 599 frame = VideoFrame::WrapYUV420NativeTextures(
600 mailbox_holders[VideoFrame::kYPlane], 600 mailbox_holders[VideoFrame::kYPlane],
601 mailbox_holders[VideoFrame::kUPlane], 601 mailbox_holders[VideoFrame::kUPlane],
602 mailbox_holders[VideoFrame::kVPlane], release_mailbox_callback, 602 mailbox_holders[VideoFrame::kVPlane], release_mailbox_callback,
603 coded_size, gfx::Rect(visible_size), video_frame->natural_size(), 603 coded_size, gfx::Rect(visible_size), video_frame->natural_size(),
604 video_frame->timestamp()); 604 video_frame->timestamp());
605 if (video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY)) 605 if (frame &&
606 video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY))
606 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); 607 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true);
607 break; 608 break;
608 case PIXEL_FORMAT_NV12: 609 case PIXEL_FORMAT_NV12:
609 case PIXEL_FORMAT_UYVY: 610 case PIXEL_FORMAT_UYVY:
610 frame = VideoFrame::WrapNativeTexture( 611 frame = VideoFrame::WrapNativeTexture(
611 output_format_, mailbox_holders[VideoFrame::kYPlane], 612 output_format_, mailbox_holders[VideoFrame::kYPlane],
612 release_mailbox_callback, coded_size, gfx::Rect(visible_size), 613 release_mailbox_callback, coded_size, gfx::Rect(visible_size),
613 video_frame->natural_size(), video_frame->timestamp()); 614 video_frame->natural_size(), video_frame->timestamp());
614 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); 615 if (frame)
616 frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true);
615 break; 617 break;
616 default: 618 default:
617 NOTREACHED(); 619 NOTREACHED();
618 } 620 }
619 621
622 if (!frame) {
623 release_mailbox_callback.Run(gpu::SyncToken());
624 frame_ready_cb.Run(video_frame);
625 return;
626 }
627
620 base::TimeTicks render_time; 628 base::TimeTicks render_time;
621 if (video_frame->metadata()->GetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, 629 if (video_frame->metadata()->GetTimeTicks(VideoFrameMetadata::REFERENCE_TIME,
622 &render_time)) { 630 &render_time)) {
623 frame->metadata()->SetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, 631 frame->metadata()->SetTimeTicks(VideoFrameMetadata::REFERENCE_TIME,
624 render_time); 632 render_time);
625 } 633 }
626 634
627 frame_ready_cb.Run(frame); 635 frame_ready_cb.Run(frame);
628 } 636 }
629 637
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 } 768 }
761 769
762 void GpuMemoryBufferVideoFramePool::MaybeCreateHardwareFrame( 770 void GpuMemoryBufferVideoFramePool::MaybeCreateHardwareFrame(
763 const scoped_refptr<VideoFrame>& video_frame, 771 const scoped_refptr<VideoFrame>& video_frame,
764 const FrameReadyCB& frame_ready_cb) { 772 const FrameReadyCB& frame_ready_cb) {
765 DCHECK(video_frame); 773 DCHECK(video_frame);
766 pool_impl_->CreateHardwareFrame(video_frame, frame_ready_cb); 774 pool_impl_->CreateHardwareFrame(video_frame, frame_ready_cb);
767 } 775 }
768 776
769 } // namespace media 777 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/vpx_video_decoder.cc ('k') | media/video/gpu_memory_buffer_video_frame_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698