diff --git a/src/api/newvideo.h b/src/api/newvideo.h index 7e024df68973eaa83e3a5560a8bffcc242c272f2..5630f1ed0518808d3bde5ba35345578dde2022f9 100644 --- a/src/api/newvideo.h +++ b/src/api/newvideo.h @@ -44,14 +44,14 @@ namespace api namespace video { - constexpr static const char PREVIEW_RENDERER_ID[] = "local"; using Channel = std::string; using Resolution = std::string; using Framerate = float; using FrameratesList = std::vector<Framerate>; -using Capabilities = std::map<Channel, std::map<Resolution, FrameratesList>>; +using ResRateList = std::vector<std::pair<Resolution, FrameratesList>>; +using Capabilities = std::map<Channel, ResRateList>; /** * This class is used by Renderer class to expose video data frame diff --git a/src/avmodel.cpp b/src/avmodel.cpp index b099d403a28be67ce6a21df4cc2c190106e84293..edb159ff0a75cce6c446e9ae645decdb1e5420db 100644 --- a/src/avmodel.cpp +++ b/src/avmodel.cpp @@ -237,16 +237,24 @@ AVModel::getDeviceCapabilities(const std::string& name) const VideoManager::instance().getCapabilities(name.c_str()); video::Capabilities result; for (auto& channel : capabilites.toStdMap()) { - std::map<video::Resolution, video::FrameratesList> channelCapabilities; + video::ResRateList channelCapabilities; for (auto& resToRates : channel.second.toStdMap()) { video::FrameratesList rates; QVectorIterator<QString> itRates(resToRates.second); while (itRates.hasNext()) { rates.emplace_back(itRates.next().toFloat()); } - channelCapabilities.insert( + channelCapabilities.emplace_back( std::make_pair(resToRates.first.toStdString(), rates)); } + // sort by resolution widths + std::sort(channelCapabilities.begin(), channelCapabilities.end(), + [](const std::pair<video::Resolution, video::FrameratesList>& lhs, + const std::pair<video::Resolution, video::FrameratesList>& rhs) { + auto lhsWidth = stoull(lhs.first.substr(0, lhs.first.find("x"))); + auto rhsWidth = stoull(rhs.first.substr(0, rhs.first.find("x"))); + return lhsWidth > rhsWidth; + }); result.insert( std::make_pair(channel.first.toStdString(), channelCapabilities)); }