From 54d97f6a7ab3a1123272e768d13c1d4ee26d8d14 Mon Sep 17 00:00:00 2001 From: Justin Graham Date: Sun, 30 Oct 2016 15:07:30 -0500 Subject: [PATCH 1/2] Fix framebuffer overrelease error due to async target counts --- framework/Source/Pipeline.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/Pipeline.swift b/framework/Source/Pipeline.swift index 3ddfe9b5..b6f72219 100755 --- a/framework/Source/Pipeline.swift +++ b/framework/Source/Pipeline.swift @@ -92,7 +92,7 @@ class WeakImageConsumer { public class TargetContainer:Sequence { var targets = [WeakImageConsumer]() - var count:Int { get {return targets.count}} + var count:Int { get { return self.dispatchQueue.sync{return targets.count}}} #if !os(Linux) let dispatchQueue = DispatchQueue(label:"com.sunsetlakesoftware.GPUImage.targetContainerQueue", attributes: []) #endif From 0a849b616bfc8d1273f0ce57cb99f836a5efb9cf Mon Sep 17 00:00:00 2001 From: Justin Graham Date: Thu, 1 Dec 2016 21:17:33 -0600 Subject: [PATCH 2/2] image buffer new frame available was creating 1 too many internal buffers --- framework/Source/Operations/ImageBuffer.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/Operations/ImageBuffer.swift b/framework/Source/Operations/ImageBuffer.swift index 6b5b5675..29e1100e 100644 --- a/framework/Source/Operations/ImageBuffer.swift +++ b/framework/Source/Operations/ImageBuffer.swift @@ -10,7 +10,7 @@ public class ImageBuffer: ImageProcessingOperation { public func newFramebufferAvailable(_ framebuffer:Framebuffer, fromSourceIndex:UInt) { bufferedFramebuffers.append(framebuffer) - if (bufferedFramebuffers.count > Int(bufferSize)) { + if (bufferedFramebuffers.count >= Int(bufferSize)) { let releasedFramebuffer = bufferedFramebuffers.removeFirst() updateTargetsWithFramebuffer(releasedFramebuffer) releasedFramebuffer.unlock()