浏览代码

filter duplicate resolutions

Palana 12 年之前
父节点
当前提交
e563931e9f
共有 1 个文件被更改,包括 15 次插入2 次删除
  1. 15 2
      obs/settings-basic-video.cpp

+ 15 - 2
obs/settings-basic-video.cpp

@@ -24,6 +24,7 @@
 #include "platform.hpp"
 #include "platform.hpp"
 
 
 #include <sstream>
 #include <sstream>
+#include <unordered_set>
 using namespace std;
 using namespace std;
 
 
 class BasicVideoData : public BasicSettingsData {
 class BasicVideoData : public BasicSettingsData {
@@ -127,6 +128,14 @@ void BasicVideoData::LoadOther()
 	window->rendererList->SetSelection(sel);
 	window->rendererList->SetSelection(sel);
 }
 }
 
 
+namespace
+{
+	uint64_t append_uint32_t(uint64_t first, uint64_t second)
+	{
+		return (first << 32) | second;
+	}
+}
+
 void BasicVideoData::LoadResolutionData()
 void BasicVideoData::LoadResolutionData()
 {
 {
 	window->baseResList->Clear();
 	window->baseResList->Clear();
@@ -136,8 +145,12 @@ void BasicVideoData::LoadResolutionData()
 
 
 	vector<MonitorInfo> monitors;
 	vector<MonitorInfo> monitors;
 	GetMonitors(monitors);
 	GetMonitors(monitors);
-	for (size_t i = 0; i < monitors.size(); i++)
-		AddRes(monitors[i].cx, monitors[i].cy);
+	unordered_set<uint64_t> resolutions;
+	for (size_t i = 0; i < monitors.size(); i++) {
+		uint64_t res = append_uint32_t(monitors[i].cx, monitors[i].cy);
+		if(resolutions.emplace(res).second)
+			AddRes(monitors[i].cx, monitors[i].cy);
+	}
 
 
 	stringstream res;
 	stringstream res;
 	res << cx << "x" << cy;
 	res << cx << "x" << cy;