From eb07ea17e765f6747b39bba18aa7695c85649f89 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 7 Jul 2023 02:10:09 +0200 Subject: [PATCH] Various fixes --- submodules/Camera/Sources/Camera.swift | 6 +- submodules/Camera/Sources/CameraDevice.swift | 20 +++++-- submodules/Camera/Sources/CameraMetrics.swift | 57 +++++++++++-------- .../Sources/MediaEditorScreen.swift | 3 +- .../StoryItemSetContainerComponent.swift | 1 + 5 files changed, 58 insertions(+), 29 deletions(-) diff --git a/submodules/Camera/Sources/Camera.swift b/submodules/Camera/Sources/Camera.swift index 7064d73ebc..4160ef7394 100644 --- a/submodules/Camera/Sources/Camera.swift +++ b/submodules/Camera/Sources/Camera.swift @@ -82,7 +82,11 @@ final class CameraDeviceContext { private var preferredMaxDimensions: CMVideoDimensions { if self.additional { - return CMVideoDimensions(width: 1920, height: 1440) + if case .iPhoneXS = DeviceModel.current { + return CMVideoDimensions(width: 1440, height: 1080) + } else { + return CMVideoDimensions(width: 1920, height: 1440) + } } else { return CMVideoDimensions(width: 1920, height: 1080) } diff --git a/submodules/Camera/Sources/CameraDevice.swift b/submodules/Camera/Sources/CameraDevice.swift index 5aeccc34b1..f4c8c1e151 100644 --- a/submodules/Camera/Sources/CameraDevice.swift +++ b/submodules/Camera/Sources/CameraDevice.swift @@ -86,7 +86,7 @@ final class CameraDevice { let subtype = CMFormatDescriptionGetMediaSubType(format.formatDescription) if subtype == kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange { for range in format.videoSupportedFrameRateRanges { - if range.maxFrameRate > maxFramerate { + if range.maxFrameRate > 60 { continue outer } } @@ -104,11 +104,23 @@ final class CameraDevice { } } - if let bestFormat = candidates.last { - device.activeFormat = bestFormat + if !candidates.isEmpty { + var bestFormat: AVCaptureDevice.Format? + outer: for format in candidates { + for range in format.videoSupportedFrameRateRanges { + if range.maxFrameRate > 60 { + continue outer + } + bestFormat = format + } + } + if bestFormat == nil { + bestFormat = candidates.last + } + device.activeFormat = bestFormat! Logger.shared.log("Camera", "Selected format:") - Logger.shared.log("Camera", bestFormat.description) + Logger.shared.log("Camera", bestFormat!.description) } else { Logger.shared.log("Camera", "No format selected") } diff --git a/submodules/Camera/Sources/CameraMetrics.swift b/submodules/Camera/Sources/CameraMetrics.swift index 9c296c8528..20938f5c4a 100644 --- a/submodules/Camera/Sources/CameraMetrics.swift +++ b/submodules/Camera/Sources/CameraMetrics.swift @@ -47,7 +47,7 @@ public extension Camera { } } -enum DeviceModel: CaseIterable { +enum DeviceModel: CaseIterable, Equatable { static var allCases: [DeviceModel] { return [ .iPodTouch1, @@ -72,6 +72,9 @@ enum DeviceModel: CaseIterable { case iPodTouch6 case iPodTouch7 + case iPhoneX + case iPhoneXS + case iPhone12 case iPhone12Mini case iPhone12Pro @@ -89,48 +92,52 @@ enum DeviceModel: CaseIterable { case unknown(String) - var modelId: String? { + var modelId: [String] { switch self { case .iPodTouch1: - return "iPod1,1" + return ["iPod1,1"] case .iPodTouch2: - return "iPod2,1" + return ["iPod2,1"] case .iPodTouch3: - return "iPod3,1" + return ["iPod3,1"] case .iPodTouch4: - return "iPod4,1" + return ["iPod4,1"] case .iPodTouch5: - return "iPod5,1" + return ["iPod5,1"] case .iPodTouch6: - return "iPod7,1" + return ["iPod7,1"] case .iPodTouch7: - return "iPod9,1" + return ["iPod9,1"] + case .iPhoneX: + return ["iPhone11,2"] + case .iPhoneXS: + return ["iPhone11,4", "iPhone11,6"] case .iPhone12: - return "iPhone13,2" + return ["iPhone13,2"] case .iPhone12Mini: - return "iPhone13,1" + return ["iPhone13,1"] case .iPhone12Pro: - return "iPhone13,3" + return ["iPhone13,3"] case .iPhone12ProMax: - return "iPhone13,4" + return ["iPhone13,4"] case .iPhone13: - return "iPhone14,5" + return ["iPhone14,5"] case .iPhone13Mini: - return "iPhone14,4" + return ["iPhone14,4"] case .iPhone13Pro: - return "iPhone14,2" + return ["iPhone14,2"] case .iPhone13ProMax: - return "iPhone14,3" + return ["iPhone14,3"] case .iPhone14: - return "iPhone14,7" + return ["iPhone14,7"] case .iPhone14Plus: - return "iPhone14,8" + return ["iPhone14,8"] case .iPhone14Pro: - return "iPhone15,2" + return ["iPhone15,2"] case .iPhone14ProMax: - return "iPhone15,3" + return ["iPhone15,3"] case let .unknown(modelId): - return modelId + return [modelId] } } @@ -150,6 +157,10 @@ enum DeviceModel: CaseIterable { return "iPod touch 6G" case .iPodTouch7: return "iPod touch 7G" + case .iPhoneX: + return "iPhone X" + case .iPhoneXS: + return "iPhone XS" case .iPhone12: return "iPhone 12" case .iPhone12Mini: @@ -200,7 +211,7 @@ enum DeviceModel: CaseIterable { var result: DeviceModel? if let modelCode { for model in DeviceModel.allCases { - if model.modelId == modelCode { + if model.modelId.contains(modelCode) { result = model break } diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift index 5d29f1624e..dd20e8a443 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift @@ -1973,7 +1973,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate } else { self.previewContainerView.alpha = 1.0 - if CACurrentMediaTime() - self.initializationTimestamp > 0.2 { + if CACurrentMediaTime() - self.initializationTimestamp > 0.2, case .image = subject { self.previewContainerView.layer.allowsGroupOpacity = true self.previewContainerView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25, completion: { _ in self.previewContainerView.layer.allowsGroupOpacity = false @@ -2330,6 +2330,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate if let view = self.componentHost.view as? MediaEditorScreenComponent.View { view.animateIn(from: .camera, completion: completion) } + if let subject = self.subject, case let .video(_, mainTransitionImage, _, _, additionalTransitionImage, _, _, positionChangeTimestamps, pipPosition) = subject, let mainTransitionImage { var transitionImage = mainTransitionImage if let additionalTransitionImage { diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift index 4370a19614..fe79b9deb2 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift @@ -2220,6 +2220,7 @@ public final class StoryItemSetContainerComponent: Component { self.controlsContainerView.addSubview(moreButtonView) } transition.setFrame(view: moreButtonView, frame: CGRect(origin: CGPoint(x: headerRightOffset - moreButtonSize.width, y: 2.0), size: moreButtonSize)) + transition.setAlpha(view: moreButtonView, alpha: component.slice.item.storyItem.isPending ? 0.0 : 1.0) headerRightOffset -= moreButtonSize.width + 15.0 }