Fixed Location & Storage issues

This commit is contained in:
2024-05-25 11:05:02 +09:00
parent e55674e1b9
commit 6a49aed98d
861 changed files with 80074 additions and 402 deletions

View File

@ -0,0 +1,32 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@import Foundation;
#import <Flutter/Flutter.h>
typedef void (^FLTCameraPermissionRequestCompletionHandler)(FlutterError *);
/// Requests camera access permission.
///
/// If it is the first time requesting camera access, a permission dialog will show up on the
/// screen. Otherwise AVFoundation simply returns the user's previous choice, and in this case the
/// user will have to update the choice in Settings app.
///
/// @param handler if access permission is (or was previously) granted, completion handler will be
/// called without error; Otherwise completion handler will be called with error. Handler can be
/// called on an arbitrary dispatch queue.
extern void FLTRequestCameraPermissionWithCompletionHandler(
FLTCameraPermissionRequestCompletionHandler handler);
/// Requests audio access permission.
///
/// If it is the first time requesting audio access, a permission dialog will show up on the
/// screen. Otherwise AVFoundation simply returns the user's previous choice, and in this case the
/// user will have to update the choice in Settings app.
///
/// @param handler if access permission is (or was previously) granted, completion handler will be
/// called without error; Otherwise completion handler will be called with error. Handler can be
/// called on an arbitrary dispatch queue.
extern void FLTRequestAudioPermissionWithCompletionHandler(
FLTCameraPermissionRequestCompletionHandler handler);

View File

@ -0,0 +1,8 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Flutter/Flutter.h>
@interface CameraPlugin : NSObject <FlutterPlugin>
@end

View File

@ -0,0 +1,51 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This header is available in the Test module. Import via "@import camera_avfoundation.Test;"
#import "CameraPlugin.h"
#import "FLTCam.h"
#import "FLTThreadSafeFlutterResult.h"
/// APIs exposed for unit testing.
@interface CameraPlugin ()
/// All FLTCam's state access and capture session related operations should be on run on this queue.
@property(nonatomic, strong) dispatch_queue_t captureSessionQueue;
/// An internal camera object that manages camera's state and performs camera operations.
@property(nonatomic, strong) FLTCam *camera;
/// A thread safe wrapper of the method channel used to send device events such as orientation
/// changes.
@property(nonatomic, strong) FLTThreadSafeMethodChannel *deviceEventMethodChannel;
/// Inject @p FlutterTextureRegistry and @p FlutterBinaryMessenger for unit testing.
- (instancetype)initWithRegistry:(NSObject<FlutterTextureRegistry> *)registry
messenger:(NSObject<FlutterBinaryMessenger> *)messenger
NS_DESIGNATED_INITIALIZER;
/// Hide the default public constructor.
- (instancetype)init NS_UNAVAILABLE;
/// Handles `FlutterMethodCall`s and ensures result is send on the main dispatch queue.
///
/// @param call The method call command object.
/// @param result A wrapper around the `FlutterResult` callback which ensures the callback is called
/// on the main dispatch queue.
- (void)handleMethodCallAsync:(FlutterMethodCall *)call result:(FLTThreadSafeFlutterResult *)result;
/// Called by the @c NSNotificationManager each time the device's orientation is changed.
///
/// @param notification @c NSNotification instance containing a reference to the `UIDevice` object
/// that triggered the orientation change.
- (void)orientationChanged:(NSNotification *)notification;
/// Creates FLTCam on session queue and reports the creation result.
/// @param createMethodCall the create method call
/// @param result a thread safe flutter result wrapper object to report creation result.
- (void)createCameraOnSessionQueueWithCreateMethodCall:(FlutterMethodCall *)createMethodCall
result:(FLTThreadSafeFlutterResult *)result;
@end

View File

@ -0,0 +1,146 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@import AVFoundation;
@import Foundation;
NS_ASSUME_NONNULL_BEGIN
#pragma mark - flash mode
/**
* Represents camera's flash mode. Mirrors `FlashMode` enum in flash_mode.dart.
*/
typedef NS_ENUM(NSInteger, FLTFlashMode) {
FLTFlashModeOff,
FLTFlashModeAuto,
FLTFlashModeAlways,
FLTFlashModeTorch,
// This should never occur; it indicates an unknown value was received over
// the platform channel.
FLTFlashModeInvalid,
};
/**
* Gets FLTFlashMode from its string representation.
* @param mode a string representation of the FLTFlashMode.
*/
extern FLTFlashMode FLTGetFLTFlashModeForString(NSString *mode);
/**
* Gets AVCaptureFlashMode from FLTFlashMode.
* @param mode flash mode.
*/
extern AVCaptureFlashMode FLTGetAVCaptureFlashModeForFLTFlashMode(FLTFlashMode mode);
#pragma mark - exposure mode
/**
* Represents camera's exposure mode. Mirrors ExposureMode in camera.dart.
*/
typedef NS_ENUM(NSInteger, FLTExposureMode) {
FLTExposureModeAuto,
FLTExposureModeLocked,
// This should never occur; it indicates an unknown value was received over
// the platform channel.
FLTExposureModeInvalid,
};
/**
* Gets a string representation of exposure mode.
* @param mode exposure mode
*/
extern NSString *FLTGetStringForFLTExposureMode(FLTExposureMode mode);
/**
* Gets FLTExposureMode from its string representation.
* @param mode a string representation of the FLTExposureMode.
*/
extern FLTExposureMode FLTGetFLTExposureModeForString(NSString *mode);
#pragma mark - focus mode
/**
* Represents camera's focus mode. Mirrors FocusMode in camera.dart.
*/
typedef NS_ENUM(NSInteger, FLTFocusMode) {
FLTFocusModeAuto,
FLTFocusModeLocked,
// This should never occur; it indicates an unknown value was received over
// the platform channel.
FLTFocusModeInvalid,
};
/**
* Gets a string representation from FLTFocusMode.
* @param mode focus mode
*/
extern NSString *FLTGetStringForFLTFocusMode(FLTFocusMode mode);
/**
* Gets FLTFocusMode from its string representation.
* @param mode a string representation of focus mode.
*/
extern FLTFocusMode FLTGetFLTFocusModeForString(NSString *mode);
#pragma mark - device orientation
/**
* Gets UIDeviceOrientation from its string representation.
*/
extern UIDeviceOrientation FLTGetUIDeviceOrientationForString(NSString *orientation);
/**
* Gets a string representation of UIDeviceOrientation.
*/
extern NSString *FLTGetStringForUIDeviceOrientation(UIDeviceOrientation orientation);
#pragma mark - resolution preset
/**
* Represents camera's resolution present. Mirrors ResolutionPreset in camera.dart.
*/
typedef NS_ENUM(NSInteger, FLTResolutionPreset) {
FLTResolutionPresetVeryLow,
FLTResolutionPresetLow,
FLTResolutionPresetMedium,
FLTResolutionPresetHigh,
FLTResolutionPresetVeryHigh,
FLTResolutionPresetUltraHigh,
FLTResolutionPresetMax,
// This should never occur; it indicates an unknown value was received over
// the platform channel.
FLTResolutionPresetInvalid,
};
/**
* Gets FLTResolutionPreset from its string representation.
* @param preset a string representation of FLTResolutionPreset.
*/
extern FLTResolutionPreset FLTGetFLTResolutionPresetForString(NSString *preset);
#pragma mark - video format
/**
* Gets VideoFormat from its string representation.
*/
extern OSType FLTGetVideoFormatFromString(NSString *videoFormatString);
/**
* Represents image format. Mirrors ImageFileFormat in camera.dart.
*/
typedef NS_ENUM(NSInteger, FCPFileFormat) {
FCPFileFormatJPEG,
FCPFileFormatHEIF,
FCPFileFormatInvalid,
};
#pragma mark - image extension
/**
* Gets a string representation of ImageFileFormat.
*/
extern FCPFileFormat FCPGetFileFormatFromString(NSString *fileFormatString);
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,114 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@import AVFoundation;
@import Foundation;
@import Flutter;
#import "CameraProperties.h"
#import "FLTThreadSafeEventChannel.h"
#import "FLTThreadSafeFlutterResult.h"
#import "FLTThreadSafeMethodChannel.h"
#import "FLTThreadSafeTextureRegistry.h"
NS_ASSUME_NONNULL_BEGIN
/**
* A class that manages camera's state and performs camera operations.
*/
@interface FLTCam : NSObject <FlutterTexture>
@property(readonly, nonatomic) AVCaptureDevice *captureDevice;
@property(readonly, nonatomic) CGSize previewSize;
@property(assign, nonatomic) BOOL isPreviewPaused;
@property(nonatomic, copy) void (^onFrameAvailable)(void);
@property(nonatomic) FLTThreadSafeMethodChannel *methodChannel;
@property(assign, nonatomic) FLTResolutionPreset resolutionPreset;
@property(assign, nonatomic) FLTExposureMode exposureMode;
@property(assign, nonatomic) FLTFocusMode focusMode;
@property(assign, nonatomic) FLTFlashMode flashMode;
// Format used for video and image streaming.
@property(assign, nonatomic) FourCharCode videoFormat;
@property(assign, nonatomic) FCPFileFormat fileFormat;
/// Initializes an `FLTCam` instance.
/// @param cameraName a name used to uniquely identify the camera.
/// @param resolutionPreset the resolution preset
/// @param enableAudio YES if audio should be enabled for video capturing; NO otherwise.
/// @param orientation the orientation of camera
/// @param captureSessionQueue the queue on which camera's capture session operations happen.
/// @param error report to the caller if any error happened creating the camera.
- (instancetype)initWithCameraName:(NSString *)cameraName
resolutionPreset:(NSString *)resolutionPreset
enableAudio:(BOOL)enableAudio
orientation:(UIDeviceOrientation)orientation
captureSessionQueue:(dispatch_queue_t)captureSessionQueue
error:(NSError **)error;
- (void)start;
- (void)stop;
- (void)setDeviceOrientation:(UIDeviceOrientation)orientation;
- (void)captureToFile:(FLTThreadSafeFlutterResult *)result;
- (void)close;
- (void)startVideoRecordingWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)setImageFileFormat:(FCPFileFormat)fileFormat;
/**
* Starts recording a video with an optional streaming messenger.
* If the messenger is non-null then it will be called for each
* captured frame, allowing streaming concurrently with recording.
*
* @param messenger Nullable messenger for capturing each frame.
*/
- (void)startVideoRecordingWithResult:(FLTThreadSafeFlutterResult *)result
messengerForStreaming:(nullable NSObject<FlutterBinaryMessenger> *)messenger;
- (void)stopVideoRecordingWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)pauseVideoRecordingWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)resumeVideoRecordingWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)lockCaptureOrientationWithResult:(FLTThreadSafeFlutterResult *)result
orientation:(NSString *)orientationStr;
- (void)unlockCaptureOrientationWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)setFlashModeWithResult:(FLTThreadSafeFlutterResult *)result mode:(NSString *)modeStr;
- (void)setExposureModeWithResult:(FLTThreadSafeFlutterResult *)result mode:(NSString *)modeStr;
- (void)setFocusModeWithResult:(FLTThreadSafeFlutterResult *)result mode:(NSString *)modeStr;
- (void)applyFocusMode;
/**
* Acknowledges the receipt of one image stream frame.
*
* This should be called each time a frame is received. Failing to call it may
* cause later frames to be dropped instead of streamed.
*/
- (void)receivedImageStreamData;
/**
* Applies FocusMode on the AVCaptureDevice.
*
* If the @c focusMode is set to FocusModeAuto the AVCaptureDevice is configured to use
* AVCaptureFocusModeContinuousModeAutoFocus when supported, otherwise it is set to
* AVCaptureFocusModeAutoFocus. If neither AVCaptureFocusModeContinuousModeAutoFocus nor
* AVCaptureFocusModeAutoFocus are supported focus mode will not be set.
* If @c focusMode is set to FocusModeLocked the AVCaptureDevice is configured to use
* AVCaptureFocusModeAutoFocus. If AVCaptureFocusModeAutoFocus is not supported focus mode will not
* be set.
*
* @param focusMode The focus mode that should be applied to the @captureDevice instance.
* @param captureDevice The AVCaptureDevice to which the @focusMode will be applied.
*/
- (void)applyFocusMode:(FLTFocusMode)focusMode onDevice:(AVCaptureDevice *)captureDevice;
- (void)pausePreviewWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)resumePreviewWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)setDescriptionWhileRecording:(NSString *)cameraName
result:(FLTThreadSafeFlutterResult *)result;
- (void)setExposurePointWithResult:(FLTThreadSafeFlutterResult *)result x:(double)x y:(double)y;
- (void)setFocusPointWithResult:(FLTThreadSafeFlutterResult *)result x:(double)x y:(double)y;
- (void)setExposureOffsetWithResult:(FLTThreadSafeFlutterResult *)result offset:(double)offset;
- (void)startImageStreamWithMessenger:(NSObject<FlutterBinaryMessenger> *)messenger;
- (void)stopImageStream;
- (void)getMaxZoomLevelWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)getMinZoomLevelWithResult:(FLTThreadSafeFlutterResult *)result;
- (void)setZoomLevel:(CGFloat)zoom Result:(FLTThreadSafeFlutterResult *)result;
- (void)setUpCaptureSessionForAudio;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,62 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "FLTCam.h"
#import "FLTSavePhotoDelegate.h"
@interface FLTImageStreamHandler : NSObject <FlutterStreamHandler>
/// The queue on which `eventSink` property should be accessed.
@property(nonatomic, strong) dispatch_queue_t captureSessionQueue;
/// The event sink to stream camera events to Dart.
///
/// The property should only be accessed on `captureSessionQueue`.
/// The block itself should be invoked on the main queue.
@property FlutterEventSink eventSink;
@end
// APIs exposed for unit testing.
@interface FLTCam ()
/// The output for video capturing.
@property(readonly, nonatomic) AVCaptureVideoDataOutput *captureVideoOutput;
/// The output for photo capturing. Exposed setter for unit tests.
@property(strong, nonatomic) AVCapturePhotoOutput *capturePhotoOutput;
/// True when images from the camera are being streamed.
@property(assign, nonatomic) BOOL isStreamingImages;
/// A dictionary to retain all in-progress FLTSavePhotoDelegates. The key of the dictionary is the
/// AVCapturePhotoSettings's uniqueID for each photo capture operation, and the value is the
/// FLTSavePhotoDelegate that handles the result of each photo capture operation. Note that photo
/// capture operations may overlap, so FLTCam has to keep track of multiple delegates in progress,
/// instead of just a single delegate reference.
@property(readonly, nonatomic)
NSMutableDictionary<NSNumber *, FLTSavePhotoDelegate *> *inProgressSavePhotoDelegates;
/// Delegate callback when receiving a new video or audio sample.
/// Exposed for unit tests.
- (void)captureOutput:(AVCaptureOutput *)output
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection;
/// Initializes a camera instance.
/// Allows for injecting dependencies that are usually internal.
- (instancetype)initWithCameraName:(NSString *)cameraName
resolutionPreset:(NSString *)resolutionPreset
enableAudio:(BOOL)enableAudio
orientation:(UIDeviceOrientation)orientation
videoCaptureSession:(AVCaptureSession *)videoCaptureSession
audioCaptureSession:(AVCaptureSession *)audioCaptureSession
captureSessionQueue:(dispatch_queue_t)captureSessionQueue
error:(NSError **)error;
/// Start streaming images.
- (void)startImageStreamWithMessenger:(NSObject<FlutterBinaryMessenger> *)messenger
imageStreamHandler:(FLTImageStreamHandler *)imageStreamHandler;
@end

