Source-SCCamera/Resource/SCCaptureResource.m

67 lines
1.9 KiB
Objective-C

//
// SCCaptureResource.m
// Snapchat
//
// Created by Lin Jia on 10/19/17.
//
//
#import "SCCaptureResource.h"
#import "SCBlackCameraDetector.h"
#import "SCManagedCapturerState.h"
#import "SCManagedFrontFlashController.h"
#import "SCManagedVideoCapturer.h"
#import <SCFoundation/SCAssertWrapper.h>
#import <SCFoundation/SCQueuePerformer.h>
#import <SCFoundation/SCTraceODPCompatible.h>
#import <FBKVOController/FBKVOController.h>
@interface SCCaptureResource () {
FBKVOController *_previewHiddenKVO;
}
@end
@implementation SCCaptureResource
- (SCManagedFrontFlashController *)frontFlashController
{
SCTraceODPCompatibleStart(2);
SCAssert([self.queuePerformer isCurrentPerformer], @"");
if (!_frontFlashController) {
_frontFlashController = [[SCManagedFrontFlashController alloc] init];
}
return _frontFlashController;
}
- (void)setVideoPreviewLayer:(AVCaptureVideoPreviewLayer *)layer
{
SC_GUARD_ELSE_RETURN(layer != _videoPreviewLayer);
if (_videoPreviewLayer) {
[_previewHiddenKVO unobserve:_videoPreviewLayer];
}
_videoPreviewLayer = layer;
SC_GUARD_ELSE_RETURN(_videoPreviewLayer);
if (!_previewHiddenKVO) {
_previewHiddenKVO = [[FBKVOController alloc] initWithObserver:self];
}
[_previewHiddenKVO observe:_videoPreviewLayer
keyPath:@keypath(_videoPreviewLayer.hidden)
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
block:^(id observer, id object, NSDictionary *change) {
BOOL oldValue = [change[NSKeyValueChangeOldKey] boolValue];
BOOL newValue = [change[NSKeyValueChangeNewKey] boolValue];
if (oldValue != newValue) {
[_blackCameraDetector capturePreviewDidBecomeVisible:!newValue];
}
}];
}
@end