diff options
author | Ben Murdoch <benm@google.com> | 2013-07-10 11:40:50 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2013-07-10 11:40:50 +0100 |
commit | eb525c5499e34cc9c4b825d6d9e75bb07cc06ace (patch) | |
tree | d908ce4bfe1717d2cd53f41327d8b9ba8304355f /media/base/video_frame.cc | |
parent | 3c54152607de4272b3da0c146b71dcba8a0e5610 (diff) | |
download | chromium_org-eb525c5499e34cc9c4b825d6d9e75bb07cc06ace.tar.gz |
Merge from Chromium at DEPS revision r210036
This commit was generated by merge_to_master.py.
Change-Id: Ib0e33a83ad5dfa541481e83d7acfc6970e68f471
Diffstat (limited to 'media/base/video_frame.cc')
-rw-r--r-- | media/base/video_frame.cc | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 046967c8fd..de7440ae20 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc @@ -64,7 +64,7 @@ bool VideoFrame::IsValidConfig(VideoFrame::Format format, // static scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture( - uint32 texture_id, + const scoped_refptr<MailboxHolder>& mailbox_holder, uint32 texture_target, const gfx::Size& coded_size, const gfx::Rect& visible_rect, @@ -74,10 +74,11 @@ scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture( const base::Closure& no_longer_needed_cb) { scoped_refptr<VideoFrame> frame(new VideoFrame( NATIVE_TEXTURE, coded_size, visible_rect, natural_size, timestamp)); - frame->texture_id_ = texture_id; + frame->texture_mailbox_holder_ = mailbox_holder; frame->texture_target_ = texture_target; frame->read_pixels_cb_ = read_pixels_cb; frame->no_longer_needed_cb_ = no_longer_needed_cb; + return frame; } @@ -96,10 +97,12 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvData( int32 y_stride, int32 u_stride, int32 v_stride, uint8* y_data, uint8* u_data, uint8* v_data, base::TimeDelta timestamp, + base::SharedMemoryHandle shm_handle, const base::Closure& no_longer_needed_cb) { DCHECK(format == YV12 || format == YV16 || format == I420) << format; scoped_refptr<VideoFrame> frame(new VideoFrame( format, coded_size, visible_rect, natural_size, timestamp)); + frame->shared_memory_handle_ = shm_handle; frame->strides_[kYPlane] = y_stride; frame->strides_[kUPlane] = u_stride; frame->strides_[kVPlane] = v_stride; @@ -266,8 +269,8 @@ VideoFrame::VideoFrame(VideoFrame::Format format, coded_size_(coded_size), visible_rect_(visible_rect), natural_size_(natural_size), - texture_id_(0), texture_target_(0), + shared_memory_handle_(base::SharedMemory::NULLHandle()), timestamp_(timestamp) { memset(&strides_, 0, sizeof(strides_)); memset(&data_, 0, sizeof(data_)); @@ -340,9 +343,10 @@ uint8* VideoFrame::data(size_t plane) const { return data_[plane]; } -uint32 VideoFrame::texture_id() const { +const scoped_refptr<VideoFrame::MailboxHolder>& VideoFrame::texture_mailbox() + const { DCHECK_EQ(format_, NATIVE_TEXTURE); - return texture_id_; + return texture_mailbox_holder_; } uint32 VideoFrame::texture_target() const { @@ -350,6 +354,10 @@ uint32 VideoFrame::texture_target() const { return texture_target_; } +base::SharedMemoryHandle VideoFrame::shared_memory_handle() const { + return shared_memory_handle_; +} + bool VideoFrame::IsEndOfStream() const { return format_ == VideoFrame::EMPTY; } @@ -366,4 +374,17 @@ void VideoFrame::HashFrameForTesting(base::MD5Context* context) { } } +VideoFrame::MailboxHolder::MailboxHolder( + const gpu::Mailbox& mailbox, + unsigned sync_point, + const TextureNoLongerNeededCallback& release_callback) + : mailbox_(mailbox), + sync_point_(sync_point), + release_callback_(release_callback) {} + +VideoFrame::MailboxHolder::~MailboxHolder() { + if (!release_callback_.is_null()) + release_callback_.Run(sync_point_); +} + } // namespace media |