Swift: Apply CIFilter to video error - unfinished AVAsynchronousVideoCompositionRequest deallocated

223 Views Asked by At

I'm building a video editor that lets you apply a CIFilter to a video. And it works well.

The only problem I'm facing is that when I dismiss the ViewController I get this error:

Unfinished AVAsynchronousVideoCompositionRequest deallocated - should have called finishWithComposedVideoFrame:, finishWithError: or finishCancelledRequest

This error doesn't make the app crash or slower, but when I try to edit another video the preview in the AVPlayer becomes black.

This is my current code:

var mutableComposition = AVMutableVideoComposition()
let exposureFilter = CIFilter.exposureAdjust()

override func viewDidLoad() {
    updateComposition()
}

func updateComposition() {
    mutableComposition = AVMutableVideoComposition(asset: player.currentItem!.asset, applyingCIFiltersWithHandler: { [weak self] request in
    
        guard let self = self else {
            return
        }
        
        self.exposureFilter.inputImage = request.sourceImage.clampedToExtent()
        self.exposureFilter.ev = 5
        let output = self.exposureFilter.outputImage!.cropped(to: request.sourceImage.extent)

        request.finish(with: output, context: nil)
    })
    
    player.currentItem?.videoComposition = mutableComposition
}

If I remove the [weak self] no error it's printed, but it keeps the ViewController in memory when I dismiss it, creating an unwanted memory leak.

0

There are 0 best solutions below