Copies frame data from a 2D buffer with stride handling.
(&mut self, buffer: &IMF2DBuffer2)
| 315 | |
| 316 | /// Copies frame data from a 2D buffer with stride handling. |
| 317 | unsafe fn copy_from_2d_buffer(&mut self, buffer: &IMF2DBuffer2) -> Result<()> { |
| 318 | let (mut scanline0, mut pitch) = (std::ptr::null_mut(), 0i32); |
| 319 | buffer.Lock2D(&mut scanline0, &mut pitch).map_err(win_err)?; |
| 320 | |
| 321 | let src_pitch = pitch.unsigned_abs() as usize; |
| 322 | let row_bytes = self.line_width_bytes; |
| 323 | |
| 324 | let result = match BufferLayout::from_format(self.format) { |
| 325 | BufferLayout::Planar => self.copy_planar_data(scanline0, pitch, src_pitch, row_bytes), |
| 326 | BufferLayout::Packed => self.copy_packed_data(scanline0, pitch, src_pitch, row_bytes), |
| 327 | }; |
| 328 | |
| 329 | let _ = buffer.Unlock2D(); |
| 330 | result |
| 331 | } |
| 332 | |
| 333 | /// Copies planar format data (NV12, YV12). |
| 334 | unsafe fn copy_planar_data( |
no test coverage detected