static void CVPX_I420(filter_t *p_filter, picture_t *sourcePicture, picture_t *destinationPicture) { VLC_UNUSED(p_filter); picture_sys_t *picsys = sourcePicture->p_sys; if (picsys == NULL) return; if (picsys->pixelBuffer == nil) return; unsigned width = CVPixelBufferGetWidthOfPlane(picsys->pixelBuffer, 0); unsigned height = CVPixelBufferGetHeightOfPlane(picsys->pixelBuffer, 0); if (width == 0 || height == 0) return; uint8_t *pp_plane[2]; size_t pi_pitch[2]; CVPixelBufferLockBaseAddress(picsys->pixelBuffer, kCVPixelBufferLock_ReadOnly); for (int i = 0; i < 2; i++) { pp_plane[i] = CVPixelBufferGetBaseAddressOfPlane(picsys->pixelBuffer, i); pi_pitch[i] = CVPixelBufferGetBytesPerRowOfPlane(picsys->pixelBuffer, i); } CopyFromNv12ToI420(destinationPicture, pp_plane, pi_pitch, height); CVPixelBufferUnlockBaseAddress(picsys->pixelBuffer, kCVPixelBufferLock_ReadOnly); }
static void copy420YpCbCr8Planar(picture_t *p_pic, CVPixelBufferRef buffer, unsigned i_height) { uint8_t *pp_plane[2]; size_t pi_pitch[2]; if (!buffer) return; CVPixelBufferLockBaseAddress(buffer, 0); for (int i = 0; i < 2; i++) { pp_plane[i] = CVPixelBufferGetBaseAddressOfPlane(buffer, i); pi_pitch[i] = CVPixelBufferGetBytesPerRowOfPlane(buffer, i); } CopyFromNv12ToI420(p_pic, pp_plane, pi_pitch, i_height); CVPixelBufferUnlockBaseAddress(buffer, 0); }