diff --git a/submodules/LegacyComponents/Sources/PGCameraCaptureSession.m b/submodules/LegacyComponents/Sources/PGCameraCaptureSession.m index 04061e02f1..97351e078b 100644 --- a/submodules/LegacyComponents/Sources/PGCameraCaptureSession.m +++ b/submodules/LegacyComponents/Sources/PGCameraCaptureSession.m @@ -482,16 +482,16 @@ const NSInteger PGCameraFrameRate = 30; if (backingLevel < firstMark) { realLevel = 0.5 + 0.5 * (backingLevel - 1.0) / (firstMark - 1.0); } else if (backingLevel < secondMark) { - realLevel = 1.0 + (backingLevel - firstMark) / (secondMark - firstMark); + realLevel = 1.0 + 1.0 * (backingLevel - firstMark) / (secondMark - firstMark); } else { - realLevel = 2.0 + (backingLevel - secondMark) / (self.maxZoomLevel - secondMark); + realLevel = 2.0 + 6.0 * (backingLevel - secondMark) / (self.maxZoomLevel - secondMark); } } else if (marks.count == 1) { CGFloat mark = [marks.firstObject floatValue]; if (backingLevel < mark) { - realLevel = 1.0 + backingLevel / mark; + realLevel = 1.0 + 1.0 * (backingLevel - 1.0) / (mark - 1.0); } else { - realLevel = 2.0 + (backingLevel - mark) / (self.maxZoomLevel - mark); + realLevel = 2.0 + 6.0 * (backingLevel - mark) / (self.maxZoomLevel - mark); } } @@ -511,7 +511,7 @@ const NSInteger PGCameraFrameRate = 30; } - (CGFloat)maxZoomLevel { - return MIN(6.0f, self.videoDevice.activeFormat.videoMaxZoomFactor); + return MIN(16.0f, self.videoDevice.activeFormat.videoMaxZoomFactor); } - (void)resetZoom { @@ -531,38 +531,30 @@ const NSInteger PGCameraFrameRate = 30; return; CGFloat level = zoomLevel; + CGFloat backingLevel = 1.0; if (iosMajorVersion() >= 13.0 && device.isVirtualDevice) { NSArray *marks = device.virtualDeviceSwitchOverVideoZoomFactors; if (marks.count == 2) { CGFloat firstMark = [marks.firstObject floatValue]; CGFloat secondMark = [marks.lastObject floatValue]; - if (level < 1.0) { level = MAX(0.5, level); - - CGFloat backingLevel = 1.0 + ((level - 0.5) / 0.5) * (firstMark - 1.0); - device.videoZoomFactor = backingLevel; + backingLevel = 1.0 + ((level - 0.5) / 0.5) * (firstMark - 1.0); } else if (zoomLevel < 2.0) { - CGFloat backingLevel = firstMark + (level - 1.0) * (secondMark - firstMark); - device.videoZoomFactor = backingLevel; + backingLevel = firstMark + ((level - 1.0) / 1.0) * (secondMark - firstMark); } else { - CGFloat backingLevel = secondMark + (level - 2.0) * (self.maxZoomLevel - secondMark); - device.videoZoomFactor = backingLevel; + backingLevel = secondMark + ((level - 2.0) / 6.0) * (self.maxZoomLevel - secondMark); } } else if (marks.count == 1) { CGFloat mark = [marks.firstObject floatValue]; if (zoomLevel < 2.0) { - CGFloat backingLevel = (level - 1.0) * mark; - device.videoZoomFactor = backingLevel; + backingLevel = 1.0 + ((level - 1.0) / 1.0) * (mark - 1.0); } else { - CGFloat backingLevel = mark + (level - 2.0) * (self.maxZoomLevel - mark); - device.videoZoomFactor = backingLevel; + backingLevel = mark + ((level - 2.0) / 6.0) * (self.maxZoomLevel - mark); } } - } else { - level = MAX(1.0, MIN(10.0, level)); - device.videoZoomFactor = MAX([strongSelf minZoomLevel], MIN([strongSelf maxZoomLevel], level)); } + device.videoZoomFactor = MAX(1.0, MIN([strongSelf maxZoomLevel], backingLevel)); }]; } diff --git a/submodules/LegacyComponents/Sources/TGCameraController.m b/submodules/LegacyComponents/Sources/TGCameraController.m index a42ef0b936..fe0cbd89ba 100644 --- a/submodules/LegacyComponents/Sources/TGCameraController.m +++ b/submodules/LegacyComponents/Sources/TGCameraController.m @@ -2522,6 +2522,9 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus case UIGestureRecognizerStateChanged: { CGFloat delta = (gestureRecognizer.scale - 1.0f) * 1.25; + if (_camera.zoomLevel > 2.0) { + delta *= 2.0; + } CGFloat value = MAX(_camera.minZoomLevel, MIN(_camera.maxZoomLevel, _camera.zoomLevel + delta)); [_camera setZoomLevel:value];