SameBoy | Accurate GB/GBC emulator |
| download: https://git.y1.nz/archives/sameboy.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit 8600f96fa235b995056fc7f86902a78307cf825f parent 0b7766250470b4c1f7d0363037a28c01877e7180 Author: Lior Halphon <LIJI32@gmail.com> Date: Sun, 9 Jun 2024 17:58:28 +0300 Fix a race condition with camera emulation Diffstat:
| M | iOS/GBViewController.m | 62 | +++++++++++++++++++++++++++++++------------------------------- |
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/iOS/GBViewController.m b/iOS/GBViewController.m @@ -1091,39 +1091,39 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response - (void)cameraRequestUpdate { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - @try { - if (!_cameraSession) { - NSError *error; - AVCaptureDevice *device = [self captureDevice]; - AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice: device error: &error]; - - if (!input) { - GB_camera_updated(&_gb); - return; - } - - _cameraOutput = [[AVCaptureVideoDataOutput alloc] init]; - [_cameraOutput setVideoSettings: @{(id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)}]; - [_cameraOutput setSampleBufferDelegate:self - queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)]; - - - - _cameraSession = [AVCaptureSession new]; - _cameraSession.sessionPreset = AVCaptureSessionPreset352x288; - - [_cameraSession addInput: input]; - [_cameraSession addOutput: _cameraOutput]; - _cameraConnection = [_cameraOutput connectionWithMediaType: AVMediaTypeVideo]; - _cameraConnection.videoOrientation = AVCaptureVideoOrientationPortrait; - [_cameraSession startRunning]; + @try { + if (!_cameraSession) { + NSError *error; + AVCaptureDevice *device = [self captureDevice]; + AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice: device error: &error]; + + if (!input) { + GB_camera_updated(&_gb); + return; } + + _cameraOutput = [[AVCaptureVideoDataOutput alloc] init]; + [_cameraOutput setVideoSettings: @{(id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)}]; + [_cameraOutput setSampleBufferDelegate:self + queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)]; + + + + _cameraSession = [AVCaptureSession new]; + _cameraSession.sessionPreset = AVCaptureSessionPreset352x288; + + [_cameraSession addInput: input]; + [_cameraSession addOutput: _cameraOutput]; + _cameraConnection = [_cameraOutput connectionWithMediaType: AVMediaTypeVideo]; + _cameraConnection.videoOrientation = AVCaptureVideoOrientationPortrait; + [_cameraSession startRunning]; } - @catch (NSException *exception) { - /* I have not tested camera support on many devices, so we catch exceptions just in case. */ - GB_camera_updated(&_gb); - } + } + @catch (NSException *exception) { + /* I have not tested camera support on many devices, so we catch exceptions just in case. */ + GB_camera_updated(&_gb); + } + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ _cameraNeedsUpdate = true; [_disableCameraTimer invalidate]; dispatch_async(dispatch_get_main_queue(), ^{
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.