@@ -19,7 +19,6 @@ namespace SL
19
19
20
20
std::vector<std::thread> m_ThreadHandles;
21
21
std::shared_ptr<std::atomic_bool> TerminateThreadsEvent;
22
-
23
22
public:
24
23
ThreadManager ();
25
24
~ThreadManager ();
@@ -65,10 +64,23 @@ namespace SL
65
64
return true ;
66
65
}
67
66
68
-
67
+ inline bool MonitorsChanged (const std::vector<Monitor>& startmonitors, const std::vector<Monitor>& nowmonitors) {
68
+ if (startmonitors.size () != nowmonitors.size ()) return true ;
69
+ for (size_t i = 0 ; i < startmonitors.size (); i++) {
70
+ if (startmonitors[i].Height != nowmonitors[i].Height ||
71
+ startmonitors[i].Id != nowmonitors[i].Id ||
72
+ startmonitors[i].Index != nowmonitors[i].Index ||
73
+ startmonitors[i].Name != nowmonitors[i].Name ||
74
+ startmonitors[i].OffsetX != nowmonitors[i].OffsetX ||
75
+ startmonitors[i].OffsetY != nowmonitors[i].OffsetY ||
76
+ startmonitors[i].Width != nowmonitors[i].Width ) return true ;
77
+ }
78
+ return false ;
79
+ }
69
80
template <class T , class F > bool TryCaptureMonitor (const F& data, Monitor& monitor)
70
81
{
71
82
T frameprocessor;
83
+ auto startmonitors = GetMonitors ();
72
84
auto ret = frameprocessor.Init (data, monitor);
73
85
if (ret != DUPL_RETURN_SUCCESS) {
74
86
return false ;
@@ -88,7 +100,7 @@ namespace SL
88
100
auto timer = std::atomic_load (&data->Monitor_Capture_Timer );
89
101
timer->start ();
90
102
auto monitors = GetMonitors ();
91
- if (isMonitorInsideBounds (monitors, monitor)) {
103
+ if (isMonitorInsideBounds (monitors, monitor) && ! MonitorsChanged (startmonitors, monitors) ) {
92
104
ret = frameprocessor.ProcessFrame (monitors[Index (monitor)]);
93
105
}
94
106
else {
0 commit comments