MCPcopy Index your code
hub / github.com/Recordscript/recordscript / get_pixelbuffer

Method get_pixelbuffer

libs/scrap/src/dxgi/mod.rs:268–329  ·  view source on GitHub ↗
(&'a mut self, timeout: UINT)

Source from the content-addressed store, hash-verified

266 }
267
268 fn get_pixelbuffer<'a>(&'a mut self, timeout: UINT) -> io::Result<&'a [u8]> {
269 unsafe {
270 // Release last frame.
271 // No error checking needed because we don't care.
272 // None of the errors crash anyway.
273 let result = {
274 if let Some(gdi_capturer) = &self.gdi_capturer {
275 match gdi_capturer.frame(&mut self.gdi_buffer) {
276 Ok(_) => {
277 crate::would_block_if_equal(
278 &mut self.saved_raw_data,
279 &self.gdi_buffer,
280 )?;
281 &self.gdi_buffer
282 }
283 Err(err) => {
284 return Err(io::Error::new(io::ErrorKind::Other, err.to_string()));
285 }
286 }
287 } else {
288 self.unmap();
289 let r = self.load_frame(timeout)?;
290 let rotate = match self.display.rotation() {
291 DXGI_MODE_ROTATION_IDENTITY | DXGI_MODE_ROTATION_UNSPECIFIED => kRotate0,
292 DXGI_MODE_ROTATION_ROTATE90 => kRotate90,
293 DXGI_MODE_ROTATION_ROTATE180 => kRotate180,
294 DXGI_MODE_ROTATION_ROTATE270 => kRotate270,
295 _ => {
296 return Err(io::Error::new(
297 io::ErrorKind::Other,
298 "Unknown rotation".to_string(),
299 ));
300 }
301 };
302 if rotate == kRotate0 {
303 slice::from_raw_parts(r.0, r.1 as usize * self.height)
304 } else {
305 self.rotated.resize(self.width * self.height * 4, 0);
306 crate::common::ARGBRotate(
307 r.0,
308 r.1,
309 self.rotated.as_mut_ptr(),
310 4 * self.width as i32,
311 if rotate == kRotate180 {
312 self.width
313 } else {
314 self.height
315 } as _,
316 if rotate != kRotate180 {
317 self.width
318 } else {
319 self.height
320 } as _,
321 rotate,
322 );
323 &self.rotated[..]
324 }
325 }

Callers 1

frameMethod · 0.80

Calls 6

would_block_if_equalFunction · 0.85
to_stringMethod · 0.80
unmapMethod · 0.80
load_frameMethod · 0.80
rotationMethod · 0.80
frameMethod · 0.45

Tested by

no test coverage detected