ios – CVPixelBuffer到CIImage总是返回nil

前端之家收集整理的这篇文章主要介绍了ios – CVPixelBuffer到CIImage总是返回nil前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将从AVPlayerItemVideoOutput提取的pixelBuffer转换为CI Image但总是为零.

代码

if([videoOutput_ hasNewPixelBufferForItemTime:player_.internalPlayer.currentItem.currentTime])
{
    CVPixelBufferRef pixelBuffer = [videoOutput_ copyPixelBufferForItemTime:player_.internalPlayer.currentItem.currentTime
                                                         itemTimeForDisplay:nil];

    CIImage *image = [CIImage imageWithCVPixelBuffer:pixelBuffer]; // Always image === nil
    CIFilter *filter = [FilterCollection filterSepiaForImage:image];
    image = filter.outputImage;

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgimg = [context createCGImage:image fromRect:[image extent]];
    [pipLayer_ setContents:(id)CFBridgingRelease(cgimg)];

}

下面是用于创建CIImage(总是导致nil)的pixelBuffer的详细信息:

$0 = 0x09b48720 <CVPixelBuffer 0x9b48720 width=624 height=352 bytesPerRow=2496 pixelFormat=BGRA iosurface=0x0 attributes=<CFBasicHash 0x98241d0 [0x1d244d8]>{type = immutable dict,count = 3,entries =>
    0 : <CFString 0x174cf4 [0x1d244d8]>{contents = "Height"} = <CFNumber 0x9a16e70 [0x1d244d8]>{value = +352,type = kcfNumberSInt32Type}
    1 : <CFString 0x174ce4 [0x1d244d8]>{contents = "Width"} = <CFNumber 0x9a109d0 [0x1d244d8]>{value = +624,type = kcfNumberSInt32Type}
    2 : <CFString 0x1750e4 [0x1d244d8]>{contents = "PixelFormatType"} = <CFArray 0x1090ddd0 [0x1d244d8]>{type = mutable-small,count = 1,values = (
    0 : <CFNumber 0x7a28050 [0x1d244d8]>{value = +1111970369,type = kcfNumberSInt32Type}
)}
}
 propagatedAttachments=<CFBasicHash 0x9b485c0 [0x1d244d8]>{type = mutable dict,count = 6,entries =>
    0 : <CFString 0x174ff4 [0x1d244d8]>{contents = "CVImageBufferTransferFunction"} = <CFString 0x174f84 [0x1d244d8]>{contents = "ITU_R_709_2"}
    2 : <CFString 0x174f74 [0x1d244d8]>{contents = "CVImageBufferYCbCrMatrix"} = <CFString 0x174f94 [0x1d244d8]>{contents = "ITU_R_601_4"}
    9 : <CFString 0x174f14 [0x1d244d8]>{contents = "CVPixelAspectRatio"} = <CFBasicHash 0x9b1bc30 [0x1d244d8]>{type = immutable dict,count = 2,entries =>
    0 : <CFString 0x174f34 [0x1d244d8]>{contents = "VerticalSpacing"} = <CFNumber 0x9b0f730 [0x1d244d8]>{value = +1,type = kcfNumberSInt32Type}
    2 : <CFString 0x174f24 [0x1d244d8]>{contents = "HorizontalSpacing"} = <CFNumber 0x9b0f730 [0x1d244d8]>{value = +1,type = kcfNumberSInt32Type}
}

    10 : <CFString 0x174fb4 [0x1d244d8]>{contents = "CVImageBufferColorPrimaries"} = <CFString 0x174fd4 [0x1d244d8]>{contents = "SMPTE_C"}
    11 : <CFString 0x174e24 [0x1d244d8]>{contents = "QTMovieTime"} = <CFBasicHash 0x7a47940 [0x1d244d8]>{type = immutable dict,entries =>
    0 : <CFString 0x174e44 [0x1d244d8]>{contents = "TimeScale"} = <CFNumber 0x7a443d0 [0x1d244d8]>{value = +90000,type = kcfNumberSInt32Type}
    2 : <CFString 0x174e34 [0x1d244d8]>{contents = "TimeValue"} = <CFNumber 0x7a476e0 [0x1d244d8]>{value = +1047297,type = kcfNumberSInt64Type}
}

    12 : <CFString 0x174eb4 [0x1d244d8]>{contents = "CVFieldCount"} = <CFNumber 0x9b0f730 [0x1d244d8]>{value = +1,type = kcfNumberSInt32Type}
}
 nonPropagatedAttachments=<CFBasicHash 0x9b44b40 [0x1d244d8]>{type = mutable dict,count = 0,entries =>
}
>

解决方法

解决了这个问题 – 我在模拟器上尝试,而它似乎只在设备上支持.
原文链接:/iOS/329652.html

猜你在找的iOS相关文章