2014 snapchat source code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // SCManagedCaptureDeviceLockOnRecordExposureHandler.m // Snapchat // // Created by Derek Peirce on 3/24/17. // Copyright © 2017 Snapchat, Inc. All rights reserved. //
#import "SCManagedCaptureDeviceLockOnRecordExposureHandler.h"
#import "AVCaptureDevice+ConfigurationLock.h" #import "SCExposureState.h" #import "SCManagedCaptureDeviceExposureHandler.h"
#import <SCFoundation/SCTrace.h>
@import AVFoundation;
@implementation SCManagedCaptureDeviceLockOnRecordExposureHandler { CGPoint _exposurePointOfInterest; AVCaptureDevice *_device; // allows the exposure to change when the user taps to refocus BOOL _allowTap; SCExposureState *_exposureState; }
- (instancetype)initWithDevice:(AVCaptureDevice *)device pointOfInterest:(CGPoint)pointOfInterest allowTap:(BOOL)allowTap { if (self = [super init]) { _device = device; _exposurePointOfInterest = pointOfInterest; _allowTap = allowTap; } return self; }
- (CGPoint)getExposurePointOfInterest { return _exposurePointOfInterest; }
- (void)setExposurePointOfInterest:(CGPoint)pointOfInterest fromUser:(BOOL)fromUser { SCTraceStart(); BOOL locked = _device.exposureMode == AVCaptureExposureModeLocked || _device.exposureMode == AVCaptureExposureModeCustom || _device.exposureMode == AVCaptureExposureModeAutoExpose; if (!locked || (fromUser && _allowTap)) { AVCaptureExposureMode exposureMode = (locked ? AVCaptureExposureModeAutoExpose : AVCaptureExposureModeContinuousAutoExposure); if ([_device isExposureModeSupported:exposureMode] && [_device isExposurePointOfInterestSupported]) { [_device runTask:@"set exposure point" withLockedConfiguration:^() { // Set exposure point before changing focus mode // Be noticed that order does matter _device.exposurePointOfInterest = pointOfInterest; _device.exposureMode = exposureMode; }]; } _exposurePointOfInterest = pointOfInterest; } }
- (void)setStableExposure:(BOOL)stableExposure { AVCaptureExposureMode exposureMode = stableExposure ? AVCaptureExposureModeLocked : AVCaptureExposureModeContinuousAutoExposure; if ([_device isExposureModeSupported:exposureMode]) { [_device runTask:@"set stable exposure" withLockedConfiguration:^() { _device.exposureMode = exposureMode; }]; } }
- (void)setVisible:(BOOL)visible { if (visible) { if (_device.exposureMode == AVCaptureExposureModeLocked || _device.exposureMode == AVCaptureExposureModeCustom) { [_exposureState applyISOAndExposureDurationToDevice:_device]; } } else { _exposureState = [[SCExposureState alloc] initWithDevice:_device]; } }
@end
|