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

Unified Diff: cc/output/renderer_pixeltest.cc

Issue 222563002: Remove redundant I420-to-YV12 conversion in MediaStreamVideoTrack. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Allow I420 as acceptable default YUV format in ppapi tests. Created 6 years, 9 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
« no previous file with comments | « no previous file | cc/resources/video_resource_updater.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/renderer_pixeltest.cc
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index 585a94c4de80a0c5ed79ba3272cae9878c051def..b431c21746441bb109fe611f9598828e91dc526b 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -8,10 +8,12 @@
#include "cc/quads/draw_quad.h"
#include "cc/quads/picture_draw_quad.h"
#include "cc/quads/texture_draw_quad.h"
+#include "cc/resources/video_resource_updater.h"
#include "cc/test/fake_picture_pile_impl.h"
#include "cc/test/pixel_test.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "gpu/command_buffer/client/gles2_interface.h"
+#include "media/base/video_frame.h"
#include "third_party/skia/include/core/SkBitmapDevice.h"
#include "third_party/skia/include/core/SkImageFilter.h"
#include "third_party/skia/include/core/SkMatrix.h"
@@ -404,69 +406,77 @@ class VideoGLRendererPixelTest : public GLRendererPixelTest {
protected:
scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad(
SharedQuadState* shared_state,
- bool with_alpha,
+ media::VideoFrame::Format format,
bool is_transparent,
const gfx::RectF& tex_coord_rect) {
+ const bool with_alpha = (format == media::VideoFrame::YV12A);
const gfx::Rect rect(this->device_viewport_size_);
- const gfx::Rect uv_rect(
- 0, 0, (rect.width() + 1) / 2, (rect.height() + 1) / 2);
const gfx::Rect opaque_rect(0, 0, 0, 0);
- ResourceProvider::ResourceId y_resource =
- resource_provider_->CreateResource(rect.size(),
- GL_CLAMP_TO_EDGE,
- ResourceProvider::TextureUsageAny,
- LUMINANCE_8);
- ResourceProvider::ResourceId u_resource =
- resource_provider_->CreateResource(uv_rect.size(),
- GL_CLAMP_TO_EDGE,
- ResourceProvider::TextureUsageAny,
- LUMINANCE_8);
- ResourceProvider::ResourceId v_resource =
- resource_provider_->CreateResource(uv_rect.size(),
- GL_CLAMP_TO_EDGE,
- ResourceProvider::TextureUsageAny,
- LUMINANCE_8);
- ResourceProvider::ResourceId a_resource = 0;
- if (with_alpha) {
- a_resource = resource_provider_->CreateResource(
- this->device_viewport_size_,
- GL_CLAMP_TO_EDGE,
- ResourceProvider::TextureUsageAny,
- LUMINANCE_8);
- }
+ scoped_refptr<media::VideoFrame> video_frame =
+ media::VideoFrame::CreateFrame(
+ format, rect.size(), rect, rect.size(), base::TimeDelta());
- const int y_plane_size = rect.size().GetArea();
- const int uv_plane_size = uv_rect.size().GetArea();
- scoped_ptr<uint8_t[]> y_plane(new uint8_t[y_plane_size]);
- scoped_ptr<uint8_t[]> u_plane(new uint8_t[uv_plane_size]);
- scoped_ptr<uint8_t[]> v_plane(new uint8_t[uv_plane_size]);
- scoped_ptr<uint8_t[]> a_plane;
- if (with_alpha)
- a_plane.reset(new uint8_t[y_plane_size]);
// YUV values representing a striped pattern, for validating texture
// coordinates for sampling.
uint8_t y_value = 0;
uint8_t u_value = 0;
uint8_t v_value = 0;
- for (int i = 0; i < y_plane_size; ++i)
- y_plane.get()[i] = (y_value += 1);
- for (int i = 0; i < uv_plane_size; ++i) {
- u_plane.get()[i] = (u_value += 3);
- v_plane.get()[i] = (v_value += 5);
+ for (int i = 0; i < video_frame->rows(media::VideoFrame::kYPlane); ++i) {
+ uint8_t* y_row = video_frame->data(media::VideoFrame::kYPlane) +
+ video_frame->stride(media::VideoFrame::kYPlane) * i;
+ for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kYPlane);
+ ++j) {
+ y_row[j] = (y_value += 1);
+ }
+ }
+ for (int i = 0; i < video_frame->rows(media::VideoFrame::kUPlane); ++i) {
+ uint8_t* u_row = video_frame->data(media::VideoFrame::kUPlane) +
+ video_frame->stride(media::VideoFrame::kUPlane) * i;
+ uint8_t* v_row = video_frame->data(media::VideoFrame::kVPlane) +
+ video_frame->stride(media::VideoFrame::kVPlane) * i;
+ for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane);
+ ++j) {
+ u_row[j] = (u_value += 3);
+ v_row[j] = (v_value += 5);
+ }
}
if (with_alpha)
- memset(a_plane.get(), is_transparent ? 0 : 128, y_plane_size);
-
- resource_provider_->SetPixels(
- y_resource, y_plane.get(), rect, rect, gfx::Vector2d());
- resource_provider_->SetPixels(
- u_resource, u_plane.get(), uv_rect, uv_rect, gfx::Vector2d());
- resource_provider_->SetPixels(
- v_resource, v_plane.get(), uv_rect, uv_rect, gfx::Vector2d());
+ memset(video_frame->data(media::VideoFrame::kAPlane),
+ is_transparent ? 0 : 128,
+ video_frame->stride(media::VideoFrame::kAPlane) *
+ video_frame->rows(media::VideoFrame::kAPlane));
+
+ VideoFrameExternalResources resources =
+ video_resource_updater_->CreateExternalResourcesFromVideoFrame(
+ video_frame);
+
+ EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type);
+ EXPECT_EQ(media::VideoFrame::NumPlanes(format), resources.mailboxes.size());
+ EXPECT_EQ(media::VideoFrame::NumPlanes(format),
+ resources.release_callbacks.size());
+
+ ResourceProvider::ResourceId y_resource =
+ resource_provider_->CreateResourceFromTextureMailbox(
+ resources.mailboxes[media::VideoFrame::kYPlane],
+ SingleReleaseCallback::Create(
+ resources.release_callbacks[media::VideoFrame::kYPlane]));
+ ResourceProvider::ResourceId u_resource =
+ resource_provider_->CreateResourceFromTextureMailbox(
+ resources.mailboxes[media::VideoFrame::kUPlane],
+ SingleReleaseCallback::Create(
+ resources.release_callbacks[media::VideoFrame::kUPlane]));
+ ResourceProvider::ResourceId v_resource =
+ resource_provider_->CreateResourceFromTextureMailbox(
+ resources.mailboxes[media::VideoFrame::kVPlane],
+ SingleReleaseCallback::Create(
+ resources.release_callbacks[media::VideoFrame::kVPlane]));
+ ResourceProvider::ResourceId a_resource = 0;
if (with_alpha) {
- resource_provider_->SetPixels(a_resource, a_plane.get(), rect, rect,
- gfx::Vector2d());
+ a_resource = resource_provider_->CreateResourceFromTextureMailbox(
+ resources.mailboxes[media::VideoFrame::kAPlane],
+ SingleReleaseCallback::Create(
+ resources.release_callbacks[media::VideoFrame::kAPlane]));
}
scoped_ptr<YUVVideoDrawQuad> yuv_quad = YUVVideoDrawQuad::Create();
@@ -481,6 +491,15 @@ class VideoGLRendererPixelTest : public GLRendererPixelTest {
a_resource);
return yuv_quad.Pass();
}
+
+ virtual void SetUp() OVERRIDE {
+ GLRendererPixelTest::SetUp();
+ video_resource_updater_.reset(new VideoResourceUpdater(
+ output_surface_->context_provider().get(), resource_provider_.get()));
+ }
+
+ private:
+ scoped_ptr<VideoResourceUpdater> video_resource_updater_;
};
TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
@@ -492,8 +511,11 @@ TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
scoped_ptr<SharedQuadState> shared_state =
CreateTestSharedQuadState(gfx::Transform(), rect);
- scoped_ptr<YUVVideoDrawQuad> yuv_quad = CreateTestYUVVideoDrawQuad(
- shared_state.get(), false, false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
+ scoped_ptr<YUVVideoDrawQuad> yuv_quad =
+ CreateTestYUVVideoDrawQuad(shared_state.get(),
+ media::VideoFrame::YV12,
+ false,
+ gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
@@ -516,8 +538,12 @@ TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) {
scoped_ptr<SharedQuadState> shared_state =
CreateTestSharedQuadState(gfx::Transform(), rect);
- scoped_ptr<YUVVideoDrawQuad> yuv_quad = CreateTestYUVVideoDrawQuad(
- shared_state.get(), false, false, gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f));
+ // Intentionally sets frame format to I420 for testing coverage.
+ scoped_ptr<YUVVideoDrawQuad> yuv_quad =
+ CreateTestYUVVideoDrawQuad(shared_state.get(),
+ media::VideoFrame::I420,
+ false,
+ gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f));
pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
@@ -540,8 +566,11 @@ TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) {
scoped_ptr<SharedQuadState> shared_state =
CreateTestSharedQuadState(gfx::Transform(), rect);
- scoped_ptr<YUVVideoDrawQuad> yuv_quad = CreateTestYUVVideoDrawQuad(
- shared_state.get(), true, false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
+ scoped_ptr<YUVVideoDrawQuad> yuv_quad =
+ CreateTestYUVVideoDrawQuad(shared_state.get(),
+ media::VideoFrame::YV12A,
+ false,
+ gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
@@ -569,8 +598,11 @@ TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) {
scoped_ptr<SharedQuadState> shared_state =
CreateTestSharedQuadState(gfx::Transform(), rect);
- scoped_ptr<YUVVideoDrawQuad> yuv_quad = CreateTestYUVVideoDrawQuad(
- shared_state.get(), true, true, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
+ scoped_ptr<YUVVideoDrawQuad> yuv_quad =
+ CreateTestYUVVideoDrawQuad(shared_state.get(),
+ media::VideoFrame::YV12A,
+ true,
+ gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
« no previous file with comments | « no previous file | cc/resources/video_resource_updater.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698