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.
377 lines
15 KiB
377 lines
15 KiB
//
|
|
// SCCameraTweaks.h
|
|
// Snapchat
|
|
//
|
|
// Created by Liu Liu on 9/16/15.
|
|
// Copyright © 2015 Snapchat, Inc. All rights reserved.
|
|
//
|
|
|
|
#import <SCBase/SCMacros.h>
|
|
#import <SCCameraFoundation/SCManagedCaptureDevicePosition.h>
|
|
#import <SCTweakAdditions/SCTweakDefines.h>
|
|
|
|
#import <Tweaks/FBTweakInline.h>
|
|
|
|
#import <CoreGraphics/CoreGraphics.h>
|
|
#import <Foundation/Foundation.h>
|
|
|
|
// Core Camera
|
|
|
|
typedef NS_ENUM(NSUInteger, SCManagedCaptureDeviceZoomHandlerType) {
|
|
SCManagedCaptureDeviceDefaultZoom,
|
|
SCManagedCaptureDeviceSavitzkyGolayFilter,
|
|
SCManagedCaptureDeviceLinearInterpolation,
|
|
};
|
|
|
|
typedef NS_ENUM(NSUInteger, SCCameraTweaksStrategyType) {
|
|
SCCameraTweaksStrategyFollowABTest = 0,
|
|
SCCameraTweaksStrategyOverrideToYes,
|
|
SCCameraTweaksStrategyOverrideToNo
|
|
};
|
|
|
|
typedef NS_ENUM(NSUInteger, SCCameraHandsFreeModeType) {
|
|
SCCameraHandsFreeModeTypeABTest = 0,
|
|
SCCameraHandsFreeModeTypeDisabled,
|
|
SCCameraHandsFreeModeTypeMainOnly,
|
|
SCCameraHandsFreeModeTypeChatMoveCaptureButton,
|
|
SCCameraHandsFreeModeTypeMainAndChat,
|
|
SCCameraHandsFreeModeTypeLeftOfCapture,
|
|
};
|
|
|
|
/// Face detection and focus strategy in Tweak. There are less options in internal Tweaks than the A/B testing
|
|
/// strategies.
|
|
typedef NS_ENUM(NSUInteger, SCCameraFaceFocusModeStrategyType) {
|
|
SCCameraFaceFocusModeStrategyTypeABTest = 0,
|
|
SCCameraFaceFocusModeStrategyTypeDisabled, // Disabled for both cameras.
|
|
SCCameraFaceFocusModeStrategyTypeOffByDefault, // Enabled for both cameras, but is off by default.
|
|
SCCameraFaceFocusModeStrategyTypeOnByDefault, // Enabled for both cameras, but is off by default.
|
|
};
|
|
|
|
typedef NS_ENUM(NSUInteger, SCCameraFaceFocusDetectionMethodType) {
|
|
SCCameraFaceFocusDetectionMethodTypeABTest = 0,
|
|
SCCameraFaceFocusDetectionMethodTypeCIDetector, // Use SCCaptureCoreImageFaceDetector
|
|
SCCameraFaceFocusDetectionMethodTypeAVMetadata, // Use SCCaptureMetadataOutputDetector
|
|
};
|
|
|
|
SC_EXTERN_C_BEGIN
|
|
|
|
extern SCManagedCaptureDeviceZoomHandlerType SCCameraTweaksDeviceZoomHandlerStrategy(void);
|
|
|
|
extern BOOL SCCameraTweaksBlackCameraRecoveryEnabled(void);
|
|
|
|
extern BOOL SCCameraTweaksMicPermissionEnabled(void);
|
|
|
|
extern BOOL SCCameraTweaksEnableCaptureKeepRecordedVideo(void);
|
|
|
|
extern BOOL SCCameraTweaksEnableHandsFreeXToCancel(void);
|
|
extern SCCameraHandsFreeModeType SCCameraTweaksHandsFreeMode(void);
|
|
|
|
BOOL SCCameraTweaksEnableShortPreviewTransitionAnimationDuration(void);
|
|
|
|
extern BOOL SCCameraTweaksEnablePreviewPresenterFastPreview(void);
|
|
|
|
extern BOOL SCCameraTweaksEnableCaptureSharePerformer(void);
|
|
|
|
extern BOOL SCCameraTweaksEnableFaceDetectionFocus(SCManagedCaptureDevicePosition captureDevicePosition);
|
|
|
|
extern BOOL SCCameraTweaksTurnOnFaceDetectionFocusByDefault(SCManagedCaptureDevicePosition captureDevicePosition);
|
|
|
|
extern SCCameraFaceFocusDetectionMethodType SCCameraFaceFocusDetectionMethod(void);
|
|
|
|
extern CGFloat SCCameraFaceFocusMinFaceSize(void);
|
|
|
|
extern BOOL SCCameraTweaksSessionLightWeightFixEnabled(void);
|
|
|
|
SC_EXTERN_C_END
|
|
|
|
static inline BOOL SCCameraTweaksEnableVideoStabilization(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera", @"Enable video stabilization", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableForceTouchToToggleCamera(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Recording", @"Force Touch to Toggle", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableStayOnCameraAfterPostingStory(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Story", @"Stay on camera after posting", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableKeepLastFrameOnCamera(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera", @"Keep last frame on camera", YES);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksSmoothAutoFocusWhileRecording(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera", @"Smooth autofocus while recording", YES);
|
|
}
|
|
|
|
static inline NSInteger SCCameraExposureAdjustmentMode(void)
|
|
{
|
|
return [FBTweakValue(
|
|
@"Camera", @"Core Camera", @"Adjust Exposure", (id) @0,
|
|
(@{ @0 : @"NO",
|
|
@1 : @"Dynamic enhancement",
|
|
@2 : @"Night vision",
|
|
@3 : @"Inverted night vision" })) integerValue];
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksRotateToggleCameraButton(void)
|
|
{
|
|
return SCTweakValueWithHalt(@"Camera", @"Core Camera", @"Rotate Toggle-Camera Button", NO);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksRotateToggleCameraButtonTime(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera", @"Toggle-Camera Button Rotation Time", 0.3);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksDefaultPortrait(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera", @"Default to Portrait Orientation", YES);
|
|
}
|
|
|
|
// For test purpose
|
|
static inline BOOL SCCameraTweaksTranscodingAlwaysFails(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera", @"Transcoding always fails", NO);
|
|
}
|
|
|
|
// This tweak disables the video masking behavior of the snap overlays;
|
|
// Intended to be used by curators who are on-site snapping special events.
|
|
// Ping [email protected] for any questions/comments
|
|
static inline BOOL SCCameraTweaksDisableOverlayVideoMask(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Creative Tools", @"Disable Overlay Video Masking", NO);
|
|
}
|
|
|
|
static inline NSInteger SCCameraTweaksDelayTurnOnFilters(void)
|
|
{
|
|
return [FBTweakValue(@"Camera", @"Core Camera", @"Delay turn on filter", (id) @0,
|
|
(@{ @0 : @"Respect A/B testing",
|
|
@1 : @"Override to YES",
|
|
@2 : @"Override to NO" })) integerValue];
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableExposurePointObservation(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Face Focus", @"Observe Exposure Point", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableFocusPointObservation(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Face Focus", @"Observe Focus Point", NO);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksSmoothZoomThresholdTime()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Zoom Strategy - Linear Interpolation", @"Threshold time", 0.3);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksSmoothZoomThresholdFactor()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Zoom Strategy - Linear Interpolation", @"Threshold factor diff", 0.25);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksSmoothZoomIntermediateFramesPerSecond()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Zoom Strategy - Linear Interpolation", @"Intermediate fps", 60);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksSmoothZoomDelayTolerantTime()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Zoom Strategy - Linear Interpolation", @"Delay tolerant time", 0.15);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksSmoothZoomMinStepLength()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Zoom Strategy - Linear Interpolation", @"Min step length", 0.05);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksExposureDeadline()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Adjust Exposure", @"Exposure Deadline", 0.2);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksKillFrontCamera(void)
|
|
{
|
|
return SCTweakValueWithHalt(@"Camera", @"Debugging", @"Kill Front Camera", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksKillBackCamera(void)
|
|
{
|
|
return SCTweakValueWithHalt(@"Camera", @"Debugging", @"Kill Back Camera", NO);
|
|
}
|
|
|
|
#if TARGET_IPHONE_SIMULATOR
|
|
|
|
static inline BOOL SCCameraTweaksUseRealMockImage(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Debugging", @"Use real mock image on simulator", YES);
|
|
}
|
|
|
|
#endif
|
|
|
|
static inline CGFloat SCCameraTweaksShortPreviewTransitionAnimationDuration()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Preview Transition", @"Short Animation Duration", 0.35);
|
|
}
|
|
|
|
static inline SCCameraTweaksStrategyType SCCameraTweaksPreviewTransitionAnimationDurationStrategy()
|
|
{
|
|
NSNumber *strategy = SCTweakValueWithHalt(@"Camera", @"Preview Transition", @"Enable Short Animation Duration",
|
|
(id) @(SCCameraTweaksStrategyFollowABTest), (@{
|
|
@(SCCameraTweaksStrategyFollowABTest) : @"Respect A/B testing",
|
|
@(SCCameraTweaksStrategyOverrideToYes) : @"Override to YES",
|
|
@(SCCameraTweaksStrategyOverrideToNo) : @"Override to NO"
|
|
}));
|
|
return (SCCameraTweaksStrategyType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksEnablePortraitModeButton(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Enable Button", NO);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksDepthBlurForegroundThreshold(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Foreground Blur Threshold", 0.3);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksDepthBlurBackgroundThreshold(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Background Blur Threshold", 0.1);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksBlurSigma(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Blur Sigma", 4.0);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableFilterInputFocusRect(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Filter Input Focus Rect", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnablePortraitModeTapToFocus(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Tap to Focus", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnablePortraitModeAutofocus(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Autofocus", NO);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksDepthToGrayscaleOverride(void)
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Portrait Mode", @"Depth to Grayscale Override", NO);
|
|
}
|
|
|
|
static inline SCCameraTweaksStrategyType SCCameraTweaksEnableHandsFreeXToCancelStrategy(void)
|
|
{
|
|
NSNumber *strategy = SCTweakValueWithHalt(@"Camera", @"Hands-Free Recording", @"X to Cancel",
|
|
(id) @(SCCameraTweaksStrategyFollowABTest), (@{
|
|
@(SCCameraTweaksStrategyFollowABTest) : @"Respect A/B testing",
|
|
@(SCCameraTweaksStrategyOverrideToYes) : @"Override to YES",
|
|
@(SCCameraTweaksStrategyOverrideToNo) : @"Override to NO"
|
|
}));
|
|
return (SCCameraTweaksStrategyType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline SCCameraHandsFreeModeType SCCameraTweaksHandsFreeModeType()
|
|
{
|
|
NSNumber *strategy = SCTweakValueWithHalt(
|
|
@"Camera", @"Hands-Free Recording", @"Enabled", (id) @(SCCameraHandsFreeModeTypeABTest), (@{
|
|
@(SCCameraHandsFreeModeTypeABTest) : @"Respect A/B testing",
|
|
@(SCCameraHandsFreeModeTypeDisabled) : @"Disable",
|
|
@(SCCameraHandsFreeModeTypeMainOnly) : @"Main Camera only",
|
|
@(SCCameraHandsFreeModeTypeChatMoveCaptureButton) : @"Main Camera + move Chat capture button",
|
|
@(SCCameraHandsFreeModeTypeMainAndChat) : @"Main + Chat Cameras",
|
|
@(SCCameraHandsFreeModeTypeLeftOfCapture) : @"Left of Main + Chat Cameras"
|
|
}));
|
|
return (SCCameraHandsFreeModeType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline SCCameraTweaksStrategyType SCCameraTweaksPreviewPresenterFastPreviewStrategy(void)
|
|
{
|
|
NSNumber *strategy = SCTweakValueWithHalt(@"Camera", @"Preview Presenter", @"Fast Preview",
|
|
(id) @(SCCameraTweaksStrategyFollowABTest), (@{
|
|
@(SCCameraTweaksStrategyFollowABTest) : @"Respect A/B testing",
|
|
@(SCCameraTweaksStrategyOverrideToYes) : @"Override to YES",
|
|
@(SCCameraTweaksStrategyOverrideToNo) : @"Override to NO"
|
|
}));
|
|
return (SCCameraTweaksStrategyType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline NSInteger SCCameraTweaksEnableCaptureKeepRecordedVideoStrategy(void)
|
|
{
|
|
NSNumber *strategy =
|
|
SCTweakValueWithHalt(@"Camera", @"Core Camera - Capture Keep Recorded Video",
|
|
@"Enable Capture Keep Recorded Video", (id) @(SCCameraTweaksStrategyFollowABTest), (@{
|
|
@(SCCameraTweaksStrategyFollowABTest) : @"Respect A/B testing",
|
|
@(SCCameraTweaksStrategyOverrideToYes) : @"Override to YES",
|
|
@(SCCameraTweaksStrategyOverrideToNo) : @"Override to NO"
|
|
}));
|
|
return (SCCameraTweaksStrategyType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline NSInteger SCCameraTweaksEnableCaptureSharePerformerStrategy(void)
|
|
{
|
|
NSNumber *strategy =
|
|
SCTweakValueWithHalt(@"Camera", @"Core Camera - Capture Share Performer", @"Enable Capture Share Performer",
|
|
(id) @(SCCameraTweaksStrategyFollowABTest), (@{
|
|
@(SCCameraTweaksStrategyFollowABTest) : @"Respect A/B testing",
|
|
@(SCCameraTweaksStrategyOverrideToYes) : @"Override to YES",
|
|
@(SCCameraTweaksStrategyOverrideToNo) : @"Override to NO"
|
|
}));
|
|
return (SCCameraTweaksStrategyType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline SCCameraFaceFocusModeStrategyType SCCameraTweaksFaceFocusStrategy()
|
|
{
|
|
NSNumber *strategy =
|
|
SCTweakValueWithHalt(@"Camera", @"Core Camera - Face Focus", @"Enable Face Focus",
|
|
(id) @(SCCameraFaceFocusModeStrategyTypeABTest), (@{
|
|
@(SCCameraFaceFocusModeStrategyTypeABTest) : @"Respect A/B testing",
|
|
@(SCCameraFaceFocusModeStrategyTypeDisabled) : @"Disabled",
|
|
@(SCCameraFaceFocusModeStrategyTypeOffByDefault) : @"Enabled, off by default",
|
|
@(SCCameraFaceFocusModeStrategyTypeOnByDefault) : @"Enabled, on by default",
|
|
}));
|
|
return (SCCameraFaceFocusModeStrategyType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline SCCameraFaceFocusDetectionMethodType SCCameraTweaksFaceFocusDetectionMethodType()
|
|
{
|
|
NSNumber *strategy =
|
|
SCTweakValueWithHalt(@"Camera", @"Core Camera - Face Focus", @"Detection Method",
|
|
(id) @(SCCameraFaceFocusDetectionMethodTypeABTest), (@{
|
|
@(SCCameraFaceFocusDetectionMethodTypeABTest) : @"Respect A/B testing",
|
|
@(SCCameraFaceFocusDetectionMethodTypeCIDetector) : @"CIDetector",
|
|
@(SCCameraFaceFocusDetectionMethodTypeAVMetadata) : @"AVMetadata",
|
|
}));
|
|
return (SCCameraFaceFocusDetectionMethodType)[strategy unsignedIntegerValue];
|
|
}
|
|
|
|
static inline int SCCameraTweaksFaceFocusDetectionFrequency()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Face Focus", @"Detection Frequency", 3, 1, 30);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksFaceFocusMinFaceSizeRespectABTesting()
|
|
{
|
|
return SCTweakValueWithHalt(@"Camera", @"Core Camera - Face Focus", @"Min Face Size Respect AB", YES);
|
|
}
|
|
|
|
static inline CGFloat SCCameraTweaksFaceFocusMinFaceSizeValue()
|
|
{
|
|
return FBTweakValue(@"Camera", @"Core Camera - Face Focus", @"Min Face Size", 0.25, 0.01, 0.5);
|
|
}
|
|
|
|
static inline BOOL SCCameraTweaksEnableDualCamera(void)
|
|
{
|
|
return SCTweakValueWithHalt(@"Camera", @"Core Camera - Dual Camera", @"Enable Dual Camera", NO);
|
|
}
|