gpt4 book ai didi

ios - GPUImage - 尝试在混合过于频繁时过度释放帧缓冲区

转载 作者:行者123 更新时间:2023-11-28 13:19:21 27 4
gpt4 key购买 nike

使用 GPUImageAlphaBlendFilter,我在 UI 中也有一个 slider ,它允许我更改mix。它工作得很好,我真的可以快速来回移动 slider ,但如果我滑动太快或滑动超过几秒钟,它通常会给我这个错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to overrelease a framebuffer, did you forget to call -useNextFrameForImageCapture before using -imageFromCurrentFramebuffer?

来自GPUImage/framework/Source/GPUImageFramebuffer.m:269中的解锁函数

根据 Brad Larson 的 Framebuffer Article , useNextFrameForImageCapture 不是明确需要的,因为 imageByFilteringImage 已经解决了这个问题。但不知何故,帧缓冲区计数不同步,可能是因为它跟不上快速更新请求。

我想知道我是否做错了什么。有什么想法吗?

下面的代码基本上是这样做的:
1. 首先调用设置过滤器来设置所有内容
2. 当 slider 移动时,applyAndGetCIImage 被 slider 调用。

public class StylePhotoFilter: PhotoFilter {
var blendFilter: GPUImageAlphaBlendFilter!
var originalImage: UIImage!
var styledImage: UIImage!
var styledImageSource: GPUImagePicture!

override func setupFilter() {

// setup the filters
blendFilter = GPUImageAlphaBlendFilter()

// setting up the image to edit
if(uiImage == nil) {
let context = CIContextManager.sharedInstance
let cgiImgRef = context.createCGImage(inputImage, fromRect: inputImage.extent())
originalImage = UIImage(CGImage: cgiImgRef)
} else {
originalImage = uiImage!
}

// apply the style fully
// styledImage = // I created this image earlier, we can assume it works

// add target photo
styledImageSource = GPUImagePicture(image: styledImage)
styledImageSource.addTarget(blendFilter, atTextureLocation: 0)

}

public override func applyAndGetCIImage(sliderVal: Float) -> CIImage! {
// set the mix
blendFilter.mix = sliderVal

// blend it
// blendFilter.useNextFrameForImageCapture() // According to Brad Larson, this is no longer needed, as imageByFilteringImage does this for you
styledImageSource.processImage()
let blendedImage = blendFilter.imageByFilteringImage(originalImage)

return CIImage(image: blendedImage)

}
}

最佳答案

方法 useNextFrameForImageCapture 应该应用于滤镜,但不适用于图片。

blendFilter = GPUImageAlphaBlendFilter()
blendFilter.useNextFrameForImageCapture()

关于ios - GPUImage - 尝试在混合过于频繁时过度释放帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com