1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "cc/resources/video_resource_updater.h" 6 7 #include "base/memory/shared_memory.h" 8 #include "cc/resources/resource_provider.h" 9 #include "cc/test/fake_output_surface.h" 10 #include "cc/test/fake_output_surface_client.h" 11 #include "cc/test/test_shared_bitmap_manager.h" 12 #include "cc/test/test_web_graphics_context_3d.h" 13 #include "media/base/video_frame.h" 14 #include "testing/gtest/include/gtest/gtest.h" 15 16 namespace cc { 17 namespace { 18 19 class VideoResourceUpdaterTest : public testing::Test { 20 protected: 21 VideoResourceUpdaterTest() { 22 scoped_ptr<TestWebGraphicsContext3D> context3d = 23 TestWebGraphicsContext3D::Create(); 24 context3d_ = context3d.get(); 25 26 output_surface3d_ = 27 FakeOutputSurface::Create3d(context3d.Pass()); 28 CHECK(output_surface3d_->BindToClient(&client_)); 29 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); 30 resource_provider3d_ = ResourceProvider::Create( 31 output_surface3d_.get(), shared_bitmap_manager_.get(), 0, false, 1, 32 false); 33 } 34 35 scoped_refptr<media::VideoFrame> CreateTestYUVVideoFrame() { 36 const int kDimension = 10; 37 gfx::Size size(kDimension, kDimension); 38 static uint8 y_data[kDimension * kDimension] = { 0 }; 39 static uint8 u_data[kDimension * kDimension / 2] = { 0 }; 40 static uint8 v_data[kDimension * kDimension / 2] = { 0 }; 41 42 return media::VideoFrame::WrapExternalYuvData( 43 media::VideoFrame::YV16, // format 44 size, // coded_size 45 gfx::Rect(size), // visible_rect 46 size, // natural_size 47 size.width(), // y_stride 48 size.width() / 2, // u_stride 49 size.width() / 2, // v_stride 50 y_data, // y_data 51 u_data, // u_data 52 v_data, // v_data 53 base::TimeDelta(), // timestamp, 54 base::Closure()); // no_longer_needed_cb 55 } 56 57 TestWebGraphicsContext3D* context3d_; 58 FakeOutputSurfaceClient client_; 59 scoped_ptr<FakeOutputSurface> output_surface3d_; 60 scoped_ptr<TestSharedBitmapManager> shared_bitmap_manager_; 61 scoped_ptr<ResourceProvider> resource_provider3d_; 62 }; 63 64 TEST_F(VideoResourceUpdaterTest, SoftwareFrame) { 65 VideoResourceUpdater updater(output_surface3d_->context_provider().get(), 66 resource_provider3d_.get()); 67 scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); 68 69 VideoFrameExternalResources resources = 70 updater.CreateExternalResourcesFromVideoFrame(video_frame); 71 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); 72 } 73 74 } // namespace 75 } // namespace cc 76