1 // Copyright 2015 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 #ifndef UI_OZONE_PLATFORM_DRM_GPU_DRM_DISPLAY_H_
6 #define UI_OZONE_PLATFORM_DRM_GPU_DRM_DISPLAY_H_
7 
8 #include <stddef.h>
9 #include <stdint.h>
10 #include <memory>
11 #include <vector>
12 
13 #include "base/macros.h"
14 #include "base/memory/ref_counted.h"
15 #include "ui/display/types/display_constants.h"
16 #include "ui/gfx/geometry/point.h"
17 #include "ui/ozone/common/gpu/ozone_gpu_message_params.h"
18 #include "ui/ozone/platform/drm/common/scoped_drm_types.h"
19 
20 typedef struct _drmModeModeInfo drmModeModeInfo;
21 
22 namespace display {
23 class DisplaySnapshot;
24 struct GammaRampRGBEntry;
25 }
26 
27 namespace ui {
28 
29 class DrmDevice;
30 class HardwareDisplayControllerInfo;
31 class ScreenManager;
32 
33 class DrmDisplay {
34  public:
35   DrmDisplay(ScreenManager* screen_manager,
36              const scoped_refptr<DrmDevice>& drm);
37   ~DrmDisplay();
38 
display_id()39   int64_t display_id() const { return display_id_; }
drm()40   scoped_refptr<DrmDevice> drm() const { return drm_; }
crtc()41   uint32_t crtc() const { return crtc_; }
42   uint32_t connector() const;
modes()43   const std::vector<drmModeModeInfo>& modes() const { return modes_; }
44 
45   std::unique_ptr<display::DisplaySnapshot> Update(
46       HardwareDisplayControllerInfo* info,
47       size_t device_index);
48 
49   bool Configure(const drmModeModeInfo* mode, const gfx::Point& origin);
50   bool GetHDCPState(display::HDCPState* state);
51   bool SetHDCPState(display::HDCPState state);
52   void SetColorMatrix(const std::vector<float>& color_matrix);
53   void SetBackgroundColor(const uint64_t background_color);
54   void SetGammaCorrection(
55       const std::vector<display::GammaRampRGBEntry>& degamma_lut,
56       const std::vector<display::GammaRampRGBEntry>& gamma_lut);
57   void SetPrivacyScreen(bool enabled);
58 
59  private:
60   ScreenManager* screen_manager_;  // Not owned.
61 
62   int64_t display_id_ = -1;
63   const scoped_refptr<DrmDevice> drm_;
64   uint32_t crtc_ = 0;
65   ScopedDrmConnectorPtr connector_;
66   std::vector<drmModeModeInfo> modes_;
67   gfx::Point origin_;
68 
69   DISALLOW_COPY_AND_ASSIGN(DrmDisplay);
70 };
71 
72 }  // namespace ui
73 
74 #endif  // UI_OZONE_PLATFORM_DRM_GPU_DRM_DISPLAY_H_
75