Home | History | Annotate | Download | only in resources
      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