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)#ifndef MEDIA_OZONE_MEDIA_OZONE_PLATFORM_H_
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MEDIA_OZONE_MEDIA_OZONE_PLATFORM_H_
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/callback.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "media/base/media_export.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace media {
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class VideoDecodeAccelerator;
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Class for Ozone platform media implementations. Note that the base class for
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Ozone platform is at ui/ozone.
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)//
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Ozone platforms must override this class and implement the virtual
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// GetFooFactoryOzone() methods to provide implementations of the
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// various ozone interfaces.
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MEDIA_EXPORT MediaOzonePlatform {
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  MediaOzonePlatform();
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~MediaOzonePlatform();
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Besides get the global instance, initializes the subsystems/resources
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // necessary for media also.
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static MediaOzonePlatform* GetInstance();
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Factory getters to override in subclasses. The returned objects will be
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // injected into the appropriate layer at startup. Subclasses should not
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // inject these objects themselves. Ownership is retained by
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // MediaOzonePlatform.
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual VideoDecodeAccelerator* CreateVideoDecodeAccelerator(
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const base::Callback<bool(void)>& make_context_current);
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private:
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static void CreateInstance();
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static MediaOzonePlatform* instance_;
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MediaOzonePlatform);
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace media
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif  // MEDIA_OZONE_MEDIA_OZONE_PLATFORM_H_
48