MythTV master
mythvideoprofile.h
Go to the documentation of this file.
1#ifndef VIDEO_DISPLAY_PROFILE_H_
2#define VIDEO_DISPLAY_PROFILE_H_
3
4// Std
5#include <vector>
6
7// Qt
8#include <QObject>
9#include <QStringList>
10#include <QRecursiveMutex>
11#include <QSize>
12#include <QMap>
13
14// MythTV
15#include "libmythtv/mythtvexp.h"
16
17static constexpr const char* DEINT_QUALITY_NONE { "none" };
18static constexpr const char* DEINT_QUALITY_LOW { "low" };
19static constexpr const char* DEINT_QUALITY_MEDIUM { "medium" };
20static constexpr const char* DEINT_QUALITY_HIGH { "high" };
21static constexpr const char* DEINT_QUALITY_SHADER { "shader" };
22static constexpr const char* DEINT_QUALITY_DRIVER { "driver" };
23static constexpr const char* UPSCALE_DEFAULT { "bilinear" };
24static constexpr const char* UPSCALE_HQ1 { "bicubic" };
25
26static constexpr const char* COND_WIDTH { "cond_width" };
27static constexpr const char* COND_HEIGHT { "cond_height" };
28static constexpr const char* COND_RATE { "cond_framerate" };
29static constexpr const char* COND_CODECS { "cond_codecs" };
30static constexpr const char* PREF_DEC { "pref_decoder" };
31static constexpr const char* PREF_CPUS { "pref_max_cpus" };
32static constexpr const char* PREF_LOOP { "pref_skiploop" };
33static constexpr const char* PREF_RENDER { "pref_videorenderer" };
34static constexpr const char* PREF_DEINT1X { "pref_deint0" };
35static constexpr const char* PREF_DEINT2X { "pref_deint1" };
36static constexpr const char* PREF_PRIORITY { "pref_priority" };
37static constexpr const char* PREF_UPSCALE { "pref_upscale" };
38
39static constexpr uint VIDEO_MAX_CPUS { 16 };
40
42{
43 QStringList *renderers;
44 QMap<QString,QStringList> *safe_renderers;
45 QMap<QString,QStringList> *render_group;
46 QMap<QString,uint> *priorities;
47 QStringList *decoders;
48 QMap<QString,QStringList> *equiv_decoders;
49};
50
52{
53 public:
56
57 // Sets
58 void Clear();
59 void SetProfileID(uint Id);
60 void Set(const QString &Value, const QString &Data);
61
62 // Gets
63 uint GetProfileID() const;
64 QString Get(const QString &Value) const;
65 uint GetPriority() const;
66 QMap<QString,QString> GetAll() const;
67
68 // Other
69 bool CheckRange(const QString& Key, float Value, bool *Ok = nullptr) const;
70 bool CheckRange(const QString& Key, int Value, bool *Ok = nullptr) const;
71 bool CheckRange(const QString& Key, float FValue, int IValue, bool IsFloat, bool *Ok = nullptr) const;
72 bool IsMatch(QSize Size, float Framerate, const QString &CodecName,
73 const QStringList &DisallowedDecoders = QStringList()) const;
74 auto IsValid() const;
75 bool operator<(const MythVideoProfileItem &Other) const;
76 QString toString() const;
77
78 bool operator==(const MythVideoProfileItem& o) const
79 { return m_profileid == o.m_profileid; }
80 std::strong_ordering operator<=>(const MythVideoProfileItem& o) const
81 { return m_profileid <=> o.m_profileid; }
82
83 private:
84 uint m_profileid { 0 };
85 QMap<QString,QString> m_pref;
86};
87
88class MTV_PUBLIC MythVideoProfile : public QObject
89{
90 Q_OBJECT
91
92 signals:
93 void DeinterlacersChanged(const QString& Single, const QString& Double);
94 void UpscalerChanged(const QString& Upscaler);
95
96 public:
98 ~MythVideoProfile() override = default;
99
100 void SetInput(QSize Size, float Framerate = 0, const QString &CodecName = QString(),
101 const QStringList &DisallowedDecoders = QStringList());
102 void SetOutput(float Framerate);
103 float GetOutput() const;
104 void SetVideoRenderer(const QString &VideoRenderer);
105 QString GetDecoder() const;
106 bool IsDecoderCompatible(const QString &Decoder) const;
107 uint GetMaxCPUs() const ;
108 bool IsSkipLoopEnabled() const;
109 QString GetVideoRenderer() const;
110 QString toString() const;
111 QString GetSingleRatePreferences() const;
112 QString GetDoubleRatePreferences() const;
113 QString GetUpscaler() const;
114
115 // Statics
116 static void InitStatics(bool Reinit = false);
117 static const QList<QPair<QString,QString> >& GetDeinterlacers();
118 static QStringList GetDecoders();
119 static QStringList GetDecoderNames();
120 static std::vector<std::pair<QString,QString>> GetUpscalers();
121 static QString GetDecoderName(const QString &Decoder);
122 static QString GetDecoderHelp(const QString &Decoder = QString());
123 static QString GetVideoRendererName(const QString &Renderer);
124 static QString GetDefaultProfileName(const QString &HostName);
125 static void SetDefaultProfileName(const QString &ProfileName, const QString &HostName);
126 static uint GetProfileGroupID(const QString &ProfileName, const QString &HostName);
127 static QStringList GetProfiles(const QString &HostName);
128 static bool DeleteProfileGroup(const QString &GroupName, const QString &HostName);
129 static uint CreateProfileGroup(const QString &ProfileName, const QString &HostName);
130 static void CreateProfile(uint GroupId, uint Priority,
131 const QString& Width, const QString& Height,
132 const QString& Codecs, const QString& Decoder,
133 uint MaxCpus, bool SkipLoop, const QString& VideoRenderer,
134 const QString& Deint1, const QString& Deint2,
135 const QString& Upscale = UPSCALE_DEFAULT);
136 static void CreateProfiles(const QString &HostName);
137 static QStringList GetVideoRenderers(const QString &Decoder);
138 static QString GetVideoRendererHelp(const QString &Renderer);
139 static QString GetPreferredVideoRenderer(const QString &Decoder);
140 static QStringList GetFilteredRenderers(const QString &Decoder, const QStringList &Renderers);
141 static QString GetBestVideoRenderer(const QStringList &Renderers);
142 static std::vector<MythVideoProfileItem> LoadDB(uint GroupId);
143 static bool DeleteDB(uint GroupId, const std::vector<MythVideoProfileItem>& Items);
144 static bool SaveDB(uint GroupId, std::vector<MythVideoProfileItem>& Items);
145
146 private:
147 std::vector<MythVideoProfileItem>::const_iterator
148 FindMatch(QSize Size, float Framerate, const QString &CodecName,
149 const QStringList& DisallowedDecoders = QStringList());
150 void LoadBestPreferences(QSize Size, float Framerate, const QString &CodecName,
151 const QStringList &DisallowedDecoders = QStringList());
152 QString GetPreference(const QString &Key) const;
153 void SetPreference(const QString &Key, const QString &Value);
154
155 private:
156 mutable QRecursiveMutex m_lock;
157 QSize m_lastSize { 0, 0 };
158 float m_lastRate { 0.0F };
160 QMap<QString,QString> m_currentPreferences;
161 std::vector<MythVideoProfileItem> m_allowedPreferences;
162
163 static inline QRecursiveMutex kSafeLock;
164 static inline bool kSafeInitialized = false;
165 static inline QMap<QString,QStringList> kSafeRenderer = {};
166 static inline QMap<QString,QStringList> kSafeRendererGroup = {};
167 static inline QMap<QString,QStringList> kSafeEquivDec = {};
168 static inline QStringList kSafeCustom = {};
169 static inline QMap<QString,uint> kSafeRendererPriority = {};
170 static inline QMap<QString,QString> kDecName = {};
171 static inline QMap<QString,QString> kRendName = {};
172 static inline QStringList kSafeDecoders = {};
173};
174
175#endif
#define Clear(a)
std::strong_ordering operator<=>(const MythVideoProfileItem &o) const
~MythVideoProfileItem()=default
QMap< QString, QString > m_pref
MythVideoProfileItem()=default
bool operator==(const MythVideoProfileItem &o) const
void UpscalerChanged(const QString &Upscaler)
static QRecursiveMutex kSafeLock
QMap< QString, QString > m_currentPreferences
QRecursiveMutex m_lock
~MythVideoProfile() override=default
void DeinterlacersChanged(const QString &Single, const QString &Double)
std::vector< MythVideoProfileItem > m_allowedPreferences
unsigned int uint
Definition: compat.h:60
static XRROutputInfo * GetOutput(XRRScreenResources *Resources, MythXDisplay *mDisplay, QScreen *qScreen, RROutput *Output=nullptr)
#define MTV_PUBLIC
Definition: mythtvexp.h:8
static constexpr const char * PREF_DEC
static constexpr const char * PREF_DEINT1X
static constexpr const char * DEINT_QUALITY_MEDIUM
static constexpr const char * DEINT_QUALITY_HIGH
static constexpr const char * DEINT_QUALITY_SHADER
static constexpr const char * PREF_LOOP
static constexpr const char * DEINT_QUALITY_LOW
static constexpr const char * PREF_PRIORITY
static constexpr const char * PREF_UPSCALE
static constexpr const char * COND_RATE
static constexpr const char * COND_CODECS
static constexpr const char * PREF_CPUS
static constexpr const char * DEINT_QUALITY_NONE
static constexpr const char * COND_HEIGHT
static constexpr const char * PREF_RENDER
static constexpr const char * PREF_DEINT2X
static constexpr uint VIDEO_MAX_CPUS
static constexpr const char * UPSCALE_DEFAULT
static constexpr const char * DEINT_QUALITY_DRIVER
static constexpr const char * COND_WIDTH
static constexpr const char * UPSCALE_HQ1
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:93
bool operator<(const ParentalLevel &lhs, const ParentalLevel &rhs)
QStringList * decoders
QStringList * renderers
QMap< QString, QStringList > * equiv_decoders
QMap< QString, QStringList > * safe_renderers
QMap< QString, uint > * priorities
QMap< QString, QStringList > * render_group