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 "cc/trees/blocking_task_runner.h"
     14 #include "media/base/video_frame.h"
     15 #include "testing/gtest/include/gtest/gtest.h"
     16 
     17 namespace cc {
     18 namespace {
     19 
     20 class VideoResourceUpdaterTest : public testing::Test {
     21  protected:
     22   VideoResourceUpdaterTest() {
     23     scoped_ptr<TestWebGraphicsContext3D> context3d =
     24         TestWebGraphicsContext3D::Create();
     25     context3d_ = context3d.get();
     26 
     27     output_surface3d_ =
     28         FakeOutputSurface::Create3d(context3d.Pass());
     29     CHECK(output_surface3d_->BindToClient(&client_));
     30     shared_bitmap_manager_.reset(new TestSharedBitmapManager());
     31     resource_provider3d_ =
     32         ResourceProvider::Create(output_surface3d_.get(),
     33                                  shared_bitmap_manager_.get(),
     34                                  NULL,
     35                                  0,
     36                                  false,
     37                                  1,
     38                                  false);
     39   }
     40 
     41   scoped_refptr<media::VideoFrame> CreateTestYUVVideoFrame() {
     42     const int kDimension = 10;
     43     gfx::Size size(kDimension, kDimension);
     44     static uint8 y_data[kDimension * kDimension] = { 0 };
     45     static uint8 u_data[kDimension * kDimension / 2] = { 0 };
     46     static uint8 v_data[kDimension * kDimension / 2] = { 0 };
     47 
     48     return media::VideoFrame::WrapExternalYuvData(
     49         media::VideoFrame::YV16,  // format
     50         size,                     // coded_size
     51         gfx::Rect(size),          // visible_rect
     52         size,                     // natural_size
     53         size.width(),             // y_stride
     54         size.width() / 2,         // u_stride
     55         size.width() / 2,         // v_stride
     56         y_data,                   // y_data
     57         u_data,                   // u_data
     58         v_data,                   // v_data
     59         base::TimeDelta(),        // timestamp,
     60         base::Closure());         // no_longer_needed_cb
     61   }
     62 
     63   TestWebGraphicsContext3D* context3d_;
     64   FakeOutputSurfaceClient client_;
     65   scoped_ptr<FakeOutputSurface> output_surface3d_;
     66   scoped_ptr<TestSharedBitmapManager> shared_bitmap_manager_;
     67   scoped_ptr<ResourceProvider> resource_provider3d_;
     68 };
     69 
     70 TEST_F(VideoResourceUpdaterTest, SoftwareFrame) {
     71   VideoResourceUpdater updater(output_surface3d_->context_provider(),
     72                                resource_provider3d_.get());
     73   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame();
     74 
     75   VideoFrameExternalResources resources =
     76       updater.CreateExternalResourcesFromVideoFrame(video_frame);
     77   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type);
     78 }
     79 
     80 }  // namespace
     81 }  // namespace cc
     82