Преглед изворни кода

1,快慢速模式时设置的设置值和跳跃卡的速度分开保存,2,sticker.clipCount分段数 从1 开始。3,修改clipCount临时变量名 防止重名。

jsonwang пре 3 година
родитељ
комит
065556d049

+ 39 - 31
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

@@ -60,8 +60,11 @@ class PQStuckPointEditerController: PQBaseViewController {
     var lastEditModelBtn: UIButton?
 
     // add by ak  最大、最小速度 有固定值和自定义,当快慢速下两个值都有效,当跳跃卡点只有maxSpeed有效
-    var maxSpeed: Float = 1
-    var minSpeed: Float = 1
+    // 快慢速模式的 速度设置,快/慢速
+    var modelSpeed_maxSpeed: Float = 1.0
+    var modelSpeed_minSpeed: Float = 1.0
+    //跳跃模式的速度
+    var modelPoint_speed:Float = 1.0
 
     // 快慢速最后一次选择的速度位置
     var lastSpeedSelectIndex: Int = 0
@@ -359,13 +362,15 @@ class PQStuckPointEditerController: PQBaseViewController {
                     // 更新最后一次选择的位置恢复时使用
                     if self?.speedSettingView.viewType == 1 {
                         self?.lastSpeedSelectIndex = selectIndex
+                        self?.modelSpeed_maxSpeed = maxSpeed
+                        self?.modelSpeed_minSpeed = minSpeed
                     } else if self?.speedSettingView.viewType == 2 {
                         self?.lastJumpSpeedSelectIndex = selectIndex
+                        self?.modelPoint_speed = maxSpeed
                     } else {
                         self?.lastCyclesSelectIndex = selectIndex
                     }
-                    self?.maxSpeed = maxSpeed
-                    self?.minSpeed = minSpeed
+    
                 } else {
                     BFLog(message: "设置速度无效")
                 }
@@ -384,16 +389,18 @@ class PQStuckPointEditerController: PQBaseViewController {
         customSpeedSetView.isHidden = true
         customSpeedSetView.selectSpeedCallBack = { [weak self, weak customSpeedSetView] maxSpeed, minSpeed, isJumpSpeedModel, isCancle in
             if !isCancle {
-                self?.maxSpeed = maxSpeed
-                self?.minSpeed = minSpeed
+     
                 BFLog(message: "自定义速度maxSpeed is\(maxSpeed) minSpeed \(minSpeed) \(isJumpSpeedModel)")
                 self?.musicEditBGView.pausePlayer()
 
                 // 自定定义的更新一下最后的选择位置
                 if self?.speedSettingView.viewType == 1 {
                     self?.lastSpeedSelectIndex = -1
+                    self?.modelSpeed_maxSpeed = maxSpeed
+                    self?.modelSpeed_minSpeed = minSpeed
                 } else if self?.speedSettingView.viewType == 2 {
                     self?.lastJumpSpeedSelectIndex = -1
+                    self?.modelPoint_speed = maxSpeed
                 } else {
                     self?.lastCyclesSelectIndex = Int(maxSpeed - 1)
                 }
@@ -833,8 +840,8 @@ class PQStuckPointEditerController: PQBaseViewController {
         playerView.pause()
         let videoExporter = PQStuckPointPublicController()
         videoExporter.rhythmMode = currentCreateStickersModel
-        videoExporter.syncedUpVideoSpeedMin = minSpeed
-        videoExporter.syncedUpVideoSpeedMax = maxSpeed
+        videoExporter.syncedUpVideoSpeedMin = modelSpeed_maxSpeed
+        videoExporter.syncedUpVideoSpeedMax = modelSpeed_minSpeed
         videoExporter.isReCreate = isReCreate
         videoExporter.selectedTotalDuration = selectedTotalDuration
         videoExporter.selectedDataCount = selectedDataCount
@@ -1265,7 +1272,8 @@ extension PQStuckPointEditerController {
                                     // 当前分段的速度
                                     var tempSpeed: Float = 1.0
                                     if model == .createStickersModelSpeed {
-                                        tempSpeed = (stickers.count % 2) == 0 ? maxSpeed : minSpeed
+                                        
+                                        tempSpeed = (stickers.count % 2) == 0 ? modelSpeed_maxSpeed : modelSpeed_minSpeed
                                     }
 
                                     if stickers.count + 1 < finallyStuckPoints.count {
@@ -1314,7 +1322,7 @@ extension PQStuckPointEditerController {
 
                                         lastOutTime = deepCopySticker?.out ?? 0
                                     }
-                                    BFLog(message: "测试人员创建 sticker  crilp is in 视频 \(String(format: "%.6f", deepCopySticker?.model_in ?? 0))  out  \(String(format: "%.6f", deepCopySticker?.out ?? 0)) ,分段素材时长:\(String(format: "%.6f", (deepCopySticker?.out ?? 0) - (deepCopySticker?.model_in ?? 0))) ,分段显示时长:\(String(format: "%.6f", (deepCopySticker?.timelineOut ?? 0) - (deepCopySticker?.timelineIn ?? 0))), 视频素材原时长\(CMTimeGetSeconds(asset.duration)) clipCount \(sticker.clipCount) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.0)")
+                                    BFLog(message: "测试人员创建 sticker  crilp is in 视频 \(String(format: "%.6f", deepCopySticker?.model_in ?? 0))  out  \(String(format: "%.6f", deepCopySticker?.out ?? 0)) ,分段素材时长:\(String(format: "%.6f", (deepCopySticker?.out ?? 0) - (deepCopySticker?.model_in ?? 0))) ,分段显示时长:\(String(format: "%.6f", (deepCopySticker?.timelineOut ?? 0) - (deepCopySticker?.timelineIn ?? 0))), 视频素材原时长\(CMTimeGetSeconds(asset.duration)) clipNum \(sticker.clipCount) timelineIN: \(String(format: "%.6f", deepCopySticker?.timelineIn ?? 0)) timelineOUT:\(String(format: "%.6f", deepCopySticker?.timelineOut ?? 0)) speedRate:\(deepCopySticker?.speedRate ?? 0.0)")
                                     
                                     if deepCopySticker != nil {
                                         if(deepCopySticker?.timelineIn == 0){
@@ -1406,10 +1414,10 @@ extension PQStuckPointEditerController {
         return stuckPoints
     }
 
-    func clipPoint(clipCount: Int, oldPoints: Array<Float>) {
-        BFLog(message: "拼接卡点数:\(clipCount)")
-        if(clipCount < 0 || oldPoints.count < 2){
-            BFLog(message: "clipCount is error!!!! \(clipCount)")
+    func clipPoint(clipNum: Int, oldPoints: Array<Float>) {
+        BFLog(message: "拼接卡点数:\(clipNum)")
+        if(clipNum < 0 || oldPoints.count < 2){
+            BFLog(message: "clipNum is error!!!! \(clipNum)")
             return
         }
         // 如果是第一次拼接先补第0位
@@ -1417,7 +1425,7 @@ extension PQStuckPointEditerController {
             finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
         }
         
-        for i in finallyStuckPoints.count ... clipCount + finallyStuckPoints.count {
+        for i in finallyStuckPoints.count ... clipNum + finallyStuckPoints.count {
             if (i % (oldPoints.count - 1)) != 1 {
                let value =  String(format: "%.6f", finallyStuckPoints[i - 1] + oldPoints[((i-1) % (oldPoints.count - 1)) + 1] - oldPoints[((i - 2) % (oldPoints.count - 1)) + 1])
                 
@@ -1446,7 +1454,7 @@ extension PQStuckPointEditerController {
             var i: Int = 0
             // L/(n+1)  L -原视觉素材总时长  n-抛留倍数  lastJumpSpeedSelectIndex 是位置 对应的值要+1
             // 根据公式计划出的总时长
-            let jumpTime = Float(selectedTotalDuration) / Float(maxSpeed + 1)
+            let jumpTime = Float(selectedTotalDuration) / Float(modelPoint_speed + 1)
             // 只有图片素材时会为0
             if jumpTime > 0 {
                 while useAssestDuration < Float(jumpTime) {
@@ -1464,7 +1472,7 @@ extension PQStuckPointEditerController {
 
                 // 拼接要使用的卡点信息
 
-                clipPoint(clipCount: clipNum, oldPoints: stuckPointsTemp)
+                clipPoint(clipNum: clipNum, oldPoints: stuckPointsTemp)
             }
 
             break
@@ -1473,11 +1481,11 @@ extension PQStuckPointEditerController {
             var tempMaxSpeed: Float = 1
             var tempMinSpeed: Float = 1
             //速度有为0 会出现在切换模式时,目前是共用一个参数值,会清掉老值 TODO
-            if((maxSpeed == 0.0 && minSpeed == 0.0) && selectedDataCount != selectedImageDataCount && model == .createStickersModelSpeed){
-                BFLog(message: "速度参数有错误 要重新计算!!!")
-                dealWithDataSuccess()
-                return
-            }
+//            if((maxSpeed == 0.0 && minSpeed == 0.0) && selectedDataCount != selectedImageDataCount && model == .createStickersModelSpeed){
+//                BFLog(message: "速度参数有错误 要重新计算!!!")
+//                dealWithDataSuccess()
+//                return
+//            }
             if model == .createStickersModelSpeed {
                 // 改变速率,.只有快慢速且非只有图片素材时自动+1处理
                 if model == .createStickersModelSpeed && selectedDataCount != selectedImageDataCount {
@@ -1486,8 +1494,8 @@ extension PQStuckPointEditerController {
                     stuckPointsTemp = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0))
                 }
 
-                tempMaxSpeed = maxSpeed
-                tempMinSpeed = minSpeed
+                tempMaxSpeed = modelSpeed_maxSpeed
+                tempMinSpeed = modelSpeed_minSpeed
             } else {
                 stuckPointsTemp = getUsedStuckPoint(seed: (stuckPointMusicData?.speed ?? 0))
                 
@@ -1518,12 +1526,12 @@ extension PQStuckPointEditerController {
                             }
                             var j = finallyStuckPoints.count
                             // 添加卡点的段数 用于判断当前卡点是快/慢速
-                            var pointCount:Int = 0
+                            var pointCount:Int = 1
                             // 已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个卡点
                             var useAssestDurationTemp: Float = 0.0
                             while useAssestDurationTemp < assetDuration {
                                 //当前段的应该使用的速度 A/B
-                                let useSpeed = (pointCount % 2 == 0 ) ? tempMaxSpeed : tempMinSpeed
+                                let useSpeed = (pointCount % 2 != 0 ) ? tempMaxSpeed : tempMinSpeed
                                 // 计算卡点
                                 //要添加的卡点数值
                                 var sub:Float = 0.0
@@ -1557,10 +1565,10 @@ extension PQStuckPointEditerController {
 
                             // 3,多补一个卡点 做 C级 速处理,要根据条件不满足 要删除最后一位,
                             if useAssestDurationTemp < assetDuration {
-                                // 下一个卡的的速度性质快、慢
+                                // 下一个卡的的速度性质快、慢,e.g. sticker.clipCount = 5时 tempSpeed 应该是慢速。下面计算正确。
                                 var tempSpeed: Float = 1.0
                                 if model == .createStickersModelSpeed {
-                                    tempSpeed = (sticker.clipCount) % 2 == 0 ? maxSpeed : minSpeed
+                                    tempSpeed = (sticker.clipCount) % 2 == 0 ? modelSpeed_maxSpeed : modelSpeed_minSpeed
                                 }
                                 // 最后一点素材时长
                                 let lastAssetDuration = Float(CMTimeGetSeconds(asset.duration)) - useAssestDurationTemp
@@ -1602,7 +1610,7 @@ extension PQStuckPointEditerController {
         }
         // 拼接图片所使用的时长.选择一组图片 按图片数量计算卡点的总时长
         if selectedImageDataCount > 0 {
-            clipPoint(clipCount: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
+            clipPoint(clipNum: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
         }
 
         // 全是图片时数组里放着的一定都是图片的使用的卡点
@@ -1619,7 +1627,7 @@ extension PQStuckPointEditerController {
             if lastCyclesSelectIndex != -1 {
                 // 纯图片时 已经默认添加一次循环 所以要用lastCyclesSelectIndex - 1
                 if(lastCyclesSelectIndex != 0){
-                    clipPoint(clipCount: selectedImageDataCount * lastCyclesSelectIndex - 1, oldPoints: stuckPointsTemp)
+                    clipPoint(clipNum: selectedImageDataCount * lastCyclesSelectIndex - 1, oldPoints: stuckPointsTemp)
                 }
            
             } else {
@@ -1627,7 +1635,7 @@ extension PQStuckPointEditerController {
                     lastCyclesSelectIndex = 0
                     while oneSelectImageDuration < 10 {
                         // 不够10S 时 一次加图片数量的卡点数
-                        clipPoint(clipCount: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
+                        clipPoint(clipNum: selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
                         oneSelectImageDuration = Float((finallyStuckPoints.last ?? 0) - (finallyStuckPoints.first ?? 0))
 
                         lastCyclesSelectIndex = lastCyclesSelectIndex + 1