Sfoglia il codice sorgente

创意视频合成内存优化

zhongbaojian 5 anni fa
parent
commit
c0e04b88f2

+ 16 - 9
SuperShow/OJAGPUImageDecoder/OJADecoder.swift

@@ -229,11 +229,10 @@ extension OJADecoder {
                         // 这里统一采用coverBuffer的时间轴,否则会出现assetWriter不能写入帧的问题(因为之前时间点上已经写入过了)
                         // 参考https://stackoverflow.com/questions/34424252/unknown-underlying-osstatus-error-16364-when-using-avassetwriter
                         let sampleBufferTime: CMTime = CMSampleBufferGetOutputPresentationTimeStamp(coverBuffer)
-                        
-                        
-                        //这里有一个重大问题!!!!
-                        //这里有一个重大问题!!!!
-                        //这里有一个重大问题!!!!
+
+                        // 这里有一个重大问题!!!!
+                        // 这里有一个重大问题!!!!
+                        // 这里有一个重大问题!!!!
                         /*
                          因为这里图片和视频都是一帧一帧来处理的,而blendFilter当图片和视频blend时,
                          都是以第一个输入的视频的时间轴为准的,
@@ -242,12 +241,20 @@ extension OJADecoder {
                          这个问题只有在图片后面接了其他filter之后会出现
                          因为接了filter之后,filter的outputFrame就不是图片的outputFrame了
                          */
-                        for input in self.lastInputArray {
-                            input.processFrame(atSampleTime: sampleBufferTime)
+                        for input in lastInputArray {
+                            autoreleasepool {
+                                if let mMovieInput = input as? OJAMovieFrameInput {
+                                    if let inputBuffer = mMovieInput.readVideoSampleBuffer() {
+                                        mMovieInput.processFrame(atSampleTime: sampleBufferTime, frameBuffer: inputBuffer)
+                                    }
+                                } else {
+                                    input.processFrame(atSampleTime: sampleBufferTime)
+                                }
+                            }
                         }
-                        
+
                         /// 读取 fg 和 fgMask 素材,并且上传纹理
-                        if let fgMovieInput = self.fgMovieInput as? OJAAlphaMovieFrameInput{
+                        if let fgMovieInput = self.fgMovieInput as? OJAAlphaMovieFrameInput {
                             if let fgBufferTemp = fgMovieInput.readCoverFrameBuffer(),
                                 let fgMaskBufferTemp = fgMovieInput.readMaskFrameBuffer() {
                                 fgMovieInput.processFrame(atSampleTime: sampleBufferTime, coverBuffer: fgBufferTemp, maskBuffer: fgMaskBufferTemp)

+ 1 - 0
SuperShow/UI/ResourcePicker/WSSResourcePickerController.swift

@@ -385,6 +385,7 @@ class WSSResourcePickerController: MTViewController {
                     imageDatas.removeFirst()
                     if imageDatas.count == 0 {
                         hideSVPHud()
+                        self?.mediaTool.releaseObjs()
                         self?.toNextStep()
 
                     } else {