(&'a mut self, timeout: UINT)
| 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 | } |
no test coverage detected