diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-12-18 16:25:09 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-12-18 16:25:09 +0000 |
commit | a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7 (patch) | |
tree | dafc1c6417406a7fbd422ad0bb890e96909ef564 /media/base/video_frame.cc | |
parent | d5f893c0bc79db3066bb5ae5d3d972ba1be7dd5f (diff) | |
download | chromium_org-a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7.tar.gz |
Merge from Chromium at DEPS revision 240154
This commit was generated by merge_to_master.py.
Change-Id: I8f2ba858cf0e7f413dddedc2ae91dc37f7136c2e
Diffstat (limited to 'media/base/video_frame.cc')
-rw-r--r-- | media/base/video_frame.cc | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 3541e6efa4..2593bf3349 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc @@ -32,6 +32,7 @@ scoped_refptr<VideoFrame> VideoFrame::CreateFrame( case VideoFrame::YV12A: case VideoFrame::YV16: case VideoFrame::I420: + case VideoFrame::YV12J: frame->AllocateYUV(); break; default: @@ -59,6 +60,8 @@ std::string VideoFrame::FormatToString(VideoFrame::Format format) { #endif case VideoFrame::YV12A: return "YV12A"; + case VideoFrame::YV12J: + return "YV12J"; case VideoFrame::HISTOGRAM_MAX: return "HISTOGRAM_MAX"; } @@ -88,7 +91,7 @@ bool VideoFrame::IsValidConfig(VideoFrame::Format format, // static scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture( - const scoped_refptr<MailboxHolder>& mailbox_holder, + scoped_ptr<MailboxHolder> mailbox_holder, uint32 texture_target, const gfx::Size& coded_size, const gfx::Rect& visible_rect, @@ -102,7 +105,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture( natural_size, timestamp, false)); - frame->texture_mailbox_holder_ = mailbox_holder; + frame->texture_mailbox_holder_ = mailbox_holder.Pass(); frame->texture_target_ = texture_target; frame->read_pixels_cb_ = read_pixels_cb; frame->no_longer_needed_cb_ = no_longer_needed_cb; @@ -178,6 +181,23 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvData( } // static +scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame( + const scoped_refptr<VideoFrame>& frame, + const base::Closure& no_longer_needed_cb) { + scoped_refptr<VideoFrame> wrapped_frame(new VideoFrame( + frame->format(), frame->coded_size(), frame->visible_rect(), + frame->natural_size(), frame->GetTimestamp(), frame->end_of_stream())); + + for (size_t i = 0; i < NumPlanes(frame->format()); ++i) { + wrapped_frame->strides_[i] = frame->stride(i); + wrapped_frame->data_[i] = frame->data(i); + } + + wrapped_frame->no_longer_needed_cb_ = no_longer_needed_cb; + return wrapped_frame; +} + +// static scoped_refptr<VideoFrame> VideoFrame::CreateEOSFrame() { return new VideoFrame(VideoFrame::UNKNOWN, gfx::Size(), @@ -236,6 +256,7 @@ size_t VideoFrame::NumPlanes(Format format) { case VideoFrame::YV12: case VideoFrame::YV16: case VideoFrame::I420: + case VideoFrame::YV12J: return 3; case VideoFrame::YV12A: return 4; @@ -269,6 +290,7 @@ size_t VideoFrame::PlaneAllocationSize(Format format, RoundUp(coded_size.width(), 2) * RoundUp(coded_size.height(), 2); switch (format) { case VideoFrame::YV12: + case VideoFrame::YV12J: case VideoFrame::I420: { switch (plane) { case VideoFrame::kYPlane: @@ -324,7 +346,8 @@ static void ReleaseData(uint8* data) { void VideoFrame::AllocateYUV() { DCHECK(format_ == VideoFrame::YV12 || format_ == VideoFrame::YV16 || - format_ == VideoFrame::YV12A || format_ == VideoFrame::I420); + format_ == VideoFrame::YV12A || format_ == VideoFrame::I420 || + format_ == VideoFrame::YV12J); // Align Y rows at least at 16 byte boundaries. The stride for both // YV12 and YV16 is 1/2 of the stride of Y. For YV12, every row of bytes for // U and V applies to two rows of Y (one byte of UV for 4 bytes of Y), so in @@ -419,6 +442,7 @@ int VideoFrame::row_bytes(size_t plane) const { case YV12: case YV16: case I420: + case YV12J: if (plane == kYPlane) return width; return RoundUp(width, 2) / 2; @@ -463,10 +487,9 @@ uint8* VideoFrame::data(size_t plane) const { return data_[plane]; } -const scoped_refptr<VideoFrame::MailboxHolder>& VideoFrame::texture_mailbox() - const { +VideoFrame::MailboxHolder* VideoFrame::texture_mailbox() const { DCHECK_EQ(format_, NATIVE_TEXTURE); - return texture_mailbox_holder_; + return texture_mailbox_holder_.get(); } uint32 VideoFrame::texture_target() const { |