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