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.
 
 
 

233 lines
7.5 KiB

//
// SCCaptureResource.h
// Snapchat
//
// Created by Lin Jia on 10/19/17.
//
//
#import "SCManagedCapturerLensAPI.h"
#import "SCManagedCapturerListenerAnnouncer.h"
#import "SCSnapCreationTriggers.h"
#import <SCCameraFoundation/SCManagedVideoDataSource.h>
#import <FBKVOController/FBKVOController.h>
#import <Foundation/Foundation.h>
/*
In general, the function of SCCapturer is to use some resources (such as SCManagedCapturerListenerAnnouncer), to do
something (such as announce an event).
SCCaptureResource abstract away the "resources" part of SCCapturer. It has no APIs itself, it is used to be the
resource which gets passed arround for capturer V2 state machine.
*/
@class SCManagedDeviceCapacityAnalyzer;
@class SCManagedCapturePreviewLayerController;
@class ARSession;
@class SCManagedVideoScanner;
@class LSAGLView;
@protocol SCManagedCapturerLSAComponentTrackerAPI;
@class SCManagedStillImageCapturer;
@class SCManagedVideoCapturer;
@class SCQueuePerformer;
@class SCManagedVideoFrameSampler;
@class SCManagedDroppedFramesReporter;
@class SCManagedVideoStreamReporter;
@protocol SCManagedCapturerGLViewManagerAPI;
@class SCCapturerToken;
@class SCSingleFrameStreamCapturer;
@class SCManagedFrontFlashController;
@class SCManagedVideoCapturerHandler;
@class SCManagedStillImageCapturerHandler;
@class SCManagedDeviceCapacityAnalyzerHandler;
@class SCManagedCaptureDeviceDefaultZoomHandler;
@class SCManagedCaptureDeviceHandler;
@class SCBlackCameraNoOutputDetector;
@class SCCaptureSessionFixer;
@protocol SCCaptureFaceDetector;
@protocol SCManagedCapturerLensAPI;
@protocol SCManagedCapturerARImageCaptureProvider;
@class SCManagedCapturerARSessionHandler;
@class SCManagedCaptureDeviceSubjectAreaHandler;
@class SCManagedCaptureSession;
@class SCBlackCameraDetector;
@protocol SCLensProcessingCore;
@protocol SCManagedCapturerLensAPI;
@protocol SCManagedCapturePreviewLayerControllerDelegate;
typedef enum : NSUInteger {
SCManagedCapturerStatusUnknown = 0,
SCManagedCapturerStatusReady,
SCManagedCapturerStatusRunning,
} SCManagedCapturerStatus;
@protocol SCDeviceMotionProvider
@property (nonatomic, readonly) BOOL isUnderDeviceMotion;
@end
@protocol SCFileInputDecider
@property (nonatomic, readonly) BOOL shouldProcessFileInput;
@property (nonatomic, readonly) NSURL *fileURL;
@end
@interface SCCaptureResource : NSObject
@property (nonatomic, readwrite, assign) SCManagedCapturerStatus status;
@property (nonatomic, readwrite, strong) SCManagedCapturerState *state;
@property (nonatomic, readwrite, strong) SCManagedCaptureDevice *device;
@property (nonatomic, readwrite, strong) id<SCManagedCapturerLensAPI> lensProcessingCore;
@property (nonatomic, readwrite, strong) id<SCManagedCapturerLensAPIProvider> lensAPIProvider;
@property (nonatomic, readwrite, strong) ARSession *arSession NS_AVAILABLE_IOS(11_0);
@property (nonatomic, readwrite, strong) SCManagedStillImageCapturer *arImageCapturer NS_AVAILABLE_IOS(11_0);
@property (nonatomic, readwrite, strong) SCManagedCaptureSession *managedSession;
@property (nonatomic, readwrite, strong) id<SCManagedVideoDataSource> videoDataSource;
@property (nonatomic, readwrite, strong) SCManagedDeviceCapacityAnalyzer *deviceCapacityAnalyzer;
@property (nonatomic, readwrite, strong) SCManagedVideoScanner *videoScanner;
@property (nonatomic, readwrite, strong) SCManagedCapturerListenerAnnouncer *announcer;
@property (nonatomic, readwrite, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;
@property (nonatomic, readwrite, strong) id<SCManagedCapturerGLViewManagerAPI> videoPreviewGLViewManager;
@property (nonatomic, readwrite, strong) SCManagedStillImageCapturer *stillImageCapturer;
@property (nonatomic, readwrite, strong) SCManagedVideoCapturer *videoCapturer;
@property (nonatomic, readwrite, strong) SCQueuePerformer *queuePerformer;
@property (nonatomic, readwrite, strong) SCManagedVideoFrameSampler *videoFrameSampler;
@property (nonatomic, readwrite, strong) SCManagedDroppedFramesReporter *droppedFramesReporter;
@property (nonatomic, readwrite, strong) SCManagedVideoStreamReporter *videoStreamReporter; // INTERNAL USE ONLY
@property (nonatomic, readwrite, strong) SCManagedFrontFlashController *frontFlashController;
@property (nonatomic, readwrite, strong) SCManagedVideoCapturerHandler *videoCapturerHandler;
@property (nonatomic, readwrite, strong) SCManagedStillImageCapturerHandler *stillImageCapturerHandler;
@property (nonatomic, readwrite, strong) SCManagedDeviceCapacityAnalyzerHandler *deviceCapacityAnalyzerHandler;
@property (nonatomic, readwrite, strong) SCManagedCaptureDeviceDefaultZoomHandler *deviceZoomHandler;
@property (nonatomic, readwrite, strong) SCManagedCaptureDeviceHandler *captureDeviceHandler;
@property (nonatomic, readwrite, strong) id<SCCaptureFaceDetector> captureFaceDetector;
@property (nonatomic, readwrite, strong) FBKVOController *kvoController;
@property (nonatomic, readwrite, strong) id<SCManagedCapturerLSAComponentTrackerAPI> lsaTrackingComponentHandler;
@property (nonatomic, readwrite, strong) SCManagedCapturerARSessionHandler *arSessionHandler;
@property (nonatomic, assign) SEL completeARSessionShutdown;
@property (nonatomic, assign) SEL handleAVSessionStatusChange;
@property (nonatomic, assign) BOOL videoRecording;
@property (nonatomic, assign) NSInteger numRetriesFixAVCaptureSessionWithCurrentSession;
@property (nonatomic, assign) BOOL appInBackground;
@property (nonatomic, assign) NSUInteger streamingSequence;
@property (nonatomic, assign) BOOL stillImageCapturing;
@property (nonatomic, readwrite, strong) NSTimer *livenessTimer;
@property (nonatomic, readwrite, strong) NSMutableSet<SCCapturerToken *> *tokenSet;
@property (nonatomic, readwrite, strong) SCSingleFrameStreamCapturer *frameCap;
@property (nonatomic, readwrite, strong) id<SCManagedSampleBufferDisplayController> sampleBufferDisplayController;
@property (nonatomic, readwrite, strong) SCSnapCreationTriggers *snapCreationTriggers;
// Different from most properties above, following are main thread properties.
@property (nonatomic, assign) BOOL allowsZoom;
@property (nonatomic, assign) NSUInteger numRetriesFixInconsistencyWithCurrentSession;
@property (nonatomic, readwrite, strong) NSMutableDictionary *debugInfoDict;
@property (nonatomic, assign) BOOL notificationRegistered;
@property (nonatomic, readwrite, strong) SCManagedCaptureDeviceSubjectAreaHandler *deviceSubjectAreaHandler;
@property (nonatomic, assign) SEL sessionRuntimeError;
@property (nonatomic, assign) SEL livenessConsistency;
// TODO: these properties will be refactored into SCCaptureSessionFixer class
// The refactor will be in a separate PR
// Timestamp when _fixAVSessionIfNecessary is called
@property (nonatomic, assign) NSTimeInterval lastFixSessionTimestamp;
// Timestamp when session runtime error is handled
@property (nonatomic, assign) NSTimeInterval lastSessionRuntimeErrorTime;
// Wether we schedule fix of creating session already
@property (nonatomic, assign) BOOL isRecreateSessionFixScheduled;
@property (nonatomic, readwrite, strong) SCCaptureSessionFixer *captureSessionFixer;
@property (nonatomic, readwrite, strong) SCBlackCameraDetector *blackCameraDetector;
@property (nonatomic, readwrite, strong) id<SCDeviceMotionProvider> deviceMotionProvider;
@property (nonatomic, readwrite, strong) id<SCManagedCapturerARImageCaptureProvider> arImageCaptureProvider;
@property (nonatomic, readwrite, strong) id<SCFileInputDecider> fileInputDecider;
@property (nonatomic, readwrite, strong)
id<SCManagedCapturePreviewLayerControllerDelegate> previewLayerControllerDelegate;
@end