diff --git a/submodules/Camera/Sources/CameraOutput.swift b/submodules/Camera/Sources/CameraOutput.swift index b7b2416a26..76ccdbe57b 100644 --- a/submodules/Camera/Sources/CameraOutput.swift +++ b/submodules/Camera/Sources/CameraOutput.swift @@ -337,7 +337,7 @@ final class CameraOutput: NSObject { let outputFileURL = URL(fileURLWithPath: outputFilePath) let videoRecorder = VideoRecorder(configuration: VideoRecorder.Configuration(videoSettings: videoSettings, audioSettings: audioSettings), videoTransform: CGAffineTransform(rotationAngle: .pi / 2.0), fileUrl: outputFileURL, completion: { [weak self] result in if case let .success(transitionImage, duration, positionChangeTimestamps) = result { - self?.recordingCompletionPipe.putNext(.finished((outputFilePath, transitionImage!, false), nil, duration, positionChangeTimestamps.map { ($0 == .front, $1) }, CACurrentMediaTime())) + self?.recordingCompletionPipe.putNext(.finished((outputFilePath, transitionImage ?? UIImage(), false), nil, duration, positionChangeTimestamps.map { ($0 == .front, $1) }, CACurrentMediaTime())) } else { self?.recordingCompletionPipe.putNext(.failed) } @@ -363,7 +363,10 @@ final class CameraOutput: NSObject { } func stopRecording() -> Signal { - self.videoRecorder?.stop() + guard let videoRecorder = self.videoRecorder, videoRecorder.isRecording else { + return .complete() + } + videoRecorder.stop() return self.recordingCompletionPipe.signal() |> take(1) diff --git a/submodules/Camera/Sources/VideoRecorder.swift b/submodules/Camera/Sources/VideoRecorder.swift index 6ddd1094c6..dc5aebab89 100644 --- a/submodules/Camera/Sources/VideoRecorder.swift +++ b/submodules/Camera/Sources/VideoRecorder.swift @@ -291,7 +291,14 @@ private final class VideoRecorderImpl { public func stopRecording() { self.queue.async { - self.recordingStopSampleTime = CMTime(seconds: CACurrentMediaTime(), preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + var stopTime = CMTime(seconds: CACurrentMediaTime(), preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + if self.recordingStartSampleTime.isValid { + if (stopTime - self.recordingStartSampleTime).seconds < 1.0 { + stopTime = self.recordingStartSampleTime + CMTime(seconds: 1.0, preferredTimescale: self.recordingStartSampleTime.timescale) + } + } + + self.recordingStopSampleTime = stopTime } }