Home | History | Annotate | Download | only in ozone
      1 // Copyright 2014 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 "media/ozone/media_ozone_platform.h"
      6 
      7 #include "base/debug/trace_event.h"
      8 #include "base/logging.h"
      9 #include "ui/ozone/platform_object.h"
     10 #include "ui/ozone/platform_selection.h"
     11 
     12 namespace media {
     13 
     14 namespace {
     15 
     16 class MediaOzonePlatformStub : public MediaOzonePlatform {
     17  public:
     18   MediaOzonePlatformStub() {}
     19 
     20   virtual ~MediaOzonePlatformStub() {}
     21 
     22  private:
     23   DISALLOW_COPY_AND_ASSIGN(MediaOzonePlatformStub);
     24 };
     25 
     26 }  // namespace
     27 
     28 // The following statics are just convenient stubs, declared by the
     29 // generate_constructor_list.py script. They should be removed once the
     30 // internal Ozone platforms decide to actually implement their media specifics.
     31 MediaOzonePlatform* CreateMediaOzonePlatformCaca() {
     32   return new MediaOzonePlatformStub;
     33 }
     34 
     35 MediaOzonePlatform* CreateMediaOzonePlatformDri() {
     36   return new MediaOzonePlatformStub;
     37 }
     38 
     39 MediaOzonePlatform* CreateMediaOzonePlatformEgltest() {
     40   return new MediaOzonePlatformStub;
     41 }
     42 
     43 MediaOzonePlatform* CreateMediaOzonePlatformGbm() {
     44   return new MediaOzonePlatformStub;
     45 }
     46 
     47 MediaOzonePlatform* CreateMediaOzonePlatformTest() {
     48   return new MediaOzonePlatformStub;
     49 }
     50 
     51 MediaOzonePlatform::MediaOzonePlatform() {
     52   CHECK(!instance_) << "There should only be a single MediaOzonePlatform.";
     53   instance_ = this;
     54 }
     55 
     56 MediaOzonePlatform::~MediaOzonePlatform() {
     57   CHECK_EQ(instance_, this);
     58   instance_ = NULL;
     59 }
     60 
     61 // static
     62 MediaOzonePlatform* MediaOzonePlatform::GetInstance() {
     63   if (!instance_)
     64     CreateInstance();
     65   return instance_;
     66 }
     67 
     68 VideoDecodeAccelerator* MediaOzonePlatform::CreateVideoDecodeAccelerator(
     69     const base::Callback<bool(void)>& make_context_current) {
     70   NOTIMPLEMENTED();
     71   return NULL;
     72 }
     73 
     74 // static
     75 void MediaOzonePlatform::CreateInstance() {
     76   if (instance_)
     77     return;
     78 
     79   TRACE_EVENT1("ozone",
     80                "MediaOzonePlatform::Initialize",
     81                "platform",
     82                ui::GetOzonePlatformName());
     83   scoped_ptr<MediaOzonePlatform> platform =
     84       ui::PlatformObject<MediaOzonePlatform>::Create();
     85 
     86   // TODO(spang): Currently need to leak this object.
     87   CHECK_EQ(instance_, platform.release());
     88 }
     89 
     90 // static
     91 MediaOzonePlatform* MediaOzonePlatform::instance_;
     92 
     93 }  // namespace media
     94