summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-09 09:14:47 +0000
committerperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-09 09:14:47 +0000
commit5cce3d0868af298aef3fccbba450cd521ec6f42a (patch)
tree302c039e84fc9a1b20a36e8507c23d134bef339f
parent737191ee7839286e6531db2564482d8b4762a631 (diff)
downloadchromium_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.cc2
-rw-r--r--media/base/video_frame.cc5
-rw-r--r--media/base/video_frame.h1
-rw-r--r--media/base/video_frame_pool.cc2
-rw-r--r--media/base/video_frame_unittest.cc5
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);