X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fvideodefinition.cpp;h=360817f99963db0b7033d672b930afab3a8bbf0c;hb=434d88418722fd7717038e44bd74271ca1d92771;hp=12cfd12c1f0c2e914fff892b049e17ae0cefd4e5;hpb=533489a63a9716c645a11a99ca446978b20eedd0;p=minitube diff --git a/src/videodefinition.cpp b/src/videodefinition.cpp index 12cfd12..360817f 100644 --- a/src/videodefinition.cpp +++ b/src/videodefinition.cpp @@ -21,40 +21,56 @@ $END_LICENSE */ #include "videodefinition.h" namespace { -static const int kEmptyDefinitionCode = -1; - -static const VideoDefinition kEmptyDefinition(QString(), kEmptyDefinitionCode); +const int kEmptyDefinitionCode = -1; template const VideoDefinition &getDefinitionForImpl(T matchValue) { const auto &defs = VideoDefinition::getDefinitions(); + + for (auto i = defs.rbegin(); i != defs.rend(); ++i) { + if ((*i.*Getter)() == matchValue) return *i; + } + /* for (const VideoDefinition &def : defs) { if ((def.*Getter)() == matchValue) return def; } + */ + static const VideoDefinition kEmptyDefinition(QString(), kEmptyDefinitionCode); return kEmptyDefinition; } -} +} // namespace -// static const QVector &VideoDefinition::getDefinitions() { + // List preferred equivalent format last: + // algo selects the last format with same name first static const QVector definitions = { - VideoDefinition(QLatin1String("360p"), 18), VideoDefinition(QLatin1String("720p"), 22), - VideoDefinition(QLatin1String("1080p"), 37)}; + VideoDefinition("240p", 242), VideoDefinition("240p", 133), + VideoDefinition("360p", 243), VideoDefinition("360p", 396), + VideoDefinition("360p", 18, true), VideoDefinition("480p", 244), + VideoDefinition("480p", 135), VideoDefinition("720p", 247), + VideoDefinition("720p", 136), VideoDefinition("720p", 22, true), + VideoDefinition("1080p", 248), VideoDefinition("1080p", 137), + VideoDefinition("1440p", 271), VideoDefinition("2160p", 313), + }; return definitions; } -// static +const QVector &VideoDefinition::getDefinitionNames() { + static const QVector names = {"480p", "720p", "1080p", "1440p", "2160p"}; + return names; +} + const VideoDefinition &VideoDefinition::forName(const QString &name) { return getDefinitionForImpl(name); } -// static const VideoDefinition &VideoDefinition::forCode(int code) { return getDefinitionForImpl(code); } -VideoDefinition::VideoDefinition(const QString &name, int code) : m_name(name), m_code(code) {} +VideoDefinition::VideoDefinition(const QString &name, int code, bool hasAudioStream) + : name(name), code(code), hasAudioStream(hasAudioStream) {} bool VideoDefinition::isEmpty() const { - return m_code == kEmptyDefinitionCode && m_name.isEmpty(); + return code == kEmptyDefinitionCode && name.isEmpty(); }