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