MythTV  master
mythdrmdevice.h
Go to the documentation of this file.
1 #ifndef MYTHDRMDEVICE_H
2 #define MYTHDRMDEVICE_H
3 
4 // MythTV
6 #if defined (USING_QTPRIVATEHEADERS)
8 #endif
13 
14 // Std
15 #include <memory>
16 
17 using MythDRMPtr = std::shared_ptr<class MythDRMDevice>;
18 using MythAtomic = std::tuple<uint32_t,uint32_t,uint64_t>;
19 using MythAtomics = std::vector<MythAtomic>;
20 
21 static constexpr const char* DRM_QUIET { "Shush" };
22 
24 {
25  public:
26  static std::tuple<QString,QStringList> GetDeviceList();
27  static MythDRMPtr Create(QScreen *qScreen, const QString& Device = QString(), bool NeedPlanes = true);
28  ~MythDRMDevice();
29 
30  bool Authenticated () const;
31  bool Atomic () const;
32  int GetFD () const;
33  QString GetSerialNumber() const;
34  QScreen* GetScreen () const;
35  QSize GetResolution () const;
36  QSize GetPhysicalSize() const;
37  double GetRefreshRate () const;
38  MythEDID GetEDID () const;
39  DRMCrtc GetCrtc () const;
40  DRMConn GetConnector () const;
41  const DRMModes& GetModes() const;
42  bool CanSwitchModes () const;
43  bool SwitchMode (int ModeIndex);
44 
45 #if defined (USING_QTPRIVATEHEADERS)
46  static inline bool s_mythDRMVideo = qEnvironmentVariableIsSet("MYTHTV_DRM_VIDEO");
47  static inline bool s_planarRequested = false;
48  static inline bool s_planarSetup = false;
49  static inline QString s_mythDRMDevice = qEnvironmentVariable("MYTHTV_DRM_DEVICE");
50  static inline QString s_mythDRMConnector = qEnvironmentVariable("MYTHTV_DRM_CONNECTOR");
51  static inline QString s_mythDRMVideoMode = qEnvironmentVariable("MYTHTV_DRM_MODE");
52  static MythDRMPtr FindDevice(bool NeedPlanes = true);
53  static void SetupDRM (const MythCommandLineParser& CmdLine);
54  DRMPlane GetVideoPlane () const;
55  DRMPlane GetGUIPlane () const;
56  bool QueueAtomics (const MythAtomics& Atomics) const;
57  void DisableVideoPlane();
58  void MainWindowReady ();
59 
60  protected:
61  MythDRMDevice(QString Device, bool NeedPlanes);
62  MythDRMDevice(int Fd, uint32_t CrtcId, uint32_t ConnectorId, bool Atomic);
63 
64  private:
65  void AnalysePlanes ();
66  DRMPlane m_videoPlane { nullptr };
67  DRMPlane m_guiPlane { nullptr };
68 #endif
69 
70  protected:
71  explicit MythDRMDevice(QScreen* qScreen, const QString& Device = QString());
72 
73  private:
74  Q_DISABLE_COPY(MythDRMDevice)
75  bool Open ();
76  void Authenticate ();
77  void Load ();
78  bool Initialise ();
79  QString FindBestDevice ();
80  static bool ConfirmDevice(const QString& Device);
81 
82  bool m_valid { false };
83  QScreen* m_screen { nullptr };
84  QString m_deviceName;
85  bool m_openedDevice { true };
86  int m_fd { -1 };
87  bool m_atomic { false };
88  bool m_authenticated { false };
93  DRMConn m_connector { nullptr };
94  DRMCrtc m_crtc { nullptr };
95  QSize m_resolution;
97  double m_refreshRate { 0.0 };
98  double m_adjustedRefreshRate { 0.0 };
99  QString m_serialNumber;
100  LogLevel_t m_verbose { LOG_INFO };
102 };
103 
104 #endif
MythCommandLineParser
Parent class for defining application command line parsers.
Definition: mythcommandlineparser.h:116
MUI_PUBLIC
#define MUI_PUBLIC
Definition: mythuiexp.h:9
MythDRMDevice::m_resolution
QSize m_resolution
Definition: mythdrmdevice.h:95
MythDRMDevice::m_serialNumber
QString m_serialNumber
Definition: mythdrmdevice.h:99
Device
A device containing images (ie. USB stick, CD, storage group etc)
Definition: imagemanager.cpp:37
DRMCrtc
std::shared_ptr< class MythDRMCrtc > DRMCrtc
Definition: mythdrmcrtc.h:8
DRMCrtcs
std::vector< DRMCrtc > DRMCrtcs
Definition: mythdrmcrtc.h:9
MythDRMDevice::m_crtcs
DRMCrtcs m_crtcs
Definition: mythdrmdevice.h:91
mythdisplay.h
MythDRMPtr
std::shared_ptr< class MythDRMDevice > MythDRMPtr
Definition: mythdrmdevice.h:17
MythDRMDevice
Definition: mythdrmdevice.h:23
mythdrmconnector.h
mythdrmplane.h
DRMPlanes
std::vector< DRMPlane > DRMPlanes
Definition: mythdrmplane.h:51
MythDRMDevice::m_encoders
DRMEncs m_encoders
Definition: mythdrmdevice.h:90
DRMConn
std::shared_ptr< class MythDRMConnector > DRMConn
Definition: mythdrmconnector.h:10
MythDRMDevice::m_edid
MythEDID m_edid
Definition: mythdrmdevice.h:101
MythDRMDevice::m_connectors
DRMConns m_connectors
Definition: mythdrmdevice.h:89
MythAtomic
std::tuple< uint32_t, uint32_t, uint64_t > MythAtomic
Definition: mythdrmdevice.h:18
DRMModes
std::vector< DRMMode > DRMModes
Definition: mythdrmmode.h:8
MythDRMDevice::m_deviceName
QString m_deviceName
Definition: mythdrmdevice.h:84
DRM_QUIET
static constexpr const char * DRM_QUIET
Definition: mythdrmdevice.h:21
MythDRMDevice::m_planes
DRMPlanes m_planes
Definition: mythdrmdevice.h:92
mythdrmcrtc.h
DRMConns
std::vector< DRMConn > DRMConns
Definition: mythdrmconnector.h:11
DRMPlane
std::shared_ptr< class MythDRMPlane > DRMPlane
Definition: mythdrmplane.h:50
MythAtomics
std::vector< MythAtomic > MythAtomics
Definition: mythdrmdevice.h:19
DRMEncs
std::vector< DRMEnc > DRMEncs
Definition: mythdrmencoder.h:8
mythcommandlineparser.h
MythDRMDevice::m_physicalSize
QSize m_physicalSize
Definition: mythdrmdevice.h:96
mythdrmencoder.h
MythEDID
Definition: mythedid.h:21