View File

@ -0,0 +1,38 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@import AVFoundation;
@import Foundation;
#import "FLTThreadSafeFlutterResult.h"
NS_ASSUME_NONNULL_BEGIN
/// The completion handler block for save photo operations.
/// Can be called from either main queue or IO queue.
/// If success, `error` will be present and `path` will be nil. Otherewise, `error` will be nil and
/// `path` will be present.
/// @param path the path for successfully saved photo file.
/// @param error photo capture error or IO error.
typedef void (^FLTSavePhotoDelegateCompletionHandler)(NSString *_Nullable path,
NSError *_Nullable error);
/**
Delegate object that handles photo capture results.
*/
@interface FLTSavePhotoDelegate : NSObject <AVCapturePhotoCaptureDelegate>
/**
* Initialize a photo capture delegate.
* @param path the path for captured photo file.
* @param ioQueue the queue on which captured photos are written to disk.
* @param completionHandler The completion handler block for save photo operations. Can
* be called from either main queue or IO queue.
*/
- (instancetype)initWithPath:(NSString *)path
ioQueue:(dispatch_queue_t)ioQueue
completionHandler:(FLTSavePhotoDelegateCompletionHandler)completionHandler;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,26 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "FLTSavePhotoDelegate.h"
/**
API exposed for unit tests.
*/
@interface FLTSavePhotoDelegate ()
/// The completion handler block for capture and save photo operations.
/// Can be called from either main queue or IO queue.
/// Exposed for unit tests to manually trigger the completion.
@property(readonly, nonatomic) FLTSavePhotoDelegateCompletionHandler completionHandler;
/// The path for captured photo file.
/// Exposed for unit tests to verify the captured photo file path.
@property(readwrite, nonatomic) NSString *filePath;
/// Handler to write captured photo data into a file.
/// @param error the capture error.
/// @param photoDataProvider a closure that provides photo data.
- (void)handlePhotoCaptureResultWithError:(NSError *)error
photoDataProvider:(NSData * (^)(void))photoDataProvider;
@end

View File

@ -0,0 +1,30 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN
/**
* A thread safe wrapper for FlutterEventChannel that can be called from any thread, by dispatching
* its underlying engine calls to the main thread.
*/
@interface FLTThreadSafeEventChannel : NSObject
/**
* Creates a FLTThreadSafeEventChannel by wrapping a FlutterEventChannel object.
* @param channel The FlutterEventChannel object to be wrapped.
*/
- (instancetype)initWithEventChannel:(FlutterEventChannel *)channel;
/*
* Registers a handler on the main thread for stream setup requests from the Flutter side.
# The completion block runs on the main thread.
*/
- (void)setStreamHandler:(nullable NSObject<FlutterStreamHandler> *)handler
completion:(void (^)(void))completion;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,62 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN
/**
* A thread safe wrapper for FlutterResult that can be called from any thread, by dispatching its
* underlying engine calls to the main thread.
*/
@interface FLTThreadSafeFlutterResult : NSObject
/**
* Gets the original FlutterResult object wrapped by this FLTThreadSafeFlutterResult instance.
*/
@property(readonly, nonatomic) FlutterResult flutterResult;
/**
* Initializes with a FlutterResult object.
* @param result The FlutterResult object that the result will be given to.
*/
- (instancetype)initWithResult:(FlutterResult)result;
/**
* Sends a successful result on the main thread without any data.
*/
- (void)sendSuccess;
/**
* Sends a successful result on the main thread with data.
* @param data Result data that is send to the Flutter Dart side.
*/
- (void)sendSuccessWithData:(id)data;
/**
* Sends an NSError as result on the main thread.
* @param error Error that will be send as FlutterError.
*/
- (void)sendError:(NSError *)error;
/**
* Sends a FlutterError as result on the main thread.
* @param flutterError FlutterError that will be sent to the Flutter Dart side.
*/
- (void)sendFlutterError:(FlutterError *)flutterError;
/**
* Sends a FlutterError as result on the main thread.
*/
- (void)sendErrorWithCode:(NSString *)code
message:(nullable NSString *)message
details:(nullable id)details;
/**
* Sends FlutterMethodNotImplemented as result on the main thread.
*/
- (void)sendNotImplemented;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,28 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN
/**
* A thread safe wrapper for FlutterMethodChannel that can be called from any thread, by dispatching
* its underlying engine calls to the main thread.
*/
@interface FLTThreadSafeMethodChannel : NSObject
/**
* Creates a FLTThreadSafeMethodChannel by wrapping a FlutterMethodChannel object.
* @param channel The FlutterMethodChannel object to be wrapped.
*/
- (instancetype)initWithMethodChannel:(FlutterMethodChannel *)channel;
/**
* Invokes the specified flutter method on the main thread with the specified arguments.
*/
- (void)invokeMethod:(NSString *)method arguments:(nullable id)arguments;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,46 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN
/**
* A thread safe wrapper for FlutterTextureRegistry that can be called from any thread, by
* dispatching its underlying engine calls to the main thread.
*/
@interface FLTThreadSafeTextureRegistry : NSObject
/**
* Creates a FLTThreadSafeTextureRegistry by wrapping an object conforming to
* FlutterTextureRegistry.
* @param registry The FlutterTextureRegistry object to be wrapped.
*/
- (instancetype)initWithTextureRegistry:(NSObject<FlutterTextureRegistry> *)registry;
/**
* Registers a `FlutterTexture` on the main thread for usage in Flutter and returns an id that can
* be used to reference that texture when calling into Flutter with channels.
*
* On success the completion block completes with the pointer to the registered texture, else with
* 0. The completion block runs on the main thread.
*/
- (void)registerTexture:(NSObject<FlutterTexture> *)texture
completion:(void (^)(int64_t))completion;
/**
* Notifies the Flutter engine on the main thread that the given texture has been updated.
*/
- (void)textureFrameAvailable:(int64_t)textureId;
/**
* Notifies the Flutter engine on the main thread to unregister a `FlutterTexture` that has been
* previously registered with `registerTexture:`.
* @param textureId The result that was previously returned from `registerTexture:`.
*/
- (void)unregisterTexture:(int64_t)textureId;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,19 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/// Queue-specific context data to be associated with the capture session queue.
extern const char* FLTCaptureSessionQueueSpecific;
/// Ensures the given block to be run on the main queue.
/// If caller site is already on the main queue, the block will be run
/// synchronously. Otherwise, the block will be dispatched asynchronously to the
/// main queue.
/// @param block the block to be run on the main queue.
extern void FLTEnsureToRunOnMainQueue(dispatch_block_t block);
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,9 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Foundation/Foundation.h>
#import <camera_avfoundation/CameraPlugin.h>
FOUNDATION_EXPORT double cameraVersionNumber;
FOUNDATION_EXPORT const unsigned char cameraVersionString[];

