@@ -90,9 +90,12 @@ namespace Screen_Capture
90
90
}
91
91
92
92
DUPL_RETURN X11FrameProcessor::ProcessFrame (const Monitor& curentmonitorinfo)
93
- {
93
+ {
94
94
auto Ret = DUPL_RETURN_SUCCESS;
95
-
95
+ ImageRect ret;
96
+ ret.left = ret.top = 0 ;
97
+ ret.right = Width (SelectedMonitor);
98
+ ret.bottom = Height (SelectedMonitor);
96
99
if (!XShmGetImage (SelectedDisplay,
97
100
RootWindow (SelectedDisplay, DefaultScreen (SelectedDisplay)),
98
101
Image,
@@ -102,30 +105,12 @@ namespace Screen_Capture
102
105
return DUPL_RETURN_ERROR_EXPECTED;
103
106
}
104
107
105
- ImageRect ret = {0 };
106
- ret.left = 0 ;
107
- ret.top = 0 ;
108
- ret.bottom = Height (SelectedMonitor);
109
- ret.right = Width (SelectedMonitor);
110
- auto rowstride = PixelStride * Width (SelectedMonitor);
111
- auto buf = reinterpret_cast <unsigned char *>(Image->data );
112
- auto bytesperrow = PixelStride * ret.right * ret.bottom ;
113
- auto startbuf = buf + ((OffsetX (SelectedMonitor) - OffsetX (curentmonitorinfo) )*PixelStride);// advance to the start of this image
114
- if (Data->ScreenCaptureData .OnNewFrame && !Data->ScreenCaptureData .OnFrameChanged ) {
115
-
116
- auto wholeimg = Create (ret, PixelStride, static_cast <int >(bytesperrow) - rowstride, startbuf);
108
+ if (Data->ScreenCaptureData .OnNewFrame && !Data->ScreenCaptureData .OnFrameChanged ) {
109
+
110
+ auto wholeimg = Create (ret, PixelStride, 0 , reinterpret_cast <unsigned char *>(Image->data ));
117
111
Data->ScreenCaptureData .OnNewFrame (wholeimg, SelectedMonitor);
118
- }
119
- else {
120
- auto startdst = NewImageBuffer.get ();
121
- if (rowstride == static_cast <int >(bytesperrow)) { // no need for multiple calls, there is no padding here
122
- memcpy (startdst, buf, rowstride * Height (SelectedMonitor));
123
- }
124
- else {
125
- for (auto i = 0 ; i < Height (SelectedMonitor); i++) {
126
- memcpy (startdst + (i * rowstride), (startbuf + (i * bytesperrow)) , rowstride);
127
- }
128
- }
112
+ } else {
113
+ memcpy (NewImageBuffer.get (), Image->data , PixelStride * ret.right * ret.bottom );
129
114
ProcessCapture (Data->ScreenCaptureData , *this , SelectedMonitor, ret);
130
115
}
131
116
return Ret;
0 commit comments