diff options
author | perkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-09 09:14:47 +0000 |
---|---|---|
committer | perkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-09 09:14:47 +0000 |
commit | 5cce3d0868af298aef3fccbba450cd521ec6f42a (patch) | |
tree | 302c039e84fc9a1b20a36e8507c23d134bef339f | |
parent | 737191ee7839286e6531db2564482d8b4762a631 (diff) | |
download | chromium_src-5cce3d0868af298aef3fccbba450cd521ec6f42a.zip chromium_src-5cce3d0868af298aef3fccbba450cd521ec6f42a.tar.gz chromium_src-5cce3d0868af298aef3fccbba450cd521ec6f42a.tar.bz2 |
Make sure natural_size is set when a frame is cropped.
If the natural size is not set, the <video> tag will set its properties videoHeight and videoWidth to the original, uncropped width and height.If that is used for deciding the <video> render size- the aspect ratio will be wrong.
This cl allow setting the natural_size as well as the visible_rect when calling media::VideoFrame::WrapVideoFrame.
BUG=349450
R=fischman@chromium.org, tommi@chromium.org
Review URL: https://codereview.chromium.org/189513004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255839 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/renderer/media/media_stream_video_source.cc | 2 | ||||
-rw-r--r-- | media/base/video_frame.cc | 5 | ||||
-rw-r--r-- | media/base/video_frame.h | 1 | ||||
-rw-r--r-- | media/base/video_frame_pool.cc | 2 | ||||
-rw-r--r-- | media/base/video_frame_unittest.cc | 5 |
5 files changed, 10 insertions, 5 deletions
diff --git a/content/renderer/media/media_stream_video_source.cc b/content/renderer/media/media_stream_video_source.cc index a544d5c..fa98014 100644 --- a/content/renderer/media/media_stream_video_source.cc +++ b/content/renderer/media/media_stream_video_source.cc @@ -387,7 +387,7 @@ void MediaStreamVideoSource::DeliverVideoFrame( gfx::Rect rect(horiz_crop, vert_crop, visible_width, visible_height); video_frame = media::VideoFrame::WrapVideoFrame( - frame, rect, base::Bind(&ReleaseOriginalFrame, frame)); + frame, rect, rect.size(), base::Bind(&ReleaseOriginalFrame, frame)); } if ((frame->format() == media::VideoFrame::I420 || diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 7b9a068..64e8989 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc @@ -181,11 +181,12 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvData( scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame( const scoped_refptr<VideoFrame>& frame, const gfx::Rect& visible_rect, + const gfx::Size& natural_size, const base::Closure& no_longer_needed_cb) { DCHECK(frame->visible_rect().Contains(visible_rect)); scoped_refptr<VideoFrame> wrapped_frame(new VideoFrame( - frame->format(), frame->coded_size(), visible_rect, - frame->natural_size(), frame->GetTimestamp(), frame->end_of_stream())); + frame->format(), frame->coded_size(), visible_rect, 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); diff --git a/media/base/video_frame.h b/media/base/video_frame.h index 5684243..0c69627 100644 --- a/media/base/video_frame.h +++ b/media/base/video_frame.h @@ -155,6 +155,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCountedThreadSafe<VideoFrame> { static scoped_refptr<VideoFrame> WrapVideoFrame( const scoped_refptr<VideoFrame>& frame, const gfx::Rect& visible_rect, + const gfx::Size& natural_size, const base::Closure& no_longer_needed_cb); // Creates a frame which indicates end-of-stream. diff --git a/media/base/video_frame_pool.cc b/media/base/video_frame_pool.cc index 952581e..a0f8682 100644 --- a/media/base/video_frame_pool.cc +++ b/media/base/video_frame_pool.cc @@ -86,7 +86,7 @@ scoped_refptr<VideoFrame> VideoFramePool::PoolImpl::CreateFrame( } return VideoFrame::WrapVideoFrame( - frame, frame->visible_rect(), + frame, frame->visible_rect(), frame->natural_size(), base::Bind(&VideoFramePool::PoolImpl::FrameReleased, this, frame)); } diff --git a/media/base/video_frame_unittest.cc b/media/base/video_frame_unittest.cc index 271610d..967d376 100644 --- a/media/base/video_frame_unittest.cc +++ b/media/base/video_frame_unittest.cc @@ -217,8 +217,9 @@ TEST(VideoFrame, WrapVideoFrame) { ASSERT_TRUE(wrapped_frame.get()); gfx::Rect visible_rect(1, 1, 1, 1); + gfx::Size natural_size = visible_rect.size(); frame = media::VideoFrame::WrapVideoFrame( - wrapped_frame, visible_rect, + wrapped_frame, visible_rect, natural_size, base::Bind(&FrameNoLongerNeededCallback, wrapped_frame, &no_longer_needed_triggered)); EXPECT_EQ(wrapped_frame->coded_size(), frame->coded_size()); @@ -226,6 +227,8 @@ TEST(VideoFrame, WrapVideoFrame) { frame->data(media::VideoFrame::kYPlane)); EXPECT_NE(wrapped_frame->visible_rect(), frame->visible_rect()); EXPECT_EQ(visible_rect, frame->visible_rect()); + EXPECT_NE(wrapped_frame->natural_size(), frame->natural_size()); + EXPECT_EQ(natural_size, frame->natural_size()); } EXPECT_FALSE(no_longer_needed_triggered); |