Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1149)

Unified Diff: media/filters/skcanvas_video_renderer_unittest.cc

Issue 11269017: Plumb through cropped output size for VideoFrame (Closed) Base URL: https://git.chromium.org/git/chromium/src@git-svn
Patch Set: Found the windows failure, and fixed it. Thanks akalin@ Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/skcanvas_video_renderer.cc ('k') | media/filters/video_frame_generator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/skcanvas_video_renderer_unittest.cc
diff --git a/media/filters/skcanvas_video_renderer_unittest.cc b/media/filters/skcanvas_video_renderer_unittest.cc
index a7ac30c477fb7f4c9d7e27d8eedc2f8470b0f5ac..a50f266c62fe5343d5d9b293f9fe93fdd371008b 100644
--- a/media/filters/skcanvas_video_renderer_unittest.cc
+++ b/media/filters/skcanvas_video_renderer_unittest.cc
@@ -26,18 +26,24 @@ void FillCanvas(SkCanvas* canvas, SkColor color) {
}
// Helper for returning the color of a solid |canvas|.
-SkColor GetColor(SkCanvas* canvas) {
+SkColor GetColorAt(SkCanvas* canvas, int x, int y) {
const SkBitmap& bitmap = canvas->getDevice()->accessBitmap(false);
bitmap.lockPixels();
- SkColor c = bitmap.getColor(0, 0);
+ SkColor c = bitmap.getColor(x, y);
bitmap.unlockPixels();
return c;
}
+SkColor GetColor(SkCanvas* canvas) {
+ return GetColorAt(canvas, 0, 0);
+}
+
class SkCanvasVideoRendererTest : public testing::Test {
public:
enum Color {
+ kNone,
kRed,
+ kGreen,
kBlue,
};
@@ -55,6 +61,7 @@ class SkCanvasVideoRendererTest : public testing::Test {
VideoFrame* natural_frame() { return natural_frame_; }
VideoFrame* larger_frame() { return larger_frame_; }
VideoFrame* smaller_frame() { return smaller_frame_; }
+ VideoFrame* cropped_frame() { return cropped_frame_; }
// Getters for canvases that trigger the various painting paths.
SkCanvas* fast_path_canvas() { return &fast_path_canvas_; }
@@ -66,6 +73,7 @@ class SkCanvasVideoRendererTest : public testing::Test {
scoped_refptr<VideoFrame> natural_frame_;
scoped_refptr<VideoFrame> larger_frame_;
scoped_refptr<VideoFrame> smaller_frame_;
+ scoped_refptr<VideoFrame> cropped_frame_;
SkDevice fast_path_device_;
SkCanvas fast_path_canvas_;
@@ -81,6 +89,12 @@ SkCanvasVideoRendererTest::SkCanvasVideoRendererTest()
gfx::Size(kWidth * 2, kHeight * 2))),
smaller_frame_(VideoFrame::CreateBlackFrame(
gfx::Size(kWidth / 2, kHeight / 2))),
+ cropped_frame_(VideoFrame::CreateFrame(
+ VideoFrame::YV12,
+ gfx::Size(16, 16),
+ gfx::Rect(6, 6, 8, 6),
+ gfx::Size(8, 6),
+ base::TimeDelta::FromMilliseconds(4))),
fast_path_device_(SkBitmap::kARGB_8888_Config, kWidth, kHeight, true),
fast_path_canvas_(&fast_path_device_),
slow_path_device_(SkBitmap::kARGB_8888_Config, kWidth, kHeight, false),
@@ -89,6 +103,86 @@ SkCanvasVideoRendererTest::SkCanvasVideoRendererTest()
natural_frame_->SetTimestamp(base::TimeDelta::FromMilliseconds(1));
larger_frame_->SetTimestamp(base::TimeDelta::FromMilliseconds(2));
smaller_frame_->SetTimestamp(base::TimeDelta::FromMilliseconds(3));
+
+ // Make sure the cropped video frame's aspect ratio matches the output device.
+ // Update cropped_frame_'s crop dimensions if this is not the case.
+ EXPECT_EQ(cropped_frame()->natural_size().width() * kHeight,
+ cropped_frame()->natural_size().height() * kWidth);
+
+ // Fill in the cropped frame's entire data with colors:
+ //
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // Bl Bl Bl Bl Bl Bl Bl Bl R R R R R R R R
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ // G G G G G G G G B B B B B B B B
+ //
+ // The visible crop of the frame (as set by its visible_rect_) has contents:
+ //
+ // Bl Bl R R R R R R
+ // Bl Bl R R R R R R
+ // G G B B B B B B
+ // G G B B B B B B
+ // G G B B B B B B
+ // G G B B B B B B
+ //
+ // Each color region in the cropped frame is on a 2x2 block granularity, to
+ // avoid sharing UV samples between regions.
+
+ static const uint8 cropped_y_plane[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ 149, 149, 149, 149, 149, 149, 149, 149, 29, 29, 29, 29, 29, 29, 29, 29,
+ };
+
+ static const uint8 cropped_u_plane[] = {
+ 128, 128, 128, 128, 84, 84, 84, 84,
+ 128, 128, 128, 128, 84, 84, 84, 84,
+ 128, 128, 128, 128, 84, 84, 84, 84,
+ 128, 128, 128, 128, 84, 84, 84, 84,
+ 43, 43, 43, 43, 255, 255, 255, 255,
+ 43, 43, 43, 43, 255, 255, 255, 255,
+ 43, 43, 43, 43, 255, 255, 255, 255,
+ 43, 43, 43, 43, 255, 255, 255, 255,
+ };
+ static const uint8 cropped_v_plane[] = {
+ 128, 128, 128, 128, 255, 255, 255, 255,
+ 128, 128, 128, 128, 255, 255, 255, 255,
+ 128, 128, 128, 128, 255, 255, 255, 255,
+ 128, 128, 128, 128, 255, 255, 255, 255,
+ 21, 21, 21, 21, 107, 107, 107, 107,
+ 21, 21, 21, 21, 107, 107, 107, 107,
+ 21, 21, 21, 21, 107, 107, 107, 107,
+ 21, 21, 21, 21, 107, 107, 107, 107,
+ };
+
+ media::CopyYPlane(cropped_y_plane, 16, 16, cropped_frame());
+ media::CopyUPlane(cropped_u_plane, 8, 8, cropped_frame());
+ media::CopyVPlane(cropped_v_plane, 8, 8, cropped_frame());
}
SkCanvasVideoRendererTest::~SkCanvasVideoRendererTest() {}
@@ -101,9 +195,14 @@ void SkCanvasVideoRendererTest::Paint(VideoFrame* video_frame,
SkCanvas* canvas,
Color color) {
switch (color) {
+ case kNone:
+ break;
case kRed:
media::FillYUV(video_frame, 76, 84, 255);
break;
+ case kGreen:
+ media::FillYUV(video_frame, 149, 43, 21);
+ break;
case kBlue:
media::FillYUV(video_frame, 29, 255, 107);
break;
@@ -199,4 +298,51 @@ TEST_F(SkCanvasVideoRendererTest, SlowPaint_SameVideoFrame) {
EXPECT_EQ(SK_ColorRED, GetColor(slow_path_canvas()));
}
+TEST_F(SkCanvasVideoRendererTest, FastPaint_CroppedFrame) {
+ Paint(cropped_frame(), fast_path_canvas(), kNone);
+ // Check the corners.
+ EXPECT_EQ(SK_ColorBLACK, GetColorAt(fast_path_canvas(), 0, 0));
+ EXPECT_EQ(SK_ColorRED, GetColorAt(fast_path_canvas(), kWidth - 1, 0));
+ EXPECT_EQ(SK_ColorGREEN, GetColorAt(fast_path_canvas(), 0, kHeight - 1));
+ EXPECT_EQ(SK_ColorBLUE, GetColorAt(fast_path_canvas(), kWidth - 1,
+ kHeight - 1));
+ // Check the interior along the border between color regions. Note that we're
+ // bilinearly upscaling, so we'll need to take care to pick sample points that
+ // are just outside the "zone of resampling".
+ // TODO(sheu): commenting out two checks due to http://crbug.com/158462.
+#if 0
+ EXPECT_EQ(SK_ColorBLACK, GetColorAt(fast_path_canvas(), kWidth * 1 / 8 - 1,
+ kHeight * 1 / 6 - 1));
+#endif
+ EXPECT_EQ(SK_ColorRED, GetColorAt(fast_path_canvas(), kWidth * 3 / 8,
+ kHeight * 1 / 6 - 1));
+#if 0
+ EXPECT_EQ(SK_ColorGREEN, GetColorAt(fast_path_canvas(), kWidth * 1 / 8 - 1,
+ kHeight * 3 / 6));
+#endif
+ EXPECT_EQ(SK_ColorBLUE, GetColorAt(fast_path_canvas(), kWidth * 3 / 8,
+ kHeight * 3 / 6));
+}
+
+TEST_F(SkCanvasVideoRendererTest, SlowPaint_CroppedFrame) {
+ Paint(cropped_frame(), slow_path_canvas(), kNone);
+ // Check the corners.
+ EXPECT_EQ(SK_ColorBLACK, GetColorAt(slow_path_canvas(), 0, 0));
+ EXPECT_EQ(SK_ColorRED, GetColorAt(slow_path_canvas(), kWidth - 1, 0));
+ EXPECT_EQ(SK_ColorGREEN, GetColorAt(slow_path_canvas(), 0, kHeight - 1));
+ EXPECT_EQ(SK_ColorBLUE, GetColorAt(slow_path_canvas(), kWidth - 1,
+ kHeight - 1));
+ // Check the interior along the border between color regions. Note that we're
+ // bilinearly upscaling, so we'll need to take care to pick sample points that
+ // are just outside the "zone of resampling".
+ EXPECT_EQ(SK_ColorBLACK, GetColorAt(slow_path_canvas(), kWidth * 1 / 8 - 1,
+ kHeight * 1 / 6 - 1));
+ EXPECT_EQ(SK_ColorRED, GetColorAt(slow_path_canvas(), kWidth * 3 / 8,
+ kHeight * 1 / 6 - 1));
+ EXPECT_EQ(SK_ColorGREEN, GetColorAt(slow_path_canvas(), kWidth * 1 / 8 - 1,
+ kHeight * 3 / 6));
+ EXPECT_EQ(SK_ColorBLUE, GetColorAt(slow_path_canvas(), kWidth * 3 / 8,
+ kHeight * 3 / 6));
+}
+
} // namespace media
« no previous file with comments | « media/filters/skcanvas_video_renderer.cc ('k') | media/filters/video_frame_generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698