Prechádzať zdrojové kódy

fix: 创意模板合成,OJADecoder 可能会重复提那家前景素材问题

Melody 5 rokov pred
rodič
commit
5f7f78514d
1 zmenil súbory, kde vykonal 13 pridanie a 5 odobranie
  1. 13 5
      SuperShow/OJAGPUImageDecoder/OJADecoder.swift

+ 13 - 5
SuperShow/OJAGPUImageDecoder/OJADecoder.swift

@@ -73,6 +73,10 @@ class OJADecoder: NSObject {
 
 
         //初始化的时候要设置一次filter链,因为可能最开始currentInputArray和lastInputArray都是0
         //初始化的时候要设置一次filter链,因为可能最开始currentInputArray和lastInputArray都是0
         self.lastInputArray = self.currentInputArray()
         self.lastInputArray = self.currentInputArray()
+        /// 如果有前景添加前景素材
+        if let fgInput = fgMovieInput {
+            self.lastInputArray.append(fgInput)
+        }
         self.buildChain()
         self.buildChain()
     }
     }
     
     
@@ -83,6 +87,10 @@ class OJADecoder: NSObject {
         
         
         //初始化的时候要设置一次filter链,因为可能最开始currentInputArray和lastInputArray都是0
         //初始化的时候要设置一次filter链,因为可能最开始currentInputArray和lastInputArray都是0
         self.lastInputArray = self.currentInputArray()
         self.lastInputArray = self.currentInputArray()
+        /// 如果有前景添加前景素材
+        if let fgInput = fgMovieInput {
+            self.lastInputArray.append(fgInput)
+        }
         self.buildChain()
         self.buildChain()
     }
     }
     
     
@@ -96,6 +104,10 @@ class OJADecoder: NSObject {
         
         
         //初始化的时候要设置一次filter链,因为可能最开始currentInputArray和lastInputArray都是0
         //初始化的时候要设置一次filter链,因为可能最开始currentInputArray和lastInputArray都是0
         self.lastInputArray = self.currentInputArray()
         self.lastInputArray = self.currentInputArray()
+        /// 如果有前景添加前景素材
+        if let fgInput = fgMovieInput {
+            self.lastInputArray.append(fgInput)
+        }
         self.buildChain()
         self.buildChain()
     }
     }
     
     
@@ -117,6 +129,7 @@ private extension OJADecoder {
     func buildChain() {
     func buildChain() {
         // 牛逼了!!!午睡做梦时想到的,必须要removeAllTargets才行,否则原来的target不会被释放,导致屏幕会闪等诸多问题
         // 牛逼了!!!午睡做梦时想到的,必须要removeAllTargets才行,否则原来的target不会被释放,导致屏幕会闪等诸多问题
         timeMovieInput.removeAllTargets()
         timeMovieInput.removeAllTargets()
+        fgMovieInput?.removeAllTargets()
         for input in lastInputArray {
         for input in lastInputArray {
             input.removeAllTargets()
             input.removeAllTargets()
         }
         }
@@ -135,11 +148,6 @@ private extension OJADecoder {
             blendFilter.setBackgroundColorRed(GLfloat(cr), green: GLfloat(cg), blue: GLfloat(cb), alpha: GLfloat(ca))
             blendFilter.setBackgroundColorRed(GLfloat(cr), green: GLfloat(cg), blue: GLfloat(cb), alpha: GLfloat(ca))
             var tempArray = lastInputArray
             var tempArray = lastInputArray
             
             
-            /// 如果有前景添加前景素材
-            if let fgInput = fgMovieInput {
-                tempArray.append(fgInput)
-            }
-            
             if self.templateDataModel.blend == 1 {
             if self.templateDataModel.blend == 1 {
                 tempArray = tempArray.sorted(by: { (input1, input2) -> Bool in
                 tempArray = tempArray.sorted(by: { (input1, input2) -> Bool in
                     return input1.zIndex < input2.zIndex
                     return input1.zIndex < input2.zIndex