“CIImage initWithCVPixelBuffer:options:” failed because its pixel format p422 is not supported in iOS 10

喜欢而已 提交于 2019-12-12 13:15:42

问题


In ios10 , I want to get video capture, but get an error "[CIImage initWithCVPixelBuffer:options:] failed because its pixel format p422 is not supported."

My code is this:

func previewImage(handle: (image: UIImage?) -> Void) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                guard let time = self.player?.currentTime() else {
                    return
                }
                guard let pixelBuffer = self.output?.copyPixelBufferForItemTime(time,
                    itemTimeForDisplay: nil) else {
                        return
                }
                let ciImage = CIImage(CVPixelBuffer: pixelBuffer)
                let temporaryContext = CIContext(options: nil)
                let rect = CGRectMake(
                    0,
                    0,
                    CGFloat(CVPixelBufferGetWidth(pixelBuffer)),
                    CGFloat(CVPixelBufferGetHeight(pixelBuffer))
                )

                let image: UIImage?
                if let videoImage = temporaryContext.createCGImage(ciImage, fromRect: rect) {
                    image = UIImage(CGImage: videoImage)
                }
                else {
                    image = nil
                }
                handle(image: image)
            })
        })

    }

get an error like this :

what should I do 😲😲😲😲😲😲😲?


回答1:


Can you show how you're setting up your AVPlayerItemVideoOutput?

It looks like you're using some (unknown to me, p422?) kind of 4:2:2 format instead of a more compatible one like kCVPixelFormatType_420YpCbCr8BiPlanarFullRange or kCVPixelFormatType_32BGRA.



来源:https://stackoverflow.com/questions/39610767/ciimage-initwithcvpixelbufferoptions-failed-because-its-pixel-format-p422-is

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!