diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index e9db5de89e54..0acd28b1d29e 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Minor internal code cleanup. + ## 0.9.4+6 * Fixes a crash in iOS when using image stream due to calling Flutter engine API on non-main thread. diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.m b/packages/camera/camera/ios/Classes/CameraPlugin.m index 09b5f0ff2e30..f8574dc60732 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/camera/ios/Classes/CameraPlugin.m @@ -22,23 +22,23 @@ @interface FLTSavePhotoDelegate : NSObject @interface FLTImageStreamHandler : NSObject // The queue on which `eventSink` property should be accessed -@property(nonatomic, strong) dispatch_queue_t dispatchQueue; -// `eventSink` property should be accessed on `dispatchQueue`. +@property(nonatomic, strong) dispatch_queue_t captureSessionQueue; +// `eventSink` property should be accessed on `captureSessionQueue`. // The block itself should be invoked on the main queue. @property FlutterEventSink eventSink; @end @implementation FLTImageStreamHandler -- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue { +- (instancetype)initWithCaptureSessionQueue:(dispatch_queue_t)captureSessionQueue { self = [super init]; NSAssert(self, @"super init cannot be nil"); - _dispatchQueue = dispatchQueue; + _captureSessionQueue = captureSessionQueue; return self; } - (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments { - dispatch_async(self.dispatchQueue, ^{ + dispatch_async(self.captureSessionQueue, ^{ self.eventSink = nil; }); return nil; @@ -46,7 +46,7 @@ - (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments { - (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(nonnull FlutterEventSink)events { - dispatch_async(self.dispatchQueue, ^{ + dispatch_async(self.captureSessionQueue, ^{ self.eventSink = events; }); return nil; @@ -360,7 +360,9 @@ @interface FLTCam : NSObject *)messen FLTThreadSafeEventChannel *threadSafeEventChannel = [[FLTThreadSafeEventChannel alloc] initWithEventChannel:eventChannel]; - _imageStreamHandler = [[FLTImageStreamHandler alloc] initWithDispatchQueue:_dispatchQueue]; + _imageStreamHandler = + [[FLTImageStreamHandler alloc] initWithCaptureSessionQueue:_captureSessionQueue]; [threadSafeEventChannel setStreamHandler:_imageStreamHandler completion:^{ - dispatch_async(self->_dispatchQueue, ^{ + dispatch_async(self->_captureSessionQueue, ^{ self.isStreamingImages = YES; }); }]; @@ -1268,7 +1271,7 @@ - (BOOL)setupWriterForPath:(NSString *)path { _audioWriterInput.expectsMediaDataInRealTime = YES; [_videoWriter addInput:_audioWriterInput]; - [_audioOutput setSampleBufferDelegate:self queue:_dispatchQueue]; + [_audioOutput setSampleBufferDelegate:self queue:_captureSessionQueue]; } if (_flashMode == FlashModeTorch) { @@ -1279,7 +1282,7 @@ - (BOOL)setupWriterForPath:(NSString *)path { [_videoWriter addInput:_videoWriterInput]; - [_captureVideoOutput setSampleBufferDelegate:self queue:_dispatchQueue]; + [_captureVideoOutput setSampleBufferDelegate:self queue:_captureSessionQueue]; return YES; } @@ -1320,7 +1323,7 @@ @interface CameraPlugin () @end @implementation CameraPlugin { - dispatch_queue_t _dispatchQueue; + dispatch_queue_t _captureSessionQueue; } + (void)registerWithRegistrar:(NSObject *)registrar { @@ -1382,12 +1385,12 @@ - (void)sendDeviceOrientation:(UIDeviceOrientation)orientation { } - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { - if (_dispatchQueue == nil) { - _dispatchQueue = dispatch_queue_create("io.flutter.camera.dispatchqueue", NULL); + if (_captureSessionQueue == nil) { + _captureSessionQueue = dispatch_queue_create("io.flutter.camera.dispatchqueue", NULL); } // Invoke the plugin on another dispatch queue to avoid blocking the UI. - dispatch_async(_dispatchQueue, ^{ + dispatch_async(_captureSessionQueue, ^{ FLTThreadSafeFlutterResult *threadSafeResult = [[FLTThreadSafeFlutterResult alloc] initWithResult:result]; @@ -1438,7 +1441,7 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call resolutionPreset:resolutionPreset enableAudio:[enableAudio boolValue] orientation:[[UIDevice currentDevice] orientation] - dispatchQueue:_dispatchQueue + captureSessionQueue:_captureSessionQueue error:&error]; if (error) { @@ -1504,7 +1507,7 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call } else if ([@"dispose" isEqualToString:call.method]) { [_registry unregisterTexture:cameraId]; [_camera close]; - _dispatchQueue = nil; + _captureSessionQueue = nil; [result sendSuccess]; } else if ([@"prepareForVideoRecording" isEqualToString:call.method]) { [_camera setUpCaptureSessionForAudio];