xbmc
WinSystemGbm.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "VideoLayerBridge.h"
12 #include "drm/DRMUtils.h"
13 #include "threads/CriticalSection.h"
14 #include "threads/SystemClock.h"
15 #include "windowing/WinSystem.h"
16 
17 #include "platform/linux/input/LibInputHandler.h"
18 
19 #include <utility>
20 
21 #include <gbm.h>
22 
23 class IDispResource;
24 
25 namespace KODI
26 {
27 namespace WINDOWING
28 {
29 namespace GBM
30 {
31 
33 {
34 public:
35  CWinSystemGbm();
36  ~CWinSystemGbm() override = default;
37 
38  const std::string GetName() override { return "gbm"; }
39 
40  bool InitWindowSystem() override;
41  bool DestroyWindowSystem() override;
42 
43  bool ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop) override;
44  bool SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays) override;
45  bool DisplayHardwareScalingEnabled() override;
46  void UpdateDisplayHardwareScaling(const RESOLUTION_INFO& resInfo) override;
47 
48  void FlipPage(bool rendered, bool videoLayer);
49 
50  bool CanDoWindowed() override { return false; }
51  void UpdateResolutions() override;
52 
53  bool UseLimitedColor() override;
54 
55  bool Hide() override;
56  bool Show(bool raise = true) override;
57  void Register(IDispResource* resource) override;
58  void Unregister(IDispResource* resource) override;
59 
60  bool SetHDR(const VideoPicture* videoPicture) override;
61  bool IsHDRDisplay() override;
62 
63  std::shared_ptr<CVideoLayerBridge> GetVideoLayerBridge() const { return m_videoLayerBridge; }
64  void RegisterVideoLayerBridge(std::shared_ptr<CVideoLayerBridge> bridge)
65  {
66  m_videoLayerBridge = std::move(bridge);
67  };
68 
69  CGBMUtils::CGBMDevice* GetGBMDevice() const { return m_GBM->GetDevice(); }
70  std::shared_ptr<CDRMUtils> GetDrm() const { return m_DRM; }
71 
72  std::vector<std::string> GetConnectedOutputs() override;
73 
74 protected:
75  void OnLostDevice();
76 
77  std::unique_ptr<CVideoSync> GetVideoSync(void* clock) override;
78 
79  std::shared_ptr<CDRMUtils> m_DRM;
80  std::unique_ptr<CGBMUtils> m_GBM;
81  std::shared_ptr<CVideoLayerBridge> m_videoLayerBridge;
82 
83  CCriticalSection m_resourceSection;
84  std::vector<IDispResource*> m_resources;
85 
86  bool m_dispReset = false;
87  XbmcThreads::EndTime<> m_dispResetTimer;
88  std::unique_ptr<CLibInputHandler> m_libinput;
89 
90 private:
91  uint32_t m_hdr_blob_id = 0;
92 };
93 
94 }
95 }
96 }
void UpdateDisplayHardwareScaling(const RESOLUTION_INFO &resInfo) override
Definition: WinSystemGbm.cpp:225
Definition: WinSystemGbm.h:32
Definition: WinSystem.h:44
Definition: SystemClock.h:31
bool SetHDR(const VideoPicture *videoPicture) override
Set the HDR metadata.
Definition: WinSystemGbm.cpp:316
Definition: DispResource.h:14
Provide info of a resolution.
Definition: Resolution.h:66
Controller configuration window.
Definition: AudioDecoder.h:18
bool IsHDRDisplay() override
Definition: WinSystemGbm.cpp:432
Definition: DVDVideoCodec.h:36
A wrapper for gbm_device to allow OOP and RAII.
Definition: GBMUtils.h:48