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 <QStringList>
9 #include <QRecursiveMutex>
10 #include <QSize>
11 #include <QMap>
12 
13 // MythTV
14 #include "libmyth/mythcontext.h"
15 #include "libmythtv/mythtvexp.h"
16 
17 static constexpr const char* DEINT_QUALITY_NONE { "none" };
18 static constexpr const char* DEINT_QUALITY_LOW { "low" };
19 static constexpr const char* DEINT_QUALITY_MEDIUM { "medium" };
20 static constexpr const char* DEINT_QUALITY_HIGH { "high" };
21 static constexpr const char* DEINT_QUALITY_SHADER { "shader" };
22 static constexpr const char* DEINT_QUALITY_DRIVER { "driver" };
23 static constexpr const char* UPSCALE_DEFAULT { "bilinear" };
24 static constexpr const char* UPSCALE_HQ1 { "bicubic" };
25 
26 static constexpr const char* COND_WIDTH { "cond_width" };
27 static constexpr const char* COND_HEIGHT { "cond_height" };
28 static constexpr const char* COND_RATE { "cond_framerate" };
29 static constexpr const char* COND_CODECS { "cond_codecs" };
30 static constexpr const char* PREF_DEC { "pref_decoder" };
31 static constexpr const char* PREF_CPUS { "pref_max_cpus" };
32 static constexpr const char* PREF_LOOP { "pref_skiploop" };
33 static constexpr const char* PREF_RENDER { "pref_videorenderer" };
34 static constexpr const char* PREF_DEINT1X { "pref_deint0" };
35 static constexpr const char* PREF_DEINT2X { "pref_deint1" };
36 static constexpr const char* PREF_PRIORITY { "pref_priority" };
37 static constexpr const char* PREF_UPSCALE { "pref_upscale" };
38 
39 static 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:
54  MythVideoProfileItem() = default;
55  ~MythVideoProfileItem() = default;
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  private:
79  uint m_profileid { 0 };
80  QMap<QString,QString> m_pref;
81 };
82 
83 class MTV_PUBLIC MythVideoProfile : public QObject
84 {
85  Q_OBJECT
86 
87  signals:
88  void DeinterlacersChanged(const QString& Single, const QString& Double);
89  void UpscalerChanged(const QString& Upscaler);
90 
91  public:
93  ~MythVideoProfile() override = default;
94 
95  void SetInput(QSize Size, float Framerate = 0, const QString &CodecName = QString(),
96  const QStringList &DisallowedDecoders = QStringList());
97  void SetOutput(float Framerate);
98  float GetOutput() const;
99  void SetVideoRenderer(const QString &VideoRenderer);
100  QString GetDecoder() const;
101  bool IsDecoderCompatible(const QString &Decoder) const;
102  uint GetMaxCPUs() const ;
103  bool IsSkipLoopEnabled() const;
104  QString GetVideoRenderer() const;
105  QString toString() const;
106  QString GetSingleRatePreferences() const;
107  QString GetDoubleRatePreferences() const;
108  QString GetUpscaler() const;
109 
110  // Statics
111  static void InitStatics(bool Reinit = false);
112  static const QList<QPair<QString,QString> >& GetDeinterlacers();
113  static QStringList GetDecoders();
114  static QStringList GetDecoderNames();
115  static std::vector<std::pair<QString,QString>> GetUpscalers();
116  static QString GetDecoderName(const QString &Decoder);
117  static QString GetDecoderHelp(const QString &Decoder = QString());
118  static QString GetVideoRendererName(const QString &Renderer);
119  static QString GetDefaultProfileName(const QString &HostName);
120  static void SetDefaultProfileName(const QString &ProfileName, const QString &HostName);
121  static uint GetProfileGroupID(const QString &ProfileName, const QString &HostName);
122  static QStringList GetProfiles(const QString &HostName);
123  static bool DeleteProfileGroup(const QString &GroupName, const QString &HostName);
124  static uint CreateProfileGroup(const QString &ProfileName, const QString &HostName);
125  static void CreateProfile(uint GroupId, uint Priority,
126  const QString& Width, const QString& Height,
127  const QString& Codecs, const QString& Decoder,
128  uint MaxCpus, bool SkipLoop, const QString& VideoRenderer,
129  const QString& Deint1, const QString& Deint2,
130  const QString& Upscale = UPSCALE_DEFAULT);
131  static void CreateProfiles(const QString &HostName);
132  static QStringList GetVideoRenderers(const QString &Decoder);
133  static QString GetVideoRendererHelp(const QString &Renderer);
134  static QString GetPreferredVideoRenderer(const QString &Decoder);
135  static QStringList GetFilteredRenderers(const QString &Decoder, const QStringList &Renderers);
136  static QString GetBestVideoRenderer(const QStringList &Renderers);
137  static std::vector<MythVideoProfileItem> LoadDB(uint GroupId);
138  static bool DeleteDB(uint GroupId, const std::vector<MythVideoProfileItem>& Items);
139  static bool SaveDB(uint GroupId, std::vector<MythVideoProfileItem>& Items);
140 
141  private:
142  std::vector<MythVideoProfileItem>::const_iterator
143  FindMatch(QSize Size, float Framerate, const QString &CodecName,
144  const QStringList& DisallowedDecoders = QStringList());
145  void LoadBestPreferences(QSize Size, float Framerate, const QString &CodecName,
146  const QStringList &DisallowedDecoders = QStringList());
147  QString GetPreference(const QString &Key) const;
148  void SetPreference(const QString &Key, const QString &Value);
149 
150  private:
151  mutable QRecursiveMutex m_lock;
152  QSize m_lastSize { 0, 0 };
153  float m_lastRate { 0.0F };
155  QMap<QString,QString> m_currentPreferences;
156  std::vector<MythVideoProfileItem> m_allowedPreferences;
157 
158  static inline QRecursiveMutex kSafeLock;
159  static inline bool kSafeInitialized = false;
160  static inline QMap<QString,QStringList> kSafeRenderer = {};
161  static inline QMap<QString,QStringList> kSafeRendererGroup = {};
162  static inline QMap<QString,QStringList> kSafeEquivDec = {};
163  static inline QStringList kSafeCustom = {};
164  static inline QMap<QString,uint> kSafeRendererPriority = {};
165  static inline QMap<QString,QString> kDecName = {};
166  static inline QMap<QString,QString> kRendName = {};
167  static inline QStringList kSafeDecoders = {};
168 };
169 
170 #endif
RenderOptions::equiv_decoders
QMap< QString, QStringList > * equiv_decoders
Definition: mythvideoprofile.h:48
MythDate::toString
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:84
PREF_PRIORITY
static constexpr const char * PREF_PRIORITY
Definition: mythvideoprofile.h:36
MythVideoProfileItem
Definition: mythvideoprofile.h:51
MythVideoProfile::m_lastCodecName
QString m_lastCodecName
Definition: mythvideoprofile.h:154
RenderOptions::renderers
QStringList * renderers
Definition: mythvideoprofile.h:43
PREF_LOOP
static constexpr const char * PREF_LOOP
Definition: mythvideoprofile.h:32
DEINT_QUALITY_MEDIUM
static constexpr const char * DEINT_QUALITY_MEDIUM
Definition: mythvideoprofile.h:19
mythtvexp.h
DEINT_QUALITY_HIGH
static constexpr const char * DEINT_QUALITY_HIGH
Definition: mythvideoprofile.h:20
COND_RATE
static constexpr const char * COND_RATE
Definition: mythvideoprofile.h:28
PREF_DEINT2X
static constexpr const char * PREF_DEINT2X
Definition: mythvideoprofile.h:35
COND_WIDTH
static constexpr const char * COND_WIDTH
Definition: mythvideoprofile.h:26
MythVideoProfile
Definition: mythvideoprofile.h:83
RenderOptions::decoders
QStringList * decoders
Definition: mythvideoprofile.h:47
Decoder
Definition: decoder.h:70
RenderOptions
Definition: mythvideoprofile.h:41
MythVideoProfile::m_allowedPreferences
std::vector< MythVideoProfileItem > m_allowedPreferences
Definition: mythvideoprofile.h:156
UPSCALE_HQ1
static constexpr const char * UPSCALE_HQ1
Definition: mythvideoprofile.h:24
MythVideoProfileItem::m_pref
QMap< QString, QString > m_pref
Definition: mythvideoprofile.h:80
PREF_RENDER
static constexpr const char * PREF_RENDER
Definition: mythvideoprofile.h:33
COND_HEIGHT
static constexpr const char * COND_HEIGHT
Definition: mythvideoprofile.h:27
MythVideoProfile::m_currentPreferences
QMap< QString, QString > m_currentPreferences
Definition: mythvideoprofile.h:155
DEINT_QUALITY_DRIVER
static constexpr const char * DEINT_QUALITY_DRIVER
Definition: mythvideoprofile.h:22
RenderOptions::safe_renderers
QMap< QString, QStringList > * safe_renderers
Definition: mythvideoprofile.h:44
COND_CODECS
static constexpr const char * COND_CODECS
Definition: mythvideoprofile.h:29
MythVideoProfile::kSafeLock
static QRecursiveMutex kSafeLock
Definition: mythvideoprofile.h:158
uint
unsigned int uint
Definition: compat.h:81
VIDEO_MAX_CPUS
static constexpr uint VIDEO_MAX_CPUS
Definition: mythvideoprofile.h:39
DEINT_QUALITY_LOW
static constexpr const char * DEINT_QUALITY_LOW
Definition: mythvideoprofile.h:18
UPSCALE_DEFAULT
static constexpr const char * UPSCALE_DEFAULT
Definition: mythvideoprofile.h:23
RenderOptions::render_group
QMap< QString, QStringList > * render_group
Definition: mythvideoprofile.h:45
MythVideoProfile::m_lock
QRecursiveMutex m_lock
Definition: mythvideoprofile.h:151
MTV_PUBLIC
#define MTV_PUBLIC
Definition: mythtvexp.h:15
operator<
bool operator<(const ParentalLevel &lhs, const ParentalLevel &rhs)
Definition: parentalcontrols.cpp:143
PREF_DEINT1X
static constexpr const char * PREF_DEINT1X
Definition: mythvideoprofile.h:34
DEINT_QUALITY_SHADER
static constexpr const char * DEINT_QUALITY_SHADER
Definition: mythvideoprofile.h:21
Clear
#define Clear(a)
Definition: audiooutputopensles.cpp:54
DEINT_QUALITY_NONE
static constexpr const char * DEINT_QUALITY_NONE
Definition: mythvideoprofile.h:17
PREF_DEC
static constexpr const char * PREF_DEC
Definition: mythvideoprofile.h:30
mythcontext.h
PREF_CPUS
static constexpr const char * PREF_CPUS
Definition: mythvideoprofile.h:31
PREF_UPSCALE
static constexpr const char * PREF_UPSCALE
Definition: mythvideoprofile.h:37
Priority
Definition: channelsettings.cpp:216
RenderOptions::priorities
QMap< QString, uint > * priorities
Definition: mythvideoprofile.h:46