Jelajahi Sumber

Merge branch 'master' of https://git.yishihui.com/iOS/BFFramework

* 'master' of https://git.yishihui.com/iOS/BFFramework:
  纯图片素材,自定义循环倍速最大 应支持到 20 x
  不支持4K 视频
  支持 copy  协议
  1,不使用 JSON 创建对象  2, 6x 速 定帧问题
huzhiqiang 3 tahun lalu
induk
melakukan
491582666b

+ 5 - 0
BFFramework/Classes/Base/Controller/PQPhotoMaterialController.swift

@@ -325,6 +325,11 @@ extension PQPhotoMaterialController: UICollectionViewDelegate, UICollectionViewD
             cShowHUB(superView: nil, msg: "暂不支持该比例的素材")
             return
         }
+        //add by ak
+        if materialData?.asset?.mediaType == .video && ((materialData?.asset?.pixelWidth ?? 0) > 3000 || (materialData?.asset?.pixelHeight ?? 0) > 3000) {
+            cShowHUB(superView: nil, msg: "暂不支持该类型素材")
+            return
+        }
         if materialData != nil, indexPath != nil {
             materialData?.isSelected = !(materialData?.isSelected ?? false)
             if materialData?.isSelected ?? false {

+ 7 - 1
BFFramework/Classes/PModels/editDarftModels/PQEditBaseModel.swift

@@ -41,7 +41,7 @@ public let sectionIndexTransform = TransformOf<Int, Int>(fromJSON: { (value: Int
     return nil
 })
 
-open class PQEditBaseModel: Object, Mappable {
+open class PQEditBaseModel: Object, Mappable ,NSCopying{
     @objc dynamic public var uniqueId: String = getUniqueId(desc: "uniqueId")
     public func mapping(map _: Map) {}
 
@@ -52,4 +52,10 @@ open class PQEditBaseModel: Object, Mappable {
     override required public init() {
         super.init()
     }
+    
+    public func copy(with zone: NSZone? = nil) -> Any {
+            let editBaseModel = PQEditBaseModel()
+            editBaseModel.uniqueId = uniqueId
+            return editBaseModel
+        }
 }

+ 30 - 0
BFFramework/Classes/PModels/editDarftModels/PQEditVisionTrackMaterialsModel.swift

@@ -278,4 +278,34 @@ public class PQEditVisionTrackMaterialsModel: PQEditBaseModel {
             }
         }
     }
+    public override func copy(with zone: NSZone? = nil) -> Any {
+        let temp = PQEditVisionTrackMaterialsModel.init()
+       
+        temp.width = width
+        
+        temp.height = height
+        temp.itemWidth = itemWidth
+        temp.itemHeight = itemHeight
+        temp.sourceType = sourceType
+        temp.type = type
+        temp.canvasFillType = canvasFillType
+        temp.materialType = materialType
+        temp.duration = duration
+        temp.aptDuration = aptDuration
+        temp.id = id
+        temp.materialLayer = materialLayer
+        temp.materialEffect = materialEffect
+        temp.timelineIn = timelineIn
+        temp.timelineOut = timelineOut
+        temp.model_in = model_in
+        temp.out = out
+        temp.speedRate = speedRate
+        temp.volumeGain = volumeGain
+        temp.materialUrl = materialUrl
+        temp.netResUrl = netResUrl
+        temp.netResCoverImageURL = netResCoverImageURL
+        temp.locationPath = locationPath
+ 
+        return temp
+    }
 }

+ 12 - 11
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

@@ -1035,9 +1035,8 @@ extension PQStuckPointEditerController {
                 BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(clipNum)")
                 for clipindex in 0 ... clipNum - 1 {
                     // deep copy sticker model 防止只有一个对象
-                    let stickerjson = sticker.toJSONString(prettyPrint: false)
-                    let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
-
+                    let deepCopySticker:PQEditVisionTrackMaterialsModel? = sticker.copy() as? PQEditVisionTrackMaterialsModel
+                              
                     // 设置循环模式和适配模式
                     deepCopySticker?.generateDefaultValues()
 
@@ -1083,9 +1082,9 @@ extension PQStuckPointEditerController {
                     for (index, point) in finallyStuckPoints.enumerated() {
                         let sticker: PQEditVisionTrackMaterialsModel = section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials()[index % section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials().count]
                         BFLog(message: "stickerlocationPath sticker : \(sticker.locationPath)")
-                        let stickerjson = sticker.toJSONString(prettyPrint: false)
-
-                        let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
+//
+                        let deepCopySticker:PQEditVisionTrackMaterialsModel? = sticker.copy() as? PQEditVisionTrackMaterialsModel
+                        
                         if deepCopySticker!.type == StickerType.IMAGE.rawValue {
                             if index + 1 < finallyStuckPoints.count {
                                 deepCopySticker!.timelineIn = Float64("\(finallyStuckPoints[index])") ?? 0.0
@@ -1150,10 +1149,8 @@ extension PQStuckPointEditerController {
                                 for clipindex in 0 ... sticker.clipCount {
                                     // deep copy sticker model 防止只有一个对象
                                     let deepCopyStickerDecoderTime: TimeInterval = Date().timeIntervalSince1970
-
-                                    let stickerjson = sticker.toJSONString(prettyPrint: false)
-
-                                    let deepCopySticker = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: stickerjson!)
+                                    
+                                    let deepCopySticker:PQEditVisionTrackMaterialsModel? = sticker.copy() as? PQEditVisionTrackMaterialsModel
 
                                     BFLog(message: "生成stickers 总时长为 aaa\(Date().timeIntervalSince1970 - deepCopyStickerDecoderTime)")
                                     // 设置循环模式和适配模式
@@ -1419,8 +1416,9 @@ extension PQStuckPointEditerController {
                                 let LA = tempMaxSpeed * (stuckPointsTemp[i + 1] - stuckPointsTemp[i])
                                 let LAValue =  String(format: "%.6f", tempMaxSpeed * (stuckPointsTemp[i + 1] - stuckPointsTemp[i]))
                                 useAssestDurationTemp = useAssestDurationTemp + (Float(LAValue) ?? 0.0)
+                                //6x 第一个卡点X 倍速 > 原素材
                                 if useAssestDurationTemp > Float(assetDuration) {
-                                    useAssestDurationTemp = useAssestDurationTemp - (Float(LAValue) ?? 0.0)
+                                    useAssestDurationTemp = Float(assetDuration)
                                     break
                                 }
                                 LACount = LACount + 1
@@ -1487,6 +1485,9 @@ extension PQStuckPointEditerController {
                                         }
                                     }
                                 }
+                            }else {
+                                //出现在第一个卡点X 倍速 > 原素材
+                                finallyStuckPoints.removeLast()
                             }
                         }
                     }

+ 1 - 0
BFFramework/Classes/Stuckpoint/View/PQCustomSpeedSettingView.swift

@@ -130,6 +130,7 @@ class PQCustomSpeedSettingView: UIView {
                 titleLab.text = "自定义跳跃快慢速"
             }else if(viewType == 3){
                 titleLab.text = "自定义循环"
+                jumpSpeedSlider.maximumValue = 20
             }
         }
     }

+ 36 - 22
BFFramework/Classes/Stuckpoint/ViewModel/PQGPUImagePlayerView.swift

@@ -582,34 +582,48 @@ public class PQGPUImagePlayerView: UIView {
             movie!.removeAllTargets()
         
             if(showFilter.stickerInfo?.type == StickerType.IMAGE.rawValue && showGaussianBlur){
-              
-                self.createFiltersQueue.async {
-                    //高斯层
-                    let json = showFilter.stickerInfo?.toJSONString(prettyPrint: false)
-                    if json == nil {
-                        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)
-                    
+         
+//                    //高斯层
+//                    let json = showFilter.stickerInfo?.toJSONString(prettyPrint: false)
+//                    if json == nil {
+//                        FilterLog(message: "数据转换有问题 跳转")
+//                        return
+//                    }
+//
+//                    var blurStickerModel: PQEditVisionTrackMaterialsModel? = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: json!)
+//                    blurStickerModel?.canvasFillType = stickerContentMode.aspectFillStr.rawValue
+      
                     sharedImageProcessingContext.runOperationAsynchronously{ [self] in
-        
+    
+//                        let json = showFilter.stickerInfo?.toJSONString(prettyPrint: false)
+//                        if json == nil {
+//                            FilterLog(message: "数据转换有问题 跳转")
+//                            return
+//                        }
+
+//                        let blurStickerModel: PQEditVisionTrackMaterialsModel? = Mapper<PQEditVisionTrackMaterialsModel>().map(JSONString: json!)
+//                        blurStickerModel?.canvasFillType = stickerContentMode.aspectFillStr.rawValue
+//                        let showGaussianFitler:PQBaseFilter = PQImageFilter(sticker: blurStickerModel!)
+                        
+                        let  blurStickerModel:PQEditVisionTrackMaterialsModel? = showFilter.stickerInfo?.copy() as? PQEditVisionTrackMaterialsModel
+                        blurStickerModel?.canvasFillType = stickerContentMode.aspectFillStr.rawValue
+
+                        if blurStickerModel == nil {
+                            return
+                        }
+                        let showGaussianFitler:PQBaseFilter = PQImageFilter(sticker: blurStickerModel!)
+                        
+                        
+                        let iosb:GaussianBlur = GaussianBlur.init()
+                        iosb.blurRadiusInPixels = 20
+                        showGaussianFitler.addTarget(iosb)
+                        
                         self.movie?.addTarget(showGaussianFitler, atTargetIndex: 0)
                         iosb.addTarget(showFilter)
                         showFilter.addTarget(self.renderView as ImageConsumer, atTargetIndex: 0)
                         
                     }
-                }
-            
-           
-                
+ 
             }else{
                 movie?.addTarget(showFilter, atTargetIndex: 0)
                 showFilter.addTarget(renderView, atTargetIndex: 0)