Skip to content

Commit f70794d

Browse files
authored
[camera]rename dispatchQueue to captureSessionQueue (flutter#4687)
1 parent 2d0cec9 commit f70794d

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

packages/camera/camera/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## NEXT
2+
3+
* Minor internal code cleanup.
4+
15
## 0.9.4+6
26

37
* Fixes a crash in iOS when using image stream due to calling Flutter engine API on non-main thread.

packages/camera/camera/ios/Classes/CameraPlugin.m

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,31 +22,31 @@ @interface FLTSavePhotoDelegate : NSObject <AVCapturePhotoCaptureDelegate>
2222

2323
@interface FLTImageStreamHandler : NSObject <FlutterStreamHandler>
2424
// The queue on which `eventSink` property should be accessed
25-
@property(nonatomic, strong) dispatch_queue_t dispatchQueue;
26-
// `eventSink` property should be accessed on `dispatchQueue`.
25+
@property(nonatomic, strong) dispatch_queue_t captureSessionQueue;
26+
// `eventSink` property should be accessed on `captureSessionQueue`.
2727
// The block itself should be invoked on the main queue.
2828
@property FlutterEventSink eventSink;
2929
@end
3030

3131
@implementation FLTImageStreamHandler
3232

33-
- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue {
33+
- (instancetype)initWithCaptureSessionQueue:(dispatch_queue_t)captureSessionQueue {
3434
self = [super init];
3535
NSAssert(self, @"super init cannot be nil");
36-
_dispatchQueue = dispatchQueue;
36+
_captureSessionQueue = captureSessionQueue;
3737
return self;
3838
}
3939

4040
- (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments {
41-
dispatch_async(self.dispatchQueue, ^{
41+
dispatch_async(self.captureSessionQueue, ^{
4242
self.eventSink = nil;
4343
});
4444
return nil;
4545
}
4646

4747
- (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments
4848
eventSink:(nonnull FlutterEventSink)events {
49-
dispatch_async(self.dispatchQueue, ^{
49+
dispatch_async(self.captureSessionQueue, ^{
5050
self.eventSink = events;
5151
});
5252
return nil;
@@ -360,7 +360,9 @@ @interface FLTCam : NSObject <FlutterTexture,
360360
@end
361361

362362
@implementation FLTCam {
363-
dispatch_queue_t _dispatchQueue;
363+
// All FLTCam's state access and capture session related operations should be on run on this
364+
// queue.
365+
dispatch_queue_t _captureSessionQueue;
364366
UIDeviceOrientation _deviceOrientation;
365367
}
366368
// Format used for video and image streaming.
@@ -371,7 +373,7 @@ - (instancetype)initWithCameraName:(NSString *)cameraName
371373
resolutionPreset:(NSString *)resolutionPreset
372374
enableAudio:(BOOL)enableAudio
373375
orientation:(UIDeviceOrientation)orientation
374-
dispatchQueue:(dispatch_queue_t)dispatchQueue
376+
captureSessionQueue:(dispatch_queue_t)captureSessionQueue
375377
error:(NSError **)error {
376378
self = [super init];
377379
NSAssert(self, @"super init cannot be nil");
@@ -381,7 +383,7 @@ - (instancetype)initWithCameraName:(NSString *)cameraName
381383
*error = e;
382384
}
383385
_enableAudio = enableAudio;
384-
_dispatchQueue = dispatchQueue;
386+
_captureSessionQueue = captureSessionQueue;
385387
_captureSession = [[AVCaptureSession alloc] init];
386388
_captureDevice = [AVCaptureDevice deviceWithUniqueID:cameraName];
387389
_flashMode = _captureDevice.hasFlash ? FlashModeAuto : FlashModeOff;
@@ -1141,10 +1143,11 @@ - (void)startImageStreamWithMessenger:(NSObject<FlutterBinaryMessenger> *)messen
11411143
FLTThreadSafeEventChannel *threadSafeEventChannel =
11421144
[[FLTThreadSafeEventChannel alloc] initWithEventChannel:eventChannel];
11431145

1144-
_imageStreamHandler = [[FLTImageStreamHandler alloc] initWithDispatchQueue:_dispatchQueue];
1146+
_imageStreamHandler =
1147+
[[FLTImageStreamHandler alloc] initWithCaptureSessionQueue:_captureSessionQueue];
11451148
[threadSafeEventChannel setStreamHandler:_imageStreamHandler
11461149
completion:^{
1147-
dispatch_async(self->_dispatchQueue, ^{
1150+
dispatch_async(self->_captureSessionQueue, ^{
11481151
self.isStreamingImages = YES;
11491152
});
11501153
}];
@@ -1268,7 +1271,7 @@ - (BOOL)setupWriterForPath:(NSString *)path {
12681271
_audioWriterInput.expectsMediaDataInRealTime = YES;
12691272

12701273
[_videoWriter addInput:_audioWriterInput];
1271-
[_audioOutput setSampleBufferDelegate:self queue:_dispatchQueue];
1274+
[_audioOutput setSampleBufferDelegate:self queue:_captureSessionQueue];
12721275
}
12731276

12741277
if (_flashMode == FlashModeTorch) {
@@ -1279,7 +1282,7 @@ - (BOOL)setupWriterForPath:(NSString *)path {
12791282

12801283
[_videoWriter addInput:_videoWriterInput];
12811284

1282-
[_captureVideoOutput setSampleBufferDelegate:self queue:_dispatchQueue];
1285+
[_captureVideoOutput setSampleBufferDelegate:self queue:_captureSessionQueue];
12831286

12841287
return YES;
12851288
}
@@ -1320,7 +1323,7 @@ @interface CameraPlugin ()
13201323
@end
13211324

13221325
@implementation CameraPlugin {
1323-
dispatch_queue_t _dispatchQueue;
1326+
dispatch_queue_t _captureSessionQueue;
13241327
}
13251328

13261329
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
@@ -1382,12 +1385,12 @@ - (void)sendDeviceOrientation:(UIDeviceOrientation)orientation {
13821385
}
13831386

13841387
- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result {
1385-
if (_dispatchQueue == nil) {
1386-
_dispatchQueue = dispatch_queue_create("io.flutter.camera.dispatchqueue", NULL);
1388+
if (_captureSessionQueue == nil) {
1389+
_captureSessionQueue = dispatch_queue_create("io.flutter.camera.dispatchqueue", NULL);
13871390
}
13881391

13891392
// Invoke the plugin on another dispatch queue to avoid blocking the UI.
1390-
dispatch_async(_dispatchQueue, ^{
1393+
dispatch_async(_captureSessionQueue, ^{
13911394
FLTThreadSafeFlutterResult *threadSafeResult =
13921395
[[FLTThreadSafeFlutterResult alloc] initWithResult:result];
13931396

@@ -1438,7 +1441,7 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call
14381441
resolutionPreset:resolutionPreset
14391442
enableAudio:[enableAudio boolValue]
14401443
orientation:[[UIDevice currentDevice] orientation]
1441-
dispatchQueue:_dispatchQueue
1444+
captureSessionQueue:_captureSessionQueue
14421445
error:&error];
14431446

14441447
if (error) {
@@ -1504,7 +1507,7 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call
15041507
} else if ([@"dispose" isEqualToString:call.method]) {
15051508
[_registry unregisterTexture:cameraId];
15061509
[_camera close];
1507-
_dispatchQueue = nil;
1510+
_captureSessionQueue = nil;
15081511
[result sendSuccess];
15091512
} else if ([@"prepareForVideoRecording" isEqualToString:call.method]) {
15101513
[_camera setUpCaptureSessionForAudio];

0 commit comments

Comments
 (0)