summaryrefslogtreecommitdiff
path: root/media/base/video_frame.cc
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2013-07-10 11:40:50 +0100
committerBen Murdoch <benm@google.com>2013-07-10 11:40:50 +0100
commiteb525c5499e34cc9c4b825d6d9e75bb07cc06ace (patch)
treed908ce4bfe1717d2cd53f41327d8b9ba8304355f /media/base/video_frame.cc
parent3c54152607de4272b3da0c146b71dcba8a0e5610 (diff)
downloadchromium_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.cc31
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