xbmc
DRMAtomic.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 "DRMUtils.h"
12 
13 #include <cstdint>
14 #include <deque>
15 #include <map>
16 #include <memory>
17 
18 namespace KODI
19 {
20 namespace WINDOWING
21 {
22 namespace GBM
23 {
24 
25 class CDRMAtomic : public CDRMUtils
26 {
27 public:
28  CDRMAtomic() = default;
29  ~CDRMAtomic() override = default;
30  void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer) override;
31  bool SetVideoMode(const RESOLUTION_INFO& res, struct gbm_bo* bo) override;
32  bool SetActive(bool active) override;
33  bool InitDrm() override;
34  void DestroyDrm() override;
35  bool AddProperty(CDRMObject* object, const char* name, uint64_t value);
36 
37  bool DisplayHardwareScalingEnabled();
38 
39 private:
40  void DrmAtomicCommit(int fb_id, int flags, bool rendered, bool videoLayer);
41 
42  bool SetScalingFilter(CDRMObject* object, const char* name, const char* type);
43 
44  bool m_need_modeset;
45  bool m_active = true;
46 
47  class CDRMAtomicRequest
48  {
49  public:
50  CDRMAtomicRequest();
51  ~CDRMAtomicRequest() = default;
52  CDRMAtomicRequest(const CDRMAtomicRequest& right) = delete;
53 
54  drmModeAtomicReqPtr Get() const { return m_atomicRequest.get(); }
55 
56  bool AddProperty(CDRMObject* object, const char* name, uint64_t value);
57  void LogAtomicRequest();
58 
59  static void LogAtomicDiff(CDRMAtomicRequest* current, CDRMAtomicRequest* old);
60 
61  private:
62  static void LogAtomicRequest(
63  uint8_t logLevel, std::map<CDRMObject*, std::map<uint32_t, uint64_t>>& atomicRequestItems);
64 
65  std::map<CDRMObject*, std::map<uint32_t, uint64_t>> m_atomicRequestItems;
66 
67  struct DrmModeAtomicReqDeleter
68  {
69  void operator()(drmModeAtomicReqPtr p) const;
70  };
71 
72  std::unique_ptr<drmModeAtomicReq, DrmModeAtomicReqDeleter> m_atomicRequest;
73  };
74 
75  CDRMAtomicRequest* m_req = nullptr;
76  std::deque<std::unique_ptr<CDRMAtomicRequest>> m_atomicRequestQueue;
77 };
78 
79 }
80 }
81 }
Definition: DRMObject.h:25
Provide info of a resolution.
Definition: Resolution.h:66
Controller configuration window.
Definition: AudioDecoder.h:18
bool InitDrm() override
Definition: DRMAtomic.cpp:196
Definition: DRMAtomic.h:25
Definition: DRMUtils.h:37