summaryrefslogtreecommitdiffstats
path: root/content/renderer/media
diff options
context:
space:
mode:
authorsheu@chromium.org <sheu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-09 22:01:21 +0000
committersheu@chromium.org <sheu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-09 22:01:21 +0000
commitd418203614fe5aacf0f2e03fe21644218c1e4f10 (patch)
tree86ce1fc632d7c258f677fabbfa435491afdf1083 /content/renderer/media
parent309ad6ae56d328c58867bed9567d2045cfa49673 (diff)
downloadchromium_src-d418203614fe5aacf0f2e03fe21644218c1e4f10.zip
chromium_src-d418203614fe5aacf0f2e03fe21644218c1e4f10.tar.gz
chromium_src-d418203614fe5aacf0f2e03fe21644218c1e4f10.tar.bz2
Plumb through cropped output size for VideoFrame
The video playback path needs to be able to handle cropped video frames, e.g. for HW decoders that output to macroblock-rounded buffer sizes. * Composite only the visible subrect from WebVideoFrame in cc::VideoLayerImpl * Remove some extraneous cropping logic from cc::VideoLayerImpl now that we have exact cropping info. * media::VideoFrame replaces "data_size_" member with "coded_size_", and adds a "visible_rect_" gfx::Rect to indicate the sub-rect of the entire frame that should be visible (after cropping) * Associated changes to various decoder/capture pipelines to plumb this through. TEST=build, run on x86, ARM BUG=155416,140509,chrome-os-partner:15230 Change-Id: I284bc893959db427bc9ae677aed8b07292d228ae Review URL: https://chromiumcodereview.appspot.com/11269017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166988 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media')
-rw-r--r--content/renderer/media/local_video_capture.cc4
-rw-r--r--content/renderer/media/rtc_video_decoder.cc1
-rw-r--r--content/renderer/media/rtc_video_decoder_unittest.cc16
-rw-r--r--content/renderer/media/rtc_video_renderer.cc1
4 files changed, 16 insertions, 6 deletions
diff --git a/content/renderer/media/local_video_capture.cc b/content/renderer/media/local_video_capture.cc
index b08f221..f4bc376 100644
--- a/content/renderer/media/local_video_capture.cc
+++ b/content/renderer/media/local_video_capture.cc
@@ -128,8 +128,8 @@ void LocalVideoCapture::OnBufferReady(
gfx::Size natural_size(buf->width, buf->height);
scoped_refptr<media::VideoFrame> current_frame =
- media::VideoFrame::CreateFrame(media::VideoFrame::YV12,
- natural_size, natural_size,
+ media::VideoFrame::CreateFrame(media::VideoFrame::YV12, natural_size,
+ gfx::Rect(natural_size), natural_size,
buf->timestamp - base::Time());
uint8* buffer = buf->memory_pointer;
diff --git a/content/renderer/media/rtc_video_decoder.cc b/content/renderer/media/rtc_video_decoder.cc
index 2ca2379..d795daf 100644
--- a/content/renderer/media/rtc_video_decoder.cc
+++ b/content/renderer/media/rtc_video_decoder.cc
@@ -147,6 +147,7 @@ void RTCVideoDecoder::RenderFrame(const cricket::VideoFrame* frame) {
scoped_refptr<media::VideoFrame> video_frame =
media::VideoFrame::CreateFrame(media::VideoFrame::YV12,
visible_size_,
+ gfx::Rect(visible_size_),
visible_size_,
timestamp - start_time_);
last_frame_timestamp_ = timestamp;
diff --git a/content/renderer/media/rtc_video_decoder_unittest.cc b/content/renderer/media/rtc_video_decoder_unittest.cc
index c13b255..ab54037 100644
--- a/content/renderer/media/rtc_video_decoder_unittest.cc
+++ b/content/renderer/media/rtc_video_decoder_unittest.cc
@@ -251,12 +251,20 @@ const int RTCVideoDecoderTest::kHeight = 480;
const PipelineStatistics RTCVideoDecoderTest::kStatistics;
MATCHER_P2(HasSize, width, height, "") {
- EXPECT_EQ(arg->data_size().width(), width);
- EXPECT_EQ(arg->data_size().height(), height);
+ EXPECT_EQ(arg->coded_size().width(), width);
+ EXPECT_EQ(arg->coded_size().height(), height);
+ EXPECT_EQ(arg->visible_rect().x(), 0);
+ EXPECT_EQ(arg->visible_rect().y(), 0);
+ EXPECT_EQ(arg->visible_rect().width(), width);
+ EXPECT_EQ(arg->visible_rect().height(), height);
EXPECT_EQ(arg->natural_size().width(), width);
EXPECT_EQ(arg->natural_size().height(), height);
- return (arg->data_size().width() == width) &&
- (arg->data_size().height() == height) &&
+ return (arg->coded_size().width() == width) &&
+ (arg->coded_size().height() == height) &&
+ (arg->visible_rect().x() == 0) &&
+ (arg->visible_rect().y() == 0) &&
+ (arg->visible_rect().width() == width) &&
+ (arg->visible_rect().height() == height) &&
(arg->natural_size().width() == width) &&
(arg->natural_size().height() == height);
}
diff --git a/content/renderer/media/rtc_video_renderer.cc b/content/renderer/media/rtc_video_renderer.cc
index 14444fa..68d1c97 100644
--- a/content/renderer/media/rtc_video_renderer.cc
+++ b/content/renderer/media/rtc_video_renderer.cc
@@ -75,6 +75,7 @@ void RTCVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) {
scoped_refptr<media::VideoFrame> video_frame =
media::VideoFrame::CreateFrame(media::VideoFrame::YV12,
size,
+ gfx::Rect(size),
size,
timestamp);