diff --git a/submodules/TelegramUI/Components/ChatTimerScreen/Sources/ChatTimerScreen.swift b/submodules/TelegramUI/Components/ChatTimerScreen/Sources/ChatTimerScreen.swift index 587aaf7a99..dfebbb77ff 100644 --- a/submodules/TelegramUI/Components/ChatTimerScreen/Sources/ChatTimerScreen.swift +++ b/submodules/TelegramUI/Components/ChatTimerScreen/Sources/ChatTimerScreen.swift @@ -470,8 +470,6 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi self.contentContainerNode.view.addSubview(pickerView) self.pickerView = pickerView - - pickerView.selectRow(1, inComponent: 0, animated: false) case .autoremove: let pickerView = TimerCustomPickerView() pickerView.dataSource = self diff --git a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorValues.swift b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorValues.swift index c5fe6ab03c..c5fab71d32 100644 --- a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorValues.swift +++ b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorValues.swift @@ -1087,10 +1087,10 @@ public extension MediaEditorValues { } var requiresComposing: Bool { - if self.originalDimensions.width > 0 && abs((Double(self.originalDimensions.height) / Double(self.originalDimensions.width)) - 1.7777778) > 0.001 { + if abs(1.0 - self.cropScale) > 0.0 { return true } - if abs(1.0 - self.cropScale) > 0.0 { + if self.cropRect != nil { return true } if self.cropOffset != .zero { diff --git a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift index 07195fe4e9..00dd67008a 100644 --- a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift +++ b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorVideoExport.swift @@ -15,7 +15,7 @@ enum ExportWriterStatus { protocol MediaEditorVideoExportWriter { func setup(configuration: MediaEditorVideoExport.Configuration, outputPath: String) - func setupVideoInput(configuration: MediaEditorVideoExport.Configuration, sourceFrameRate: Float) + func setupVideoInput(configuration: MediaEditorVideoExport.Configuration, preferredTransform: CGAffineTransform?, sourceFrameRate: Float) func setupAudioInput(configuration: MediaEditorVideoExport.Configuration) func startWriting() -> Bool @@ -62,25 +62,38 @@ public final class MediaEditorVideoAVAssetWriter: MediaEditorVideoExportWriter { Logger.shared.log("VideoExport", "Did setup asset writer") } - func setupVideoInput(configuration: MediaEditorVideoExport.Configuration, sourceFrameRate: Float) { + func setupVideoInput(configuration: MediaEditorVideoExport.Configuration, preferredTransform: CGAffineTransform?, sourceFrameRate: Float) { guard let writer = self.writer else { return } Logger.shared.log("VideoExport", "Will setup video input") + var dimensions = configuration.dimensions var videoSettings = configuration.videoSettings if var compressionSettings = videoSettings[AVVideoCompressionPropertiesKey] as? [String: Any] { compressionSettings[AVVideoExpectedSourceFrameRateKey] = sourceFrameRate videoSettings[AVVideoCompressionPropertiesKey] = compressionSettings } + if let preferredTransform { + if (preferredTransform.b == -1 && preferredTransform.c == 1) || (preferredTransform.b == 1 && preferredTransform.c == -1) { + dimensions = CGSize(width: dimensions.height, height: dimensions.width) + } + videoSettings[AVVideoWidthKey] = Int(dimensions.width) + videoSettings[AVVideoHeightKey] = Int(dimensions.height) + } let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoSettings) + if let preferredTransform { + videoInput.transform = preferredTransform + + } videoInput.expectsMediaDataInRealTime = false + let sourcePixelBufferAttributes = [ kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA, - kCVPixelBufferWidthKey as String: UInt32(configuration.dimensions.width), - kCVPixelBufferHeightKey as String: UInt32(configuration.dimensions.height) + kCVPixelBufferWidthKey as String: UInt32(dimensions.width), + kCVPixelBufferHeightKey as String: UInt32(dimensions.height) ] self.adaptor = AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: videoInput, sourcePixelBufferAttributes: sourcePixelBufferAttributes) @@ -483,7 +496,15 @@ public final class MediaEditorVideoExport { kCVPixelBufferMetalCompatibilityKey as String: true, AVVideoColorPropertiesKey: colorProperties ] - if let videoTrack = videoTracks.first, videoTrack.preferredTransform.isIdentity && !self.configuration.values.requiresComposing { + + let originalDimensions = self.configuration.values.originalDimensions + var isNotFullscreen = false + if case .video(_, true) = self.subject, originalDimensions.width > 0 && abs((Double(originalDimensions.height) / Double(originalDimensions.width)) - 1.7777778) > 0.001 { + isNotFullscreen = true + } + var preferredTransform: CGAffineTransform? + if let videoTrack = videoTracks.first, !self.configuration.values.requiresComposing && !isNotFullscreen { + preferredTransform = videoTrack.preferredTransform } else { self.setupComposer() } @@ -517,7 +538,7 @@ public final class MediaEditorVideoExport { } else { sourceFrameRate = 30.0 } - writer.setupVideoInput(configuration: self.configuration, sourceFrameRate: sourceFrameRate) + writer.setupVideoInput(configuration: self.configuration, preferredTransform: preferredTransform, sourceFrameRate: sourceFrameRate) } else { self.videoOutput = nil } @@ -558,7 +579,7 @@ public final class MediaEditorVideoExport { return } writer.setup(configuration: self.configuration, outputPath: self.outputPath) - writer.setupVideoInput(configuration: self.configuration, sourceFrameRate: 30.0) + writer.setupVideoInput(configuration: self.configuration, preferredTransform: nil, sourceFrameRate: 30.0) if let audioData = self.configuration.values.audioTrack { let mixComposition = AVMutableComposition() diff --git a/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift b/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift index 2da2b27903..e252a65f5b 100644 --- a/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift +++ b/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift @@ -510,7 +510,7 @@ public func fetchLocalFileVideoMediaResource(postbox: Postbox, resource: LocalFi } else { if alwaysUseModernPipeline && !isImage, let track = avAsset.tracks(withMediaType: .video).first { let dimensions = track.naturalSize.applying(track.preferredTransform) - mediaEditorValues = MediaEditorValues(dimensions: PixelDimensions(dimensions), qualityPreset: qualityPreset) + mediaEditorValues = MediaEditorValues(dimensions: PixelDimensions(width: Int32(abs(dimensions.width)), height: Int32(abs(dimensions.height))), qualityPreset: qualityPreset) } } let tempFile = EngineTempBox.shared.tempFile(fileName: "video.mp4")