Source-SCCamera/ManagedCapturer/SCManagedCaptureDeviceSubje...

68 lines
2.2 KiB
Objective-C

//
// SCManagedCaptureDeviceSubjectAreaHandler.m
// Snapchat
//
// Created by Xiaokang Liu on 19/03/2018.
//
#import "SCManagedCaptureDeviceSubjectAreaHandler.h"
#import "SCCameraTweaks.h"
#import "SCCaptureResource.h"
#import "SCCaptureWorker.h"
#import "SCManagedCaptureDevice+SCManagedCapturer.h"
#import "SCManagedCapturer.h"
#import "SCManagedCapturerState.h"
#import <SCFoundation/SCAssertWrapper.h>
#import <SCFoundation/SCQueuePerformer.h>
@interface SCManagedCaptureDeviceSubjectAreaHandler () {
__weak SCCaptureResource *_captureResource;
}
@end
@implementation SCManagedCaptureDeviceSubjectAreaHandler
- (instancetype)initWithCaptureResource:(SCCaptureResource *)captureResource
{
self = [super init];
if (self) {
SCAssert(captureResource, @"");
_captureResource = captureResource;
}
return self;
}
- (void)stopObserving
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AVCaptureDeviceSubjectAreaDidChangeNotification
object:nil];
}
- (void)startObserving
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_subjectAreaDidChange:)
name:AVCaptureDeviceSubjectAreaDidChangeNotification
object:nil];
}
#pragma mark - Private methods
- (void)_subjectAreaDidChange:(NSDictionary *)notification
{
[_captureResource.queuePerformer perform:^{
if (_captureResource.device.isConnected && !_captureResource.state.arSessionActive) {
// Reset to continuous autofocus when the subject area changed
[_captureResource.device continuousAutofocus];
[_captureResource.device setExposurePointOfInterest:CGPointMake(0.5, 0.5) fromUser:NO];
if (SCCameraTweaksEnablePortraitModeAutofocus()) {
[SCCaptureWorker setPortraitModePointOfInterestAsynchronously:CGPointMake(0.5, 0.5)
completionHandler:nil
resource:_captureResource];
}
}
}];
}
@end