View File

@ -0,0 +1,20 @@
framework module camera_avfoundation {
umbrella header "camera_avfoundation-umbrella.h"
export *
module * { export * }
explicit module Test {
header "CameraPlugin_Test.h"
header "CameraPermissionUtils.h"
header "CameraProperties.h"
header "FLTCam.h"
header "FLTCam_Test.h"
header "FLTSavePhotoDelegate_Test.h"
header "FLTThreadSafeEventChannel.h"
header "FLTThreadSafeFlutterResult.h"
header "FLTThreadSafeMethodChannel.h"
header "FLTThreadSafeTextureRegistry.h"
header "QueueUtils.h"
}
}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.apple.xcode.dsym.org.cocoapods.camera-avfoundation</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>0.0.1</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@ -0,0 +1,280 @@
---
triple: 'arm64-apple-darwin'
binary-path: '/Volumes/PortableSSD1TB/main/GifuTabi/rog_app/Flutter/Release/iphoneos/Release-iphoneos/camera_avfoundation/camera_avfoundation.framework/camera_avfoundation'
relocations:
- { offsetInCU: 0x33, offset: 0x1C6AA, size: 0x8, addend: 0x0, symName: _camera_avfoundationVersionString, symObjAddr: 0x0, symBinAddr: 0xED20, symSize: 0x0 }
- { offsetInCU: 0x67, offset: 0x1C6DE, size: 0x8, addend: 0x0, symName: _camera_avfoundationVersionNumber, symObjAddr: 0x38, symBinAddr: 0xED58, symSize: 0x0 }
- { offsetInCU: 0x27, offset: 0x1C71A, size: 0x8, addend: 0x0, symName: _FLTRequestPermission, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x198 }
- { offsetInCU: 0x72, offset: 0x1C765, size: 0x8, addend: 0x0, symName: _FLTRequestPermission, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x198 }
- { offsetInCU: 0x10E, offset: 0x1C801, size: 0x8, addend: 0x0, symName: ___FLTRequestPermission_block_invoke, symObjAddr: 0x198, symBinAddr: 0x4198, symSize: 0x94 }
- { offsetInCU: 0x1A4, offset: 0x1C897, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x22C, symBinAddr: 0x422C, symSize: 0x10 }
- { offsetInCU: 0x1CA, offset: 0x1C8BD, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x23C, symBinAddr: 0x423C, symSize: 0x8 }
- { offsetInCU: 0x1E7, offset: 0x1C8DA, size: 0x8, addend: 0x0, symName: _FLTRequestCameraPermissionWithCompletionHandler, symObjAddr: 0x244, symBinAddr: 0x4244, symSize: 0xC }
- { offsetInCU: 0x226, offset: 0x1C919, size: 0x8, addend: 0x0, symName: _FLTRequestAudioPermissionWithCompletionHandler, symObjAddr: 0x250, symBinAddr: 0x4250, symSize: 0xC }
- { offsetInCU: 0x27, offset: 0x1CAC2, size: 0x8, addend: 0x0, symName: '+[CameraPlugin registerWithRegistrar:]', symObjAddr: 0x0, symBinAddr: 0x425C, symSize: 0xF4 }
- { offsetInCU: 0x405, offset: 0x1CEA0, size: 0x8, addend: 0x0, symName: '+[CameraPlugin registerWithRegistrar:]', symObjAddr: 0x0, symBinAddr: 0x425C, symSize: 0xF4 }
- { offsetInCU: 0x45E, offset: 0x1CEF9, size: 0x8, addend: 0x0, symName: '-[CameraPlugin initWithRegistry:messenger:]', symObjAddr: 0xF4, symBinAddr: 0x4350, symSize: 0x10C }
- { offsetInCU: 0x526, offset: 0x1CFC1, size: 0x8, addend: 0x0, symName: '-[CameraPlugin initDeviceEventMethodChannel]', symObjAddr: 0x200, symBinAddr: 0x445C, symSize: 0x68 }
- { offsetInCU: 0x565, offset: 0x1D000, size: 0x8, addend: 0x0, symName: '-[CameraPlugin detachFromEngineForRegistrar:]', symObjAddr: 0x268, symBinAddr: 0x44C4, symSize: 0x38 }
- { offsetInCU: 0x59C, offset: 0x1D037, size: 0x8, addend: 0x0, symName: '-[CameraPlugin startOrientationListener]', symObjAddr: 0x2A0, symBinAddr: 0x44FC, symSize: 0xB4 }
- { offsetInCU: 0x5CC, offset: 0x1D067, size: 0x8, addend: 0x0, symName: '-[CameraPlugin orientationChanged:]', symObjAddr: 0x354, symBinAddr: 0x45B0, symSize: 0x110 }
- { offsetInCU: 0x664, offset: 0x1D0FF, size: 0x8, addend: 0x0, symName: '___35-[CameraPlugin orientationChanged:]_block_invoke', symObjAddr: 0x464, symBinAddr: 0x46C0, symSize: 0x74 }
- { offsetInCU: 0x6AB, offset: 0x1D146, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32w, symObjAddr: 0x4D8, symBinAddr: 0x4734, symSize: 0xC }
- { offsetInCU: 0x6D1, offset: 0x1D16C, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32w, symObjAddr: 0x4E4, symBinAddr: 0x4740, symSize: 0x8 }
- { offsetInCU: 0x6EE, offset: 0x1D189, size: 0x8, addend: 0x0, symName: '-[CameraPlugin sendDeviceOrientation:]', symObjAddr: 0x4EC, symBinAddr: 0x4748, symSize: 0xC4 }
- { offsetInCU: 0x758, offset: 0x1D1F3, size: 0x8, addend: 0x0, symName: '-[CameraPlugin handleMethodCall:result:]', symObjAddr: 0x5B0, symBinAddr: 0x480C, symSize: 0x120 }
- { offsetInCU: 0x7CF, offset: 0x1D26A, size: 0x8, addend: 0x0, symName: '___40-[CameraPlugin handleMethodCall:result:]_block_invoke', symObjAddr: 0x6D0, symBinAddr: 0x492C, symSize: 0x60 }
- { offsetInCU: 0x842, offset: 0x1D2DD, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40b48w, symObjAddr: 0x730, symBinAddr: 0x498C, symSize: 0x40 }
- { offsetInCU: 0x868, offset: 0x1D303, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40s48w, symObjAddr: 0x770, symBinAddr: 0x49CC, symSize: 0x30 }
- { offsetInCU: 0x885, offset: 0x1D320, size: 0x8, addend: 0x0, symName: '-[CameraPlugin handleMethodCallAsync:result:]', symObjAddr: 0x7A0, symBinAddr: 0x49FC, symSize: 0x13B4 }
- { offsetInCU: 0xB06, offset: 0x1D5A1, size: 0x8, addend: 0x0, symName: '___45-[CameraPlugin handleMethodCallAsync:result:]_block_invoke', symObjAddr: 0x1B54, symBinAddr: 0x5DB0, symSize: 0xAC }
- { offsetInCU: 0xB4D, offset: 0x1D5E8, size: 0x8, addend: 0x0, symName: '-[CameraPlugin handleCreateMethodCall:result:]', symObjAddr: 0x1C00, symBinAddr: 0x5E5C, symSize: 0x108 }
- { offsetInCU: 0xC49, offset: 0x1D6E4, size: 0x8, addend: 0x0, symName: '___46-[CameraPlugin handleCreateMethodCall:result:]_block_invoke', symObjAddr: 0x1D08, symBinAddr: 0x5F64, symSize: 0x164 }
- { offsetInCU: 0xD01, offset: 0x1D79C, size: 0x8, addend: 0x0, symName: '___46-[CameraPlugin handleCreateMethodCall:result:]_block_invoke_2', symObjAddr: 0x1E6C, symBinAddr: 0x60C8, symSize: 0x6C }
- { offsetInCU: 0xD8D, offset: 0x1D828, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40s48w, symObjAddr: 0x1ED8, symBinAddr: 0x6134, symSize: 0x38 }
- { offsetInCU: 0xDB3, offset: 0x1D84E, size: 0x8, addend: 0x0, symName: '-[CameraPlugin createCameraOnSessionQueueWithCreateMethodCall:result:]', symObjAddr: 0x1F10, symBinAddr: 0x616C, symSize: 0x11C }
- { offsetInCU: 0xE31, offset: 0x1D8CC, size: 0x8, addend: 0x0, symName: '___70-[CameraPlugin createCameraOnSessionQueueWithCreateMethodCall:result:]_block_invoke', symObjAddr: 0x202C, symBinAddr: 0x6288, symSize: 0x27C }
- { offsetInCU: 0xEFC, offset: 0x1D997, size: 0x8, addend: 0x0, symName: '___70-[CameraPlugin createCameraOnSessionQueueWithCreateMethodCall:result:]_block_invoke_2', symObjAddr: 0x22A8, symBinAddr: 0x6504, symSize: 0xC4 }
- { offsetInCU: 0xF4A, offset: 0x1D9E5, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x236C, symBinAddr: 0x65C8, symSize: 0x8 }
- { offsetInCU: 0xF6F, offset: 0x1DA0A, size: 0x8, addend: 0x0, symName: '-[CameraPlugin registry]', symObjAddr: 0x237C, symBinAddr: 0x65D0, symSize: 0x8 }
- { offsetInCU: 0xFA4, offset: 0x1DA3F, size: 0x8, addend: 0x0, symName: '-[CameraPlugin messenger]', symObjAddr: 0x2384, symBinAddr: 0x65D8, symSize: 0x8 }
- { offsetInCU: 0xFD9, offset: 0x1DA74, size: 0x8, addend: 0x0, symName: '-[CameraPlugin captureSessionQueue]', symObjAddr: 0x238C, symBinAddr: 0x65E0, symSize: 0x8 }
- { offsetInCU: 0x100E, offset: 0x1DAA9, size: 0x8, addend: 0x0, symName: '-[CameraPlugin setCaptureSessionQueue:]', symObjAddr: 0x2394, symBinAddr: 0x65E8, symSize: 0xC }
- { offsetInCU: 0x104D, offset: 0x1DAE8, size: 0x8, addend: 0x0, symName: '-[CameraPlugin camera]', symObjAddr: 0x23A0, symBinAddr: 0x65F4, symSize: 0x8 }
- { offsetInCU: 0x1082, offset: 0x1DB1D, size: 0x8, addend: 0x0, symName: '-[CameraPlugin setCamera:]', symObjAddr: 0x23A8, symBinAddr: 0x65FC, symSize: 0xC }
- { offsetInCU: 0x10C1, offset: 0x1DB5C, size: 0x8, addend: 0x0, symName: '-[CameraPlugin deviceEventMethodChannel]', symObjAddr: 0x23B4, symBinAddr: 0x6608, symSize: 0x8 }
- { offsetInCU: 0x10F6, offset: 0x1DB91, size: 0x8, addend: 0x0, symName: '-[CameraPlugin setDeviceEventMethodChannel:]', symObjAddr: 0x23BC, symBinAddr: 0x6610, symSize: 0xC }
- { offsetInCU: 0x1135, offset: 0x1DBD0, size: 0x8, addend: 0x0, symName: '-[CameraPlugin .cxx_destruct]', symObjAddr: 0x23C8, symBinAddr: 0x661C, symSize: 0x54 }
- { offsetInCU: 0x27, offset: 0x1E033, size: 0x8, addend: 0x0, symName: _FLTGetFLTFlashModeForString, symObjAddr: 0x0, symBinAddr: 0x6670, symSize: 0x98 }
- { offsetInCU: 0x145, offset: 0x1E151, size: 0x8, addend: 0x0, symName: _FLTGetFLTFlashModeForString, symObjAddr: 0x0, symBinAddr: 0x6670, symSize: 0x98 }
- { offsetInCU: 0x16F, offset: 0x1E17B, size: 0x8, addend: 0x0, symName: _FLTGetAVCaptureFlashModeForFLTFlashMode, symObjAddr: 0x98, symBinAddr: 0x6708, symSize: 0x20 }
- { offsetInCU: 0x199, offset: 0x1E1A5, size: 0x8, addend: 0x0, symName: _FLTGetStringForFLTExposureMode, symObjAddr: 0xB8, symBinAddr: 0x6728, symSize: 0x24 }
- { offsetInCU: 0x1C3, offset: 0x1E1CF, size: 0x8, addend: 0x0, symName: _FLTGetFLTExposureModeForString, symObjAddr: 0xDC, symBinAddr: 0x674C, symSize: 0x60 }
- { offsetInCU: 0x1ED, offset: 0x1E1F9, size: 0x8, addend: 0x0, symName: _FLTGetStringForFLTFocusMode, symObjAddr: 0x13C, symBinAddr: 0x67AC, symSize: 0x24 }
- { offsetInCU: 0x217, offset: 0x1E223, size: 0x8, addend: 0x0, symName: _FLTGetFLTFocusModeForString, symObjAddr: 0x160, symBinAddr: 0x67D0, symSize: 0x60 }
- { offsetInCU: 0x241, offset: 0x1E24D, size: 0x8, addend: 0x0, symName: _FLTGetUIDeviceOrientationForString, symObjAddr: 0x1C0, symBinAddr: 0x6830, symSize: 0x90 }
- { offsetInCU: 0x26B, offset: 0x1E277, size: 0x8, addend: 0x0, symName: _FLTGetStringForUIDeviceOrientation, symObjAddr: 0x250, symBinAddr: 0x68C0, symSize: 0x28 }
- { offsetInCU: 0x295, offset: 0x1E2A1, size: 0x8, addend: 0x0, symName: _FLTGetFLTResolutionPresetForString, symObjAddr: 0x278, symBinAddr: 0x68E8, symSize: 0xEC }
- { offsetInCU: 0x2BF, offset: 0x1E2CB, size: 0x8, addend: 0x0, symName: _FLTGetVideoFormatFromString, symObjAddr: 0x364, symBinAddr: 0x69D4, symSize: 0x70 }
- { offsetInCU: 0x2E9, offset: 0x1E2F5, size: 0x8, addend: 0x0, symName: _FCPGetFileFormatFromString, symObjAddr: 0x3D4, symBinAddr: 0x6A44, symSize: 0x60 }
- { offsetInCU: 0x27, offset: 0x1E389, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler initWithCaptureSessionQueue:]', symObjAddr: 0x0, symBinAddr: 0x6AA4, symSize: 0x60 }
- { offsetInCU: 0x40, offset: 0x1E3A2, size: 0x8, addend: 0x0, symName: _errorMethod, symObjAddr: 0x6D80, symBinAddr: 0x184B0, symSize: 0x0 }
- { offsetInCU: 0x904, offset: 0x1EC66, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler initWithCaptureSessionQueue:]', symObjAddr: 0x0, symBinAddr: 0x6AA4, symSize: 0x60 }
- { offsetInCU: 0x947, offset: 0x1ECA9, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler onCancelWithArguments:]', symObjAddr: 0x60, symBinAddr: 0x6B04, symSize: 0xDC }
- { offsetInCU: 0x9C5, offset: 0x1ED27, size: 0x8, addend: 0x0, symName: '___47-[FLTImageStreamHandler onCancelWithArguments:]_block_invoke', symObjAddr: 0x13C, symBinAddr: 0x6BE0, symSize: 0x30 }
- { offsetInCU: 0x9FD, offset: 0x1ED5F, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler onListenWithArguments:eventSink:]', symObjAddr: 0x180, symBinAddr: 0x6C10, symSize: 0x10C }
- { offsetInCU: 0xA78, offset: 0x1EDDA, size: 0x8, addend: 0x0, symName: '___57-[FLTImageStreamHandler onListenWithArguments:eventSink:]_block_invoke', symObjAddr: 0x28C, symBinAddr: 0x6D1C, symSize: 0x34 }
- { offsetInCU: 0xABF, offset: 0x1EE21, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b40w, symObjAddr: 0x2C0, symBinAddr: 0x6D50, symSize: 0x38 }
- { offsetInCU: 0xAE5, offset: 0x1EE47, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40w, symObjAddr: 0x2F8, symBinAddr: 0x6D88, symSize: 0x28 }
- { offsetInCU: 0xB02, offset: 0x1EE64, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler captureSessionQueue]', symObjAddr: 0x320, symBinAddr: 0x6DB0, symSize: 0x8 }
- { offsetInCU: 0xB37, offset: 0x1EE99, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler setCaptureSessionQueue:]', symObjAddr: 0x328, symBinAddr: 0x6DB8, symSize: 0xC }
- { offsetInCU: 0xB76, offset: 0x1EED8, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler eventSink]', symObjAddr: 0x334, symBinAddr: 0x6DC4, symSize: 0xC }
- { offsetInCU: 0xBAD, offset: 0x1EF0F, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler setEventSink:]', symObjAddr: 0x340, symBinAddr: 0x6DD0, symSize: 0x8 }
- { offsetInCU: 0xBEC, offset: 0x1EF4E, size: 0x8, addend: 0x0, symName: '-[FLTImageStreamHandler .cxx_destruct]', symObjAddr: 0x348, symBinAddr: 0x6DD8, symSize: 0x30 }
- { offsetInCU: 0xC1D, offset: 0x1EF7F, size: 0x8, addend: 0x0, symName: '-[FLTCam initWithCameraName:resolutionPreset:enableAudio:orientation:captureSessionQueue:error:]', symObjAddr: 0x378, symBinAddr: 0x6E08, symSize: 0xF8 }
- { offsetInCU: 0xCAB, offset: 0x1F00D, size: 0x8, addend: 0x0, symName: '-[FLTCam initWithCameraName:resolutionPreset:enableAudio:orientation:videoCaptureSession:audioCaptureSession:captureSessionQueue:error:]', symObjAddr: 0x470, symBinAddr: 0x6F00, symSize: 0x3AC }
- { offsetInCU: 0xDE1, offset: 0x1F143, size: 0x8, addend: 0x0, symName: '-[FLTCam createConnection:]', symObjAddr: 0x81C, symBinAddr: 0x72AC, symSize: 0x1A0 }
- { offsetInCU: 0xE33, offset: 0x1F195, size: 0x8, addend: 0x0, symName: '-[FLTCam start]', symObjAddr: 0x9BC, symBinAddr: 0x744C, symSize: 0x28 }
- { offsetInCU: 0xE63, offset: 0x1F1C5, size: 0x8, addend: 0x0, symName: '-[FLTCam stop]', symObjAddr: 0x9E4, symBinAddr: 0x7474, symSize: 0x28 }
- { offsetInCU: 0xE93, offset: 0x1F1F5, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoFormat:]', symObjAddr: 0xA0C, symBinAddr: 0x749C, symSize: 0xC8 }
- { offsetInCU: 0xED2, offset: 0x1F234, size: 0x8, addend: 0x0, symName: '-[FLTCam setImageFileFormat:]', symObjAddr: 0xAD4, symBinAddr: 0x7564, symSize: 0x8 }
- { offsetInCU: 0xF10, offset: 0x1F272, size: 0x8, addend: 0x0, symName: '-[FLTCam setDeviceOrientation:]', symObjAddr: 0xADC, symBinAddr: 0x756C, symSize: 0x18 }
- { offsetInCU: 0xF4E, offset: 0x1F2B0, size: 0x8, addend: 0x0, symName: '-[FLTCam updateOrientation]', symObjAddr: 0xAF4, symBinAddr: 0x7584, symSize: 0x58 }
- { offsetInCU: 0xF8D, offset: 0x1F2EF, size: 0x8, addend: 0x0, symName: '-[FLTCam updateOrientation:forCaptureOutput:]', symObjAddr: 0xB4C, symBinAddr: 0x75DC, symSize: 0x7C }
- { offsetInCU: 0xFEA, offset: 0x1F34C, size: 0x8, addend: 0x0, symName: '-[FLTCam captureToFile:]', symObjAddr: 0xBC8, symBinAddr: 0x7658, symSize: 0x358 }
- { offsetInCU: 0x10CD, offset: 0x1F42F, size: 0x8, addend: 0x0, symName: '___24-[FLTCam captureToFile:]_block_invoke', symObjAddr: 0xF20, symBinAddr: 0x79B0, symSize: 0x138 }
- { offsetInCU: 0x1184, offset: 0x1F4E6, size: 0x8, addend: 0x0, symName: '___24-[FLTCam captureToFile:]_block_invoke_2', symObjAddr: 0x1058, symBinAddr: 0x7AE8, symSize: 0x90 }
- { offsetInCU: 0x11EF, offset: 0x1F551, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40w, symObjAddr: 0x10E8, symBinAddr: 0x7B78, symSize: 0x30 }
- { offsetInCU: 0x1215, offset: 0x1F577, size: 0x8, addend: 0x0, symName: '-[FLTCam getVideoOrientationForDeviceOrientation:]', symObjAddr: 0x1180, symBinAddr: 0x7BA8, symSize: 0x10 }
- { offsetInCU: 0x1256, offset: 0x1F5B8, size: 0x8, addend: 0x0, symName: '-[FLTCam getTemporaryFilePathWithExtension:subfolder:prefix:error:]', symObjAddr: 0x1190, symBinAddr: 0x7BB8, symSize: 0x23C }
- { offsetInCU: 0x1359, offset: 0x1F6BB, size: 0x8, addend: 0x0, symName: '-[FLTCam setCaptureSessionPreset:withError:]', symObjAddr: 0x13CC, symBinAddr: 0x7DF4, symSize: 0x2E8 }
- { offsetInCU: 0x13B1, offset: 0x1F713, size: 0x8, addend: 0x0, symName: '-[FLTCam captureOutput:didOutputSampleBuffer:fromConnection:]', symObjAddr: 0x16B4, symBinAddr: 0x80DC, symSize: 0xA00 }
- { offsetInCU: 0x1B4E, offset: 0x1FEB0, size: 0x8, addend: 0x0, symName: '___61-[FLTCam captureOutput:didOutputSampleBuffer:fromConnection:]_block_invoke', symObjAddr: 0x20B4, symBinAddr: 0x8ADC, symSize: 0x38 }
- { offsetInCU: 0x1BB2, offset: 0x1FF14, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40r, symObjAddr: 0x20EC, symBinAddr: 0x8B14, symSize: 0x34 }
- { offsetInCU: 0x1BD8, offset: 0x1FF3A, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40r, symObjAddr: 0x2120, symBinAddr: 0x8B48, symSize: 0x2C }
- { offsetInCU: 0x1BF5, offset: 0x1FF57, size: 0x8, addend: 0x0, symName: '___61-[FLTCam captureOutput:didOutputSampleBuffer:fromConnection:]_block_invoke.83', symObjAddr: 0x214C, symBinAddr: 0x8B74, symSize: 0x10 }
- { offsetInCU: 0x1C4F, offset: 0x1FFB1, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40b, symObjAddr: 0x215C, symBinAddr: 0x8B84, symSize: 0x34 }
- { offsetInCU: 0x1C75, offset: 0x1FFD7, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40s, symObjAddr: 0x2190, symBinAddr: 0x8BB8, symSize: 0x28 }
- { offsetInCU: 0x1C92, offset: 0x1FFF4, size: 0x8, addend: 0x0, symName: '-[FLTCam copySampleBufferWithAdjustedTime:by:]', symObjAddr: 0x21B8, symBinAddr: 0x8BE0, symSize: 0x13C }
- { offsetInCU: 0x1E59, offset: 0x201BB, size: 0x8, addend: 0x0, symName: '-[FLTCam newVideoSample:]', symObjAddr: 0x22F4, symBinAddr: 0x8D1C, symSize: 0x128 }
- { offsetInCU: 0x1E9C, offset: 0x201FE, size: 0x8, addend: 0x0, symName: '-[FLTCam newAudioSample:]', symObjAddr: 0x241C, symBinAddr: 0x8E44, symSize: 0x128 }
- { offsetInCU: 0x1EDF, offset: 0x20241, size: 0x8, addend: 0x0, symName: '-[FLTCam close]', symObjAddr: 0x2544, symBinAddr: 0x8F6C, symSize: 0x2D4 }
- { offsetInCU: 0x1F69, offset: 0x202CB, size: 0x8, addend: 0x0, symName: '-[FLTCam dealloc]', symObjAddr: 0x2818, symBinAddr: 0x9240, symSize: 0x54 }
- { offsetInCU: 0x1FA8, offset: 0x2030A, size: 0x8, addend: 0x0, symName: '-[FLTCam copyPixelBuffer]', symObjAddr: 0x286C, symBinAddr: 0x9294, symSize: 0xC4 }
- { offsetInCU: 0x2007, offset: 0x20369, size: 0x8, addend: 0x0, symName: '___25-[FLTCam copyPixelBuffer]_block_invoke', symObjAddr: 0x2930, symBinAddr: 0x9358, symSize: 0x38 }
- { offsetInCU: 0x205A, offset: 0x203BC, size: 0x8, addend: 0x0, symName: '-[FLTCam startVideoRecordingWithResult:]', symObjAddr: 0x2968, symBinAddr: 0x9390, symSize: 0x8 }
- { offsetInCU: 0x209A, offset: 0x203FC, size: 0x8, addend: 0x0, symName: '-[FLTCam startVideoRecordingWithResult:messengerForStreaming:]', symObjAddr: 0x2970, symBinAddr: 0x9398, symSize: 0x148 }
- { offsetInCU: 0x215E, offset: 0x204C0, size: 0x8, addend: 0x0, symName: '-[FLTCam stopVideoRecordingWithResult:]', symObjAddr: 0x2AB8, symBinAddr: 0x94E0, symSize: 0x168 }
- { offsetInCU: 0x21BF, offset: 0x20521, size: 0x8, addend: 0x0, symName: '___39-[FLTCam stopVideoRecordingWithResult:]_block_invoke', symObjAddr: 0x2C20, symBinAddr: 0x9648, symSize: 0x74 }
- { offsetInCU: 0x2211, offset: 0x20573, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40s, symObjAddr: 0x2C94, symBinAddr: 0x96BC, symSize: 0x28 }
- { offsetInCU: 0x2237, offset: 0x20599, size: 0x8, addend: 0x0, symName: '-[FLTCam pauseVideoRecordingWithResult:]', symObjAddr: 0x2CBC, symBinAddr: 0x96E4, symSize: 0x18 }
- { offsetInCU: 0x227A, offset: 0x205DC, size: 0x8, addend: 0x0, symName: '-[FLTCam resumeVideoRecordingWithResult:]', symObjAddr: 0x2CD4, symBinAddr: 0x96FC, symSize: 0xC }
- { offsetInCU: 0x22BD, offset: 0x2061F, size: 0x8, addend: 0x0, symName: '-[FLTCam lockCaptureOrientationWithResult:orientation:]', symObjAddr: 0x2CE0, symBinAddr: 0x9708, symSize: 0x168 }
- { offsetInCU: 0x233F, offset: 0x206A1, size: 0x8, addend: 0x0, symName: '-[FLTCam unlockCaptureOrientationWithResult:]', symObjAddr: 0x2E48, symBinAddr: 0x9870, symSize: 0x40 }
- { offsetInCU: 0x2382, offset: 0x206E4, size: 0x8, addend: 0x0, symName: '-[FLTCam setFlashModeWithResult:mode:]', symObjAddr: 0x2E88, symBinAddr: 0x98B0, symSize: 0x29C }
- { offsetInCU: 0x242F, offset: 0x20791, size: 0x8, addend: 0x0, symName: '-[FLTCam setExposureModeWithResult:mode:]', symObjAddr: 0x3124, symBinAddr: 0x9B4C, symSize: 0x168 }
- { offsetInCU: 0x24B8, offset: 0x2081A, size: 0x8, addend: 0x0, symName: '-[FLTCam applyExposureMode]', symObjAddr: 0x328C, symBinAddr: 0x9CB4, symSize: 0x6C }
- { offsetInCU: 0x24EA, offset: 0x2084C, size: 0x8, addend: 0x0, symName: '-[FLTCam setFocusModeWithResult:mode:]', symObjAddr: 0x32F8, symBinAddr: 0x9D20, symSize: 0x168 }
- { offsetInCU: 0x2573, offset: 0x208D5, size: 0x8, addend: 0x0, symName: '-[FLTCam applyFocusMode]', symObjAddr: 0x3460, symBinAddr: 0x9E88, symSize: 0xC }
- { offsetInCU: 0x25A4, offset: 0x20906, size: 0x8, addend: 0x0, symName: '-[FLTCam applyFocusMode:onDevice:]', symObjAddr: 0x346C, symBinAddr: 0x9E94, symSize: 0x90 }
- { offsetInCU: 0x25F4, offset: 0x20956, size: 0x8, addend: 0x0, symName: '-[FLTCam pausePreviewWithResult:]', symObjAddr: 0x34FC, symBinAddr: 0x9F24, symSize: 0x10 }
- { offsetInCU: 0x2637, offset: 0x20999, size: 0x8, addend: 0x0, symName: '-[FLTCam resumePreviewWithResult:]', symObjAddr: 0x350C, symBinAddr: 0x9F34, symSize: 0xC }
- { offsetInCU: 0x267A, offset: 0x209DC, size: 0x8, addend: 0x0, symName: '-[FLTCam setDescriptionWhileRecording:result:]', symObjAddr: 0x3518, symBinAddr: 0x9F40, symSize: 0x21C }
- { offsetInCU: 0x26FE, offset: 0x20A60, size: 0x8, addend: 0x0, symName: '-[FLTCam getCGPointForCoordsWithOrientation:x:y:]', symObjAddr: 0x3734, symBinAddr: 0xA15C, symSize: 0x34 }
- { offsetInCU: 0x2781, offset: 0x20AE3, size: 0x8, addend: 0x0, symName: '-[FLTCam setExposurePointWithResult:x:y:]', symObjAddr: 0x3768, symBinAddr: 0xA190, symSize: 0xDC }
- { offsetInCU: 0x27F6, offset: 0x20B58, size: 0x8, addend: 0x0, symName: '-[FLTCam setFocusPointWithResult:x:y:]', symObjAddr: 0x3844, symBinAddr: 0xA26C, symSize: 0xDC }
- { offsetInCU: 0x286B, offset: 0x20BCD, size: 0x8, addend: 0x0, symName: '-[FLTCam setExposureOffsetWithResult:offset:]', symObjAddr: 0x3920, symBinAddr: 0xA348, symSize: 0x98 }
- { offsetInCU: 0x28BF, offset: 0x20C21, size: 0x8, addend: 0x0, symName: '-[FLTCam startImageStreamWithMessenger:]', symObjAddr: 0x39B8, symBinAddr: 0xA3E0, symSize: 0x68 }
- { offsetInCU: 0x2902, offset: 0x20C64, size: 0x8, addend: 0x0, symName: '-[FLTCam startImageStreamWithMessenger:imageStreamHandler:]', symObjAddr: 0x3A20, symBinAddr: 0xA448, symSize: 0x168 }
- { offsetInCU: 0x298C, offset: 0x20CEE, size: 0x8, addend: 0x0, symName: '___59-[FLTCam startImageStreamWithMessenger:imageStreamHandler:]_block_invoke', symObjAddr: 0x3B88, symBinAddr: 0xA5B0, symSize: 0xB4 }
- { offsetInCU: 0x2A01, offset: 0x20D63, size: 0x8, addend: 0x0, symName: '___59-[FLTCam startImageStreamWithMessenger:imageStreamHandler:]_block_invoke_2', symObjAddr: 0x3C3C, symBinAddr: 0xA664, symSize: 0x44 }
- { offsetInCU: 0x2A5C, offset: 0x20DBE, size: 0x8, addend: 0x0, symName: '-[FLTCam stopImageStream]', symObjAddr: 0x3C80, symBinAddr: 0xA6A8, symSize: 0x34 }
- { offsetInCU: 0x2A8E, offset: 0x20DF0, size: 0x8, addend: 0x0, symName: '-[FLTCam receivedImageStreamData]', symObjAddr: 0x3CB4, symBinAddr: 0xA6DC, symSize: 0x28 }
- { offsetInCU: 0x2AC0, offset: 0x20E22, size: 0x8, addend: 0x0, symName: '-[FLTCam getMaxZoomLevelWithResult:]', symObjAddr: 0x3CDC, symBinAddr: 0xA704, symSize: 0x64 }
- { offsetInCU: 0x2B14, offset: 0x20E76, size: 0x8, addend: 0x0, symName: '-[FLTCam getMinZoomLevelWithResult:]', symObjAddr: 0x3D40, symBinAddr: 0xA768, symSize: 0x64 }
- { offsetInCU: 0x2B68, offset: 0x20ECA, size: 0x8, addend: 0x0, symName: '-[FLTCam setZoomLevel:Result:]', symObjAddr: 0x3DA4, symBinAddr: 0xA7CC, symSize: 0x108 }
- { offsetInCU: 0x2C0C, offset: 0x20F6E, size: 0x8, addend: 0x0, symName: '-[FLTCam getMinAvailableZoomFactor]', symObjAddr: 0x3EAC, symBinAddr: 0xA8D4, symSize: 0x8 }
- { offsetInCU: 0x2C42, offset: 0x20FA4, size: 0x8, addend: 0x0, symName: '-[FLTCam getMaxAvailableZoomFactor]', symObjAddr: 0x3EB4, symBinAddr: 0xA8DC, symSize: 0x8 }
- { offsetInCU: 0x2C78, offset: 0x20FDA, size: 0x8, addend: 0x0, symName: '-[FLTCam setupWriterForPath:]', symObjAddr: 0x3EBC, symBinAddr: 0xA8E4, symSize: 0x474 }
- { offsetInCU: 0x2D1D, offset: 0x2107F, size: 0x8, addend: 0x0, symName: '-[FLTCam setUpCaptureSessionForAudio]', symObjAddr: 0x4330, symBinAddr: 0xAD58, symSize: 0x160 }
- { offsetInCU: 0x2D7F, offset: 0x210E1, size: 0x8, addend: 0x0, symName: '-[FLTCam captureDevice]', symObjAddr: 0x4490, symBinAddr: 0xAEB8, symSize: 0x8 }
- { offsetInCU: 0x2DB4, offset: 0x21116, size: 0x8, addend: 0x0, symName: '-[FLTCam previewSize]', symObjAddr: 0x4498, symBinAddr: 0xAEC0, symSize: 0x8 }
- { offsetInCU: 0x2DE8, offset: 0x2114A, size: 0x8, addend: 0x0, symName: '-[FLTCam isPreviewPaused]', symObjAddr: 0x44A0, symBinAddr: 0xAEC8, symSize: 0x8 }
- { offsetInCU: 0x2E1D, offset: 0x2117F, size: 0x8, addend: 0x0, symName: '-[FLTCam setIsPreviewPaused:]', symObjAddr: 0x44A8, symBinAddr: 0xAED0, symSize: 0x8 }
- { offsetInCU: 0x2E57, offset: 0x211B9, size: 0x8, addend: 0x0, symName: '-[FLTCam onFrameAvailable]', symObjAddr: 0x44B0, symBinAddr: 0xAED8, symSize: 0x8 }
- { offsetInCU: 0x2E8C, offset: 0x211EE, size: 0x8, addend: 0x0, symName: '-[FLTCam setOnFrameAvailable:]', symObjAddr: 0x44B8, symBinAddr: 0xAEE0, symSize: 0x8 }
- { offsetInCU: 0x2ECB, offset: 0x2122D, size: 0x8, addend: 0x0, symName: '-[FLTCam methodChannel]', symObjAddr: 0x44C0, symBinAddr: 0xAEE8, symSize: 0x8 }
- { offsetInCU: 0x2F00, offset: 0x21262, size: 0x8, addend: 0x0, symName: '-[FLTCam setMethodChannel:]', symObjAddr: 0x44C8, symBinAddr: 0xAEF0, symSize: 0xC }
- { offsetInCU: 0x2F3F, offset: 0x212A1, size: 0x8, addend: 0x0, symName: '-[FLTCam resolutionPreset]', symObjAddr: 0x44D4, symBinAddr: 0xAEFC, symSize: 0x8 }
- { offsetInCU: 0x2F74, offset: 0x212D6, size: 0x8, addend: 0x0, symName: '-[FLTCam setResolutionPreset:]', symObjAddr: 0x44DC, symBinAddr: 0xAF04, symSize: 0x8 }
- { offsetInCU: 0x2FB0, offset: 0x21312, size: 0x8, addend: 0x0, symName: '-[FLTCam exposureMode]', symObjAddr: 0x44E4, symBinAddr: 0xAF0C, symSize: 0x8 }
- { offsetInCU: 0x2FE5, offset: 0x21347, size: 0x8, addend: 0x0, symName: '-[FLTCam setExposureMode:]', symObjAddr: 0x44EC, symBinAddr: 0xAF14, symSize: 0x8 }
- { offsetInCU: 0x3021, offset: 0x21383, size: 0x8, addend: 0x0, symName: '-[FLTCam focusMode]', symObjAddr: 0x44F4, symBinAddr: 0xAF1C, symSize: 0x8 }
- { offsetInCU: 0x3056, offset: 0x213B8, size: 0x8, addend: 0x0, symName: '-[FLTCam setFocusMode:]', symObjAddr: 0x44FC, symBinAddr: 0xAF24, symSize: 0x8 }
- { offsetInCU: 0x3092, offset: 0x213F4, size: 0x8, addend: 0x0, symName: '-[FLTCam flashMode]', symObjAddr: 0x4504, symBinAddr: 0xAF2C, symSize: 0x8 }
- { offsetInCU: 0x30C7, offset: 0x21429, size: 0x8, addend: 0x0, symName: '-[FLTCam setFlashMode:]', symObjAddr: 0x450C, symBinAddr: 0xAF34, symSize: 0x8 }
- { offsetInCU: 0x3103, offset: 0x21465, size: 0x8, addend: 0x0, symName: '-[FLTCam videoFormat]', symObjAddr: 0x4514, symBinAddr: 0xAF3C, symSize: 0x8 }
- { offsetInCU: 0x3138, offset: 0x2149A, size: 0x8, addend: 0x0, symName: '-[FLTCam fileFormat]', symObjAddr: 0x451C, symBinAddr: 0xAF44, symSize: 0x8 }
- { offsetInCU: 0x316D, offset: 0x214CF, size: 0x8, addend: 0x0, symName: '-[FLTCam setFileFormat:]', symObjAddr: 0x4524, symBinAddr: 0xAF4C, symSize: 0x8 }
- { offsetInCU: 0x31A9, offset: 0x2150B, size: 0x8, addend: 0x0, symName: '-[FLTCam textureId]', symObjAddr: 0x452C, symBinAddr: 0xAF54, symSize: 0x8 }
- { offsetInCU: 0x31DE, offset: 0x21540, size: 0x8, addend: 0x0, symName: '-[FLTCam enableAudio]', symObjAddr: 0x4534, symBinAddr: 0xAF5C, symSize: 0xC }
- { offsetInCU: 0x3213, offset: 0x21575, size: 0x8, addend: 0x0, symName: '-[FLTCam setEnableAudio:]', symObjAddr: 0x4540, symBinAddr: 0xAF68, symSize: 0x8 }
- { offsetInCU: 0x324F, offset: 0x215B1, size: 0x8, addend: 0x0, symName: '-[FLTCam imageStreamHandler]', symObjAddr: 0x4548, symBinAddr: 0xAF70, symSize: 0x8 }
- { offsetInCU: 0x3284, offset: 0x215E6, size: 0x8, addend: 0x0, symName: '-[FLTCam setImageStreamHandler:]', symObjAddr: 0x4550, symBinAddr: 0xAF78, symSize: 0xC }
- { offsetInCU: 0x32C3, offset: 0x21625, size: 0x8, addend: 0x0, symName: '-[FLTCam videoCaptureSession]', symObjAddr: 0x455C, symBinAddr: 0xAF84, symSize: 0x8 }
- { offsetInCU: 0x32F8, offset: 0x2165A, size: 0x8, addend: 0x0, symName: '-[FLTCam audioCaptureSession]', symObjAddr: 0x4564, symBinAddr: 0xAF8C, symSize: 0x8 }
- { offsetInCU: 0x332D, offset: 0x2168F, size: 0x8, addend: 0x0, symName: '-[FLTCam captureVideoInput]', symObjAddr: 0x456C, symBinAddr: 0xAF94, symSize: 0x8 }
- { offsetInCU: 0x3362, offset: 0x216C4, size: 0x8, addend: 0x0, symName: '-[FLTCam latestPixelBuffer]', symObjAddr: 0x4574, symBinAddr: 0xAF9C, symSize: 0x8 }
- { offsetInCU: 0x3397, offset: 0x216F9, size: 0x8, addend: 0x0, symName: '-[FLTCam setLatestPixelBuffer:]', symObjAddr: 0x457C, symBinAddr: 0xAFA4, symSize: 0x8 }
- { offsetInCU: 0x33D3, offset: 0x21735, size: 0x8, addend: 0x0, symName: '-[FLTCam captureSize]', symObjAddr: 0x4584, symBinAddr: 0xAFAC, symSize: 0x8 }
- { offsetInCU: 0x3407, offset: 0x21769, size: 0x8, addend: 0x0, symName: '-[FLTCam videoWriter]', symObjAddr: 0x458C, symBinAddr: 0xAFB4, symSize: 0x8 }
- { offsetInCU: 0x343C, offset: 0x2179E, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoWriter:]', symObjAddr: 0x4594, symBinAddr: 0xAFBC, symSize: 0xC }
- { offsetInCU: 0x347B, offset: 0x217DD, size: 0x8, addend: 0x0, symName: '-[FLTCam videoWriterInput]', symObjAddr: 0x45A0, symBinAddr: 0xAFC8, symSize: 0x8 }
- { offsetInCU: 0x34B0, offset: 0x21812, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoWriterInput:]', symObjAddr: 0x45A8, symBinAddr: 0xAFD0, symSize: 0xC }
- { offsetInCU: 0x34EF, offset: 0x21851, size: 0x8, addend: 0x0, symName: '-[FLTCam audioWriterInput]', symObjAddr: 0x45B4, symBinAddr: 0xAFDC, symSize: 0x8 }
- { offsetInCU: 0x3524, offset: 0x21886, size: 0x8, addend: 0x0, symName: '-[FLTCam setAudioWriterInput:]', symObjAddr: 0x45BC, symBinAddr: 0xAFE4, symSize: 0xC }
- { offsetInCU: 0x3563, offset: 0x218C5, size: 0x8, addend: 0x0, symName: '-[FLTCam assetWriterPixelBufferAdaptor]', symObjAddr: 0x45C8, symBinAddr: 0xAFF0, symSize: 0x8 }
- { offsetInCU: 0x3598, offset: 0x218FA, size: 0x8, addend: 0x0, symName: '-[FLTCam setAssetWriterPixelBufferAdaptor:]', symObjAddr: 0x45D0, symBinAddr: 0xAFF8, symSize: 0xC }
- { offsetInCU: 0x35D7, offset: 0x21939, size: 0x8, addend: 0x0, symName: '-[FLTCam videoOutput]', symObjAddr: 0x45DC, symBinAddr: 0xB004, symSize: 0x8 }
- { offsetInCU: 0x360C, offset: 0x2196E, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoOutput:]', symObjAddr: 0x45E4, symBinAddr: 0xB00C, symSize: 0xC }
- { offsetInCU: 0x364B, offset: 0x219AD, size: 0x8, addend: 0x0, symName: '-[FLTCam audioOutput]', symObjAddr: 0x45F0, symBinAddr: 0xB018, symSize: 0x8 }
- { offsetInCU: 0x3680, offset: 0x219E2, size: 0x8, addend: 0x0, symName: '-[FLTCam setAudioOutput:]', symObjAddr: 0x45F8, symBinAddr: 0xB020, symSize: 0xC }
- { offsetInCU: 0x36BF, offset: 0x21A21, size: 0x8, addend: 0x0, symName: '-[FLTCam videoRecordingPath]', symObjAddr: 0x4604, symBinAddr: 0xB02C, symSize: 0x8 }
- { offsetInCU: 0x36F4, offset: 0x21A56, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoRecordingPath:]', symObjAddr: 0x460C, symBinAddr: 0xB034, symSize: 0xC }
- { offsetInCU: 0x3733, offset: 0x21A95, size: 0x8, addend: 0x0, symName: '-[FLTCam isRecording]', symObjAddr: 0x4618, symBinAddr: 0xB040, symSize: 0x8 }
- { offsetInCU: 0x3768, offset: 0x21ACA, size: 0x8, addend: 0x0, symName: '-[FLTCam setIsRecording:]', symObjAddr: 0x4620, symBinAddr: 0xB048, symSize: 0x8 }
- { offsetInCU: 0x37A2, offset: 0x21B04, size: 0x8, addend: 0x0, symName: '-[FLTCam isRecordingPaused]', symObjAddr: 0x4628, symBinAddr: 0xB050, symSize: 0x8 }
- { offsetInCU: 0x37D7, offset: 0x21B39, size: 0x8, addend: 0x0, symName: '-[FLTCam setIsRecordingPaused:]', symObjAddr: 0x4630, symBinAddr: 0xB058, symSize: 0x8 }
- { offsetInCU: 0x3811, offset: 0x21B73, size: 0x8, addend: 0x0, symName: '-[FLTCam videoIsDisconnected]', symObjAddr: 0x4638, symBinAddr: 0xB060, symSize: 0x8 }
- { offsetInCU: 0x3846, offset: 0x21BA8, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoIsDisconnected:]', symObjAddr: 0x4640, symBinAddr: 0xB068, symSize: 0x8 }
- { offsetInCU: 0x3880, offset: 0x21BE2, size: 0x8, addend: 0x0, symName: '-[FLTCam audioIsDisconnected]', symObjAddr: 0x4648, symBinAddr: 0xB070, symSize: 0x8 }
- { offsetInCU: 0x38B5, offset: 0x21C17, size: 0x8, addend: 0x0, symName: '-[FLTCam setAudioIsDisconnected:]', symObjAddr: 0x4650, symBinAddr: 0xB078, symSize: 0x8 }
- { offsetInCU: 0x38EF, offset: 0x21C51, size: 0x8, addend: 0x0, symName: '-[FLTCam isAudioSetup]', symObjAddr: 0x4658, symBinAddr: 0xB080, symSize: 0x8 }
- { offsetInCU: 0x3924, offset: 0x21C86, size: 0x8, addend: 0x0, symName: '-[FLTCam setIsAudioSetup:]', symObjAddr: 0x4660, symBinAddr: 0xB088, symSize: 0x8 }
- { offsetInCU: 0x395E, offset: 0x21CC0, size: 0x8, addend: 0x0, symName: '-[FLTCam streamingPendingFramesCount]', symObjAddr: 0x4668, symBinAddr: 0xB090, symSize: 0x8 }
- { offsetInCU: 0x3993, offset: 0x21CF5, size: 0x8, addend: 0x0, symName: '-[FLTCam setStreamingPendingFramesCount:]', symObjAddr: 0x4670, symBinAddr: 0xB098, symSize: 0x8 }
- { offsetInCU: 0x39CF, offset: 0x21D31, size: 0x8, addend: 0x0, symName: '-[FLTCam maxStreamingPendingFramesCount]', symObjAddr: 0x4678, symBinAddr: 0xB0A0, symSize: 0x8 }
- { offsetInCU: 0x3A04, offset: 0x21D66, size: 0x8, addend: 0x0, symName: '-[FLTCam setMaxStreamingPendingFramesCount:]', symObjAddr: 0x4680, symBinAddr: 0xB0A8, symSize: 0x8 }
- { offsetInCU: 0x3A40, offset: 0x21DA2, size: 0x8, addend: 0x0, symName: '-[FLTCam lockedCaptureOrientation]', symObjAddr: 0x4688, symBinAddr: 0xB0B0, symSize: 0x8 }
- { offsetInCU: 0x3A75, offset: 0x21DD7, size: 0x8, addend: 0x0, symName: '-[FLTCam setLockedCaptureOrientation:]', symObjAddr: 0x4690, symBinAddr: 0xB0B8, symSize: 0x8 }
- { offsetInCU: 0x3AB1, offset: 0x21E13, size: 0x8, addend: 0x0, symName: '-[FLTCam lastVideoSampleTime]', symObjAddr: 0x4698, symBinAddr: 0xB0C0, symSize: 0x18 }
- { offsetInCU: 0x3AE5, offset: 0x21E47, size: 0x8, addend: 0x0, symName: '-[FLTCam setLastVideoSampleTime:]', symObjAddr: 0x46B0, symBinAddr: 0xB0D8, symSize: 0x18 }
- { offsetInCU: 0x3B22, offset: 0x21E84, size: 0x8, addend: 0x0, symName: '-[FLTCam lastAudioSampleTime]', symObjAddr: 0x46C8, symBinAddr: 0xB0F0, symSize: 0x14 }
- { offsetInCU: 0x3B56, offset: 0x21EB8, size: 0x8, addend: 0x0, symName: '-[FLTCam setLastAudioSampleTime:]', symObjAddr: 0x46DC, symBinAddr: 0xB104, symSize: 0x14 }
- { offsetInCU: 0x3B93, offset: 0x21EF5, size: 0x8, addend: 0x0, symName: '-[FLTCam videoTimeOffset]', symObjAddr: 0x46F0, symBinAddr: 0xB118, symSize: 0x18 }
- { offsetInCU: 0x3BC7, offset: 0x21F29, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoTimeOffset:]', symObjAddr: 0x4708, symBinAddr: 0xB130, symSize: 0x18 }
- { offsetInCU: 0x3C04, offset: 0x21F66, size: 0x8, addend: 0x0, symName: '-[FLTCam audioTimeOffset]', symObjAddr: 0x4720, symBinAddr: 0xB148, symSize: 0x14 }
- { offsetInCU: 0x3C38, offset: 0x21F9A, size: 0x8, addend: 0x0, symName: '-[FLTCam setAudioTimeOffset:]', symObjAddr: 0x4734, symBinAddr: 0xB15C, symSize: 0x14 }
- { offsetInCU: 0x3C75, offset: 0x21FD7, size: 0x8, addend: 0x0, symName: '-[FLTCam motionManager]', symObjAddr: 0x4748, symBinAddr: 0xB170, symSize: 0x8 }
- { offsetInCU: 0x3CAA, offset: 0x2200C, size: 0x8, addend: 0x0, symName: '-[FLTCam setMotionManager:]', symObjAddr: 0x4750, symBinAddr: 0xB178, symSize: 0xC }
- { offsetInCU: 0x3CE9, offset: 0x2204B, size: 0x8, addend: 0x0, symName: '-[FLTCam videoAdaptor]', symObjAddr: 0x475C, symBinAddr: 0xB184, symSize: 0xC }
- { offsetInCU: 0x3D20, offset: 0x22082, size: 0x8, addend: 0x0, symName: '-[FLTCam setVideoAdaptor:]', symObjAddr: 0x4768, symBinAddr: 0xB190, symSize: 0x8 }
- { offsetInCU: 0x3D5F, offset: 0x220C1, size: 0x8, addend: 0x0, symName: '-[FLTCam captureSessionQueue]', symObjAddr: 0x4770, symBinAddr: 0xB198, symSize: 0x8 }
- { offsetInCU: 0x3D94, offset: 0x220F6, size: 0x8, addend: 0x0, symName: '-[FLTCam setCaptureSessionQueue:]', symObjAddr: 0x4778, symBinAddr: 0xB1A0, symSize: 0xC }
- { offsetInCU: 0x3DD3, offset: 0x22135, size: 0x8, addend: 0x0, symName: '-[FLTCam pixelBufferSynchronizationQueue]', symObjAddr: 0x4784, symBinAddr: 0xB1AC, symSize: 0x8 }
- { offsetInCU: 0x3E08, offset: 0x2216A, size: 0x8, addend: 0x0, symName: '-[FLTCam setPixelBufferSynchronizationQueue:]', symObjAddr: 0x478C, symBinAddr: 0xB1B4, symSize: 0xC }
- { offsetInCU: 0x3E47, offset: 0x221A9, size: 0x8, addend: 0x0, symName: '-[FLTCam photoIOQueue]', symObjAddr: 0x4798, symBinAddr: 0xB1C0, symSize: 0x8 }
- { offsetInCU: 0x3E7C, offset: 0x221DE, size: 0x8, addend: 0x0, symName: '-[FLTCam setPhotoIOQueue:]', symObjAddr: 0x47A0, symBinAddr: 0xB1C8, symSize: 0xC }
- { offsetInCU: 0x3EBB, offset: 0x2221D, size: 0x8, addend: 0x0, symName: '-[FLTCam deviceOrientation]', symObjAddr: 0x47AC, symBinAddr: 0xB1D4, symSize: 0x8 }
- { offsetInCU: 0x3EF0, offset: 0x22252, size: 0x8, addend: 0x0, symName: '-[FLTCam captureVideoOutput]', symObjAddr: 0x47B4, symBinAddr: 0xB1DC, symSize: 0x8 }
- { offsetInCU: 0x3F25, offset: 0x22287, size: 0x8, addend: 0x0, symName: '-[FLTCam capturePhotoOutput]', symObjAddr: 0x47BC, symBinAddr: 0xB1E4, symSize: 0x8 }
- { offsetInCU: 0x3F5A, offset: 0x222BC, size: 0x8, addend: 0x0, symName: '-[FLTCam setCapturePhotoOutput:]', symObjAddr: 0x47C4, symBinAddr: 0xB1EC, symSize: 0xC }
- { offsetInCU: 0x3F99, offset: 0x222FB, size: 0x8, addend: 0x0, symName: '-[FLTCam isStreamingImages]', symObjAddr: 0x47D0, symBinAddr: 0xB1F8, symSize: 0x8 }
- { offsetInCU: 0x3FCE, offset: 0x22330, size: 0x8, addend: 0x0, symName: '-[FLTCam setIsStreamingImages:]', symObjAddr: 0x47D8, symBinAddr: 0xB200, symSize: 0x8 }
- { offsetInCU: 0x4008, offset: 0x2236A, size: 0x8, addend: 0x0, symName: '-[FLTCam inProgressSavePhotoDelegates]', symObjAddr: 0x47E0, symBinAddr: 0xB208, symSize: 0x8 }
- { offsetInCU: 0x403D, offset: 0x2239F, size: 0x8, addend: 0x0, symName: '-[FLTCam .cxx_destruct]', symObjAddr: 0x47E8, symBinAddr: 0xB210, symSize: 0x120 }
- { offsetInCU: 0x27, offset: 0x229E0, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate initWithPath:ioQueue:completionHandler:]', symObjAddr: 0x0, symBinAddr: 0xB330, symSize: 0xF0 }
- { offsetInCU: 0x166, offset: 0x22B1F, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate initWithPath:ioQueue:completionHandler:]', symObjAddr: 0x0, symBinAddr: 0xB330, symSize: 0xF0 }
- { offsetInCU: 0x1C7, offset: 0x22B80, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate handlePhotoCaptureResultWithError:photoDataProvider:]', symObjAddr: 0xF0, symBinAddr: 0xB420, symSize: 0x140 }
- { offsetInCU: 0x26D, offset: 0x22C26, size: 0x8, addend: 0x0, symName: '___76-[FLTSavePhotoDelegate handlePhotoCaptureResultWithError:photoDataProvider:]_block_invoke', symObjAddr: 0x230, symBinAddr: 0xB560, symSize: 0x124 }
- { offsetInCU: 0x34A, offset: 0x22D03, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate captureOutput:didFinishProcessingPhoto:error:]', symObjAddr: 0x3C4, symBinAddr: 0xB684, symSize: 0x90 }
- { offsetInCU: 0x3A3, offset: 0x22D5C, size: 0x8, addend: 0x0, symName: '___69-[FLTSavePhotoDelegate captureOutput:didFinishProcessingPhoto:error:]_block_invoke', symObjAddr: 0x454, symBinAddr: 0xB714, symSize: 0x8 }
- { offsetInCU: 0x3E0, offset: 0x22D99, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate filePath]', symObjAddr: 0x46C, symBinAddr: 0xB71C, symSize: 0x4 }
- { offsetInCU: 0x414, offset: 0x22DCD, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate path]', symObjAddr: 0x470, symBinAddr: 0xB720, symSize: 0x8 }
- { offsetInCU: 0x449, offset: 0x22E02, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate ioQueue]', symObjAddr: 0x478, symBinAddr: 0xB728, symSize: 0x8 }
- { offsetInCU: 0x47E, offset: 0x22E37, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate completionHandler]', symObjAddr: 0x480, symBinAddr: 0xB730, symSize: 0x8 }
- { offsetInCU: 0x4B3, offset: 0x22E6C, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate setFilePath:]', symObjAddr: 0x488, symBinAddr: 0xB738, symSize: 0xC }
- { offsetInCU: 0x4F2, offset: 0x22EAB, size: 0x8, addend: 0x0, symName: '-[FLTSavePhotoDelegate .cxx_destruct]', symObjAddr: 0x494, symBinAddr: 0xB744, symSize: 0x48 }
- { offsetInCU: 0x27, offset: 0x230DF, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeEventChannel initWithEventChannel:]', symObjAddr: 0x0, symBinAddr: 0xB78C, symSize: 0x78 }
- { offsetInCU: 0x7F, offset: 0x23137, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeEventChannel initWithEventChannel:]', symObjAddr: 0x0, symBinAddr: 0xB78C, symSize: 0x78 }
- { offsetInCU: 0xC2, offset: 0x2317A, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeEventChannel setStreamHandler:completion:]', symObjAddr: 0x78, symBinAddr: 0xB804, symSize: 0xB4 }
- { offsetInCU: 0x1A1, offset: 0x23259, size: 0x8, addend: 0x0, symName: '___57-[FLTThreadSafeEventChannel setStreamHandler:completion:]_block_invoke', symObjAddr: 0x12C, symBinAddr: 0xB8B8, symSize: 0x48 }
- { offsetInCU: 0x209, offset: 0x232C1, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s40s48b, symObjAddr: 0x174, symBinAddr: 0xB900, symSize: 0x3C }
- { offsetInCU: 0x22F, offset: 0x232E7, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40s48s, symObjAddr: 0x1B0, symBinAddr: 0xB93C, symSize: 0x30 }
- { offsetInCU: 0x24C, offset: 0x23304, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeEventChannel channel]', symObjAddr: 0x1E0, symBinAddr: 0xB96C, symSize: 0x8 }
- { offsetInCU: 0x281, offset: 0x23339, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeEventChannel setChannel:]', symObjAddr: 0x1E8, symBinAddr: 0xB974, symSize: 0xC }
- { offsetInCU: 0x2C0, offset: 0x23378, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeEventChannel .cxx_destruct]', symObjAddr: 0x1F4, symBinAddr: 0xB980, symSize: 0xC }
- { offsetInCU: 0x27, offset: 0x234E0, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult initWithResult:]', symObjAddr: 0x0, symBinAddr: 0xB98C, symSize: 0x88 }
- { offsetInCU: 0xB2, offset: 0x2356B, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult initWithResult:]', symObjAddr: 0x0, symBinAddr: 0xB98C, symSize: 0x88 }
- { offsetInCU: 0xF5, offset: 0x235AE, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult sendSuccess]', symObjAddr: 0x88, symBinAddr: 0xBA14, symSize: 0x8 }
- { offsetInCU: 0x125, offset: 0x235DE, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult sendSuccessWithData:]', symObjAddr: 0x90, symBinAddr: 0xBA1C, symSize: 0x4 }
- { offsetInCU: 0x163, offset: 0x2361C, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult sendError:]', symObjAddr: 0x94, symBinAddr: 0xBA20, symSize: 0xC4 }
- { offsetInCU: 0x1A2, offset: 0x2365B, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult sendErrorWithCode:message:details:]', symObjAddr: 0x158, symBinAddr: 0xBAE4, symSize: 0x44 }
- { offsetInCU: 0x20E, offset: 0x236C7, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult sendFlutterError:]', symObjAddr: 0x19C, symBinAddr: 0xBB28, symSize: 0x4 }
- { offsetInCU: 0x24C, offset: 0x23705, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult sendNotImplemented]', symObjAddr: 0x1A0, symBinAddr: 0xBB2C, symSize: 0x10 }
- { offsetInCU: 0x27C, offset: 0x23735, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult send:]', symObjAddr: 0x1B0, symBinAddr: 0xBB3C, symSize: 0x7C }
- { offsetInCU: 0x2E2, offset: 0x2379B, size: 0x8, addend: 0x0, symName: '___35-[FLTThreadSafeFlutterResult send:]_block_invoke', symObjAddr: 0x22C, symBinAddr: 0xBBB8, symSize: 0x40 }
- { offsetInCU: 0x33B, offset: 0x237F4, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult flutterResult]', symObjAddr: 0x2BC, symBinAddr: 0xBBF8, symSize: 0x8 }
- { offsetInCU: 0x370, offset: 0x23829, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeFlutterResult .cxx_destruct]', symObjAddr: 0x2C4, symBinAddr: 0xBC00, symSize: 0xC }
- { offsetInCU: 0x27, offset: 0x2395C, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeMethodChannel initWithMethodChannel:]', symObjAddr: 0x0, symBinAddr: 0xBC0C, symSize: 0x78 }
- { offsetInCU: 0x7F, offset: 0x239B4, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeMethodChannel initWithMethodChannel:]', symObjAddr: 0x0, symBinAddr: 0xBC0C, symSize: 0x78 }
- { offsetInCU: 0xC2, offset: 0x239F7, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeMethodChannel invokeMethod:arguments:]', symObjAddr: 0x78, symBinAddr: 0xBC84, symSize: 0x108 }
- { offsetInCU: 0x155, offset: 0x23A8A, size: 0x8, addend: 0x0, symName: '___53-[FLTThreadSafeMethodChannel invokeMethod:arguments:]_block_invoke', symObjAddr: 0x180, symBinAddr: 0xBD8C, symSize: 0x54 }
- { offsetInCU: 0x1AB, offset: 0x23AE0, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeMethodChannel channel]', symObjAddr: 0x23C, symBinAddr: 0xBDE0, symSize: 0x8 }
- { offsetInCU: 0x1E0, offset: 0x23B15, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeMethodChannel setChannel:]', symObjAddr: 0x244, symBinAddr: 0xBDE8, symSize: 0xC }
- { offsetInCU: 0x21F, offset: 0x23B54, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeMethodChannel .cxx_destruct]', symObjAddr: 0x250, symBinAddr: 0xBDF4, symSize: 0xC }
- { offsetInCU: 0x27, offset: 0x23CB7, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry initWithTextureRegistry:]', symObjAddr: 0x0, symBinAddr: 0xBE00, symSize: 0x78 }
- { offsetInCU: 0x7F, offset: 0x23D0F, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry initWithTextureRegistry:]', symObjAddr: 0x0, symBinAddr: 0xBE00, symSize: 0x78 }
- { offsetInCU: 0xC2, offset: 0x23D52, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry registerTexture:completion:]', symObjAddr: 0x78, symBinAddr: 0xBE78, symSize: 0x108 }
- { offsetInCU: 0x155, offset: 0x23DE5, size: 0x8, addend: 0x0, symName: '___59-[FLTThreadSafeTextureRegistry registerTexture:completion:]_block_invoke', symObjAddr: 0x180, symBinAddr: 0xBF80, symSize: 0x70 }
- { offsetInCU: 0x1DA, offset: 0x23E6A, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry textureFrameAvailable:]', symObjAddr: 0x260, symBinAddr: 0xBFF0, symSize: 0xA8 }
- { offsetInCU: 0x23C, offset: 0x23ECC, size: 0x8, addend: 0x0, symName: '___54-[FLTThreadSafeTextureRegistry textureFrameAvailable:]_block_invoke', symObjAddr: 0x308, symBinAddr: 0xC098, symSize: 0x54 }
- { offsetInCU: 0x283, offset: 0x23F13, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry unregisterTexture:]', symObjAddr: 0x370, symBinAddr: 0xC0EC, symSize: 0xA8 }
- { offsetInCU: 0x2E5, offset: 0x23F75, size: 0x8, addend: 0x0, symName: '___50-[FLTThreadSafeTextureRegistry unregisterTexture:]_block_invoke', symObjAddr: 0x418, symBinAddr: 0xC194, symSize: 0x54 }
- { offsetInCU: 0x32C, offset: 0x23FBC, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry registry]', symObjAddr: 0x46C, symBinAddr: 0xC1E8, symSize: 0x8 }
- { offsetInCU: 0x361, offset: 0x23FF1, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry setRegistry:]', symObjAddr: 0x474, symBinAddr: 0xC1F0, symSize: 0xC }
- { offsetInCU: 0x3A0, offset: 0x24030, size: 0x8, addend: 0x0, symName: '-[FLTThreadSafeTextureRegistry .cxx_destruct]', symObjAddr: 0x480, symBinAddr: 0xC1FC, symSize: 0xC }
- { offsetInCU: 0x27, offset: 0x242CE, size: 0x8, addend: 0x0, symName: _FLTEnsureToRunOnMainQueue, symObjAddr: 0x0, symBinAddr: 0xC208, symSize: 0x58 }
- { offsetInCU: 0x4E, offset: 0x242F5, size: 0x8, addend: 0x0, symName: _FLTCaptureSessionQueueSpecific, symObjAddr: 0x70, symBinAddr: 0x1D928, symSize: 0x0 }
- { offsetInCU: 0x76, offset: 0x2431D, size: 0x8, addend: 0x0, symName: _FLTEnsureToRunOnMainQueue, symObjAddr: 0x0, symBinAddr: 0xC208, symSize: 0x58 }
...