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

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: Created 8 years, 2 months 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
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..7ab0c58e6435f708cb6ee558950903e222cbd01f 100644
--- a/media/filters/skcanvas_video_renderer_unittest.cc
+++ b/media/filters/skcanvas_video_renderer_unittest.cc
@@ -27,9 +27,13 @@ void FillCanvas(SkCanvas* canvas, SkColor color) {
// Helper for returning the color of a solid |canvas|.
SkColor GetColor(SkCanvas* canvas) {
+ return GetColorAt(canvas, 0, 0);
+}
+
+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;
}
@@ -38,6 +42,7 @@ class SkCanvasVideoRendererTest : public testing::Test {
public:
enum Color {
kRed,
+ kGreen,
kBlue,
};
@@ -55,6 +60,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 +72,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,14 +88,51 @@ 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(4, 4),
+ gfx::Rect(1, 1, 3, 2),
+ gfx::Rect(3, 2),
+ 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),
- slow_path_canvas_(&slow_path_device_) {
+ slow_path_canvas_(&slow_path_device_),
// Give each frame a unique timestamp.
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().x() * kHeight,
+ cropped_frame().natural_size().y() * kWidth);
+
+ // Fill in the cropped frame's entire data with colors:
+ // Bl Bl R R
+ // Bl Bl R R
Ami GONE FROM CHROMIUM 2012/10/26 02:46:52 s/Bl/B/g :)
sheu 2012/10/26 18:45:23 "Bl" for "black". I realize that the colors in th
+ // G G B B
+ // G G B B
+ // The visible frame (as set by its visible_rect_) has contents:
+ // Bl R R
+ // G B B
+ static const uint8 y_plane[] = {
+ 0, 0, 76, 76,
+ 0, 0, 76, 76,
+ 149, 149, 29, 29,
+ 149, 149, 29, 29,
+ };
+ static const uint8 u_plane[] = {
+ 84, 43,
+ 255, 128,
+ };
+ static const uint8 v_plane[] = {
+ 255, 21,
+ 107, 128,
+ };
+ media::CopyYPlane(y_plane, 4, 4, cropped_frame());
+ media::CopyUPlane(u_plane, 2, 2, cropped_frame());
+ media::CopyVPlane(v_plane, 2, 2, cropped_frame());
}
SkCanvasVideoRendererTest::~SkCanvasVideoRendererTest() {}
@@ -104,6 +148,9 @@ void SkCanvasVideoRendererTest::Paint(VideoFrame* video_frame,
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 +246,42 @@ TEST_F(SkCanvasVideoRendererTest, SlowPaint_SameVideoFrame) {
EXPECT_EQ(SK_ColorRED, GetColor(slow_path_canvas()));
}
+TEST_F(SkCanvasVideoRendererTest, FastPaint_CroppedFrame) {
+ renderer_.Paint(cropped_frame(), fast_path_canvas(), kNaturalRect, 0xFF);
+ // 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.
+ EXPECT_EQ(SK_ColorBLACK, GetColorAt(fast_path_canvas(), kWidth / 3 - 1,
+ kHeight / 2 - 1));
+ EXPECT_EQ(SK_ColorRED, GetColorAt(fast_path_canvas(), kWidth / 3,
+ kHeight / 2 - 1));
+ EXPECT_EQ(SK_ColorGREEN, GetColorAt(fast_path_canvas(), kWidth / 3 - 1,
+ kHeight / 2));
+ EXPECT_EQ(SK_ColorBLUE, GetColorAt(fast_path_canvas(), kWidth / 3,
+ kHeight / 2));
+}
+
+TEST_F(SkCanvasVideoRendererTest, SlowPaint_CroppedFrame) {
+ renderer_.Paint(cropped_frame(), slow_path_canvas(), kNaturalRect, 0xFF);
+ // 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.
+ EXPECT_EQ(SK_ColorBLACK, GetColorAt(slow_path_canvas(), kWidth / 3 - 1,
+ kHeight / 2 - 1));
+ EXPECT_EQ(SK_ColorRED, GetColorAt(slow_path_canvas(), kWidth / 3,
+ kHeight / 2 - 1));
+ EXPECT_EQ(SK_ColorGREEN, GetColorAt(slow_path_canvas(), kWidth / 3 - 1,
+ kHeight / 2));
+ EXPECT_EQ(SK_ColorBLUE, GetColorAt(slow_path_canvas(), kWidth / 3,
+ kHeight / 2));
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698