Forráskód Böngészése

1,mStickers 可能为空时 CRASH 问题 2, 支线程处理耗时操作

jsonwang 3 éve
szülő
commit
a1034ec8fa

+ 35 - 27
BFFramework/Classes/Stuckpoint/ViewModel/PQGPUImagePlayerView.swift

@@ -385,10 +385,8 @@ public class PQGPUImagePlayerView: UIView {
             guard let strongSelf = self else { return }
 
             FilterLog(message: " movie.currentTime.seconds 进度\(movie.currentTime.seconds)")
-//            self?.createFiltersQueue.async {
-                self?.changeFilter(currTime: movie.currentTime.seconds)
-//            }
-
+            self?.changeFilter(currTime: movie.currentTime.seconds)
+            
             self?.progress?(currTime, duration, prgressValue)
 
             DispatchQueue.main.async {
@@ -454,17 +452,19 @@ public class PQGPUImagePlayerView: UIView {
                 }
 
             }
+            
+            
+            for (index, filter) in cacheFilters.enumerated() {
+                FilterLog(message: " 初始化 config create currentSticker timelinein \(String(describing: filter.stickerInfo?.timelineIn)) timelineout \(String(describing: filter.stickerInfo?.timelineOut))  in :\(String(describing: filter.stickerInfo?.model_in)) out \(String(describing: filter.stickerInfo?.out))  index\(index)")
+            }
+            
+            movie?.removeAllTargets()
+            let showFilter: PQBaseFilter = cacheFilters.first!
+            movie?.addTarget(showFilter, atTargetIndex: 0)
+            showFilter.addTarget(renderView, atTargetIndex: 0)
         }
 
-        
-        for (index, filter) in cacheFilters.enumerated() {
-            FilterLog(message: " 初始化 config create currentSticker timelinein \(String(describing: filter.stickerInfo?.timelineIn)) timelineout \(String(describing: filter.stickerInfo?.timelineOut))  in :\(String(describing: filter.stickerInfo?.model_in)) out \(String(describing: filter.stickerInfo?.out))  index\(index)")
-        }
-        
-        movie?.removeAllTargets()
-        let showFilter: PQBaseFilter = cacheFilters.first!
-        movie?.addTarget(showFilter, atTargetIndex: 0)
-        showFilter.addTarget(renderView, atTargetIndex: 0)
+   
 
   
     }
@@ -549,26 +549,34 @@ public class PQGPUImagePlayerView: UIView {
                     FilterLog(message: "数据转换有问题 跳转")
                     return
                 }
-                let blurStickerModel: PQEditVisionTrackMaterialsModel? = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: json!)
-                blurStickerModel?.canvasFillType = stickerContentMode.aspectFillStr.rawValue
-                let showGaussianFitler:PQBaseFilter = PQImageFilter(sticker: blurStickerModel!)
-                
-                let iosb:GaussianBlur = GaussianBlur.init()
-                iosb.blurRadiusInPixels = 20
-                showGaussianFitler.addTarget(iosb)
-                
-                movie?.addTarget(showGaussianFitler, atTargetIndex: 0)
+                self.createFiltersQueue.async {
+                    let blurStickerModel: PQEditVisionTrackMaterialsModel? = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: json!)
+                    blurStickerModel?.canvasFillType = stickerContentMode.aspectFillStr.rawValue
+                    let showGaussianFitler:PQBaseFilter = PQImageFilter(sticker: blurStickerModel!)
+                    
+                    let iosb:GaussianBlur = GaussianBlur.init()
+                    iosb.blurRadiusInPixels = 20
+                    showGaussianFitler.addTarget(iosb)
+                    
+                    DispatchQueue.main.async {[weak self] in
+        
+                        self?.movie?.addTarget(showGaussianFitler, atTargetIndex: 0)
+                        iosb.addTarget(showFilter)
+                        showFilter.addTarget(self?.renderView as! ImageConsumer, atTargetIndex: 0)
+                        
+                    }
+                }
+            
+           
                 
-                iosb.addTarget(showFilter)
-     
-                showFilter.addTarget(renderView, atTargetIndex: 0)
             }else{
                 movie?.addTarget(showFilter, atTargetIndex: 0)
                 showFilter.addTarget(renderView, atTargetIndex: 0)
 
             }
- 
-            self.createNextFilter()
+            self.createFiltersQueue.async {
+                self.createNextFilter()
+            }
 
         }
     }