Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛 iOS capture photo throws an error when enableAutoDistortionCorrection is enabled #496

Closed
3 of 4 tasks
kidculli opened this issue Oct 7, 2021 · 5 comments · Fixed by #1466
Closed
3 of 4 tasks
Labels
🐛 bug Something isn't working

Comments

@kidculli
Copy link

kidculli commented Oct 7, 2021

What were you trying to do?

Attempted to take a picture on IOS device with autoDistortionCorrection enabled

Reproduceable Code

<Camera
          style={{width: '100%', height: '100%'}}
          ref={camera}
          device={device as CameraDevice}
          preset="photo"
          isActive={true}
          photo={true}
        />

<FAB
        style={{position: 'absolute', margin: 16, right: 0, bottom: 0}}
        small
        onPress={() => {
       
            camera.current
              ?.takePhoto({
                qualityPrioritization: 'quality',
                skipMetadata: true,
                flash: 'off',
                enableAutoDistortionCorrection: true,
                enableAutoStabilization: true,
              })
              .then(image => {
                setPictureData(image);
                handleImageProcessing(image);
              })
              .finally(() => setIsProcessing(false));
          }
        }}
      />

What happened instead?

Error is thrown from this line

Exception	NSException *	"*** -[AVCapturePhotoOutput capturePhotoWithSettings:delegate:] settings.autoContentAwareDistortionCorrectionEnabled may not be set to YES unless self.contentAwareDistortionCorrectionEnabled is YES"	0x0000000280304120

Relevant log output

flipper: FlipperClient::addPlugin Inspector
flipper: FlipperClient::addPlugin Preferences
flipper: FlipperClient::addPlugin React
flipper: FlipperClient::addPlugin Network
2021-10-07 18:21:00.108916-0400 FOO[1269:493267] [native] Running application FOO ({
    initialProps =     {
    };
    rootTag = 1;
})
WARNING: Logging before InitGoogleLogging() is written to STDERR
I1007 18:21:00.110905 1872719872 Inspector.cpp:126] Inspector::Inspector transitioning to initial state RunningDetached
2021-10-07 18:21:00.136113-0400 FOO[1269:493590] FrameProcessorBindings: Creating Runtime Manager...
2021-10-07 18:21:00.136464-0400 FOO[1269:493590] FrameProcessorBindings: Runtime Manager created!
2021-10-07 18:21:00.136486-0400 FOO[1269:493590] FrameProcessorBindings: Installing Frame Processor plugins...
2021-10-07 18:21:00.136504-0400 FOO[1269:493590] FrameProcessorBindings: Frame Processor plugins installed!
2021-10-07 18:21:00.136550-0400 FOO[1269:493596] FrameProcessorBindings: Installing Frame Processor Bindings for Bridge...
2021-10-07 18:21:00.136574-0400 FOO[1269:493596] FrameProcessorBindings: Installing global functions...
2021-10-07 18:21:00.136603-0400 FOO[1269:493596] FrameProcessorBindings: Finished installing bindings.
I1007 18:21:04.714180 1872719872 Inspector.cpp:490] received didPause for reason: 0 in state: RunningDetached
2021-10-07 18:21:05.034038-0400 FOO[1269:493596] [javascript] Running "FOO" with {"rootTag":1,"initialProps":{}}
2021-10-07 18:21:05.160937-0400 FOO[1269:493588] [connection] nw_socket_handle_socket_event [C5:1] Socket SO_ERROR [61: Connection refused]
2021-10-07 18:21:05.161171-0400 FOO[1269:493592] [connection] nw_connection_get_connected_socket [C5] Client called nw_connection_get_connected_socket on unconnected nw_connection
2021-10-07 18:21:05.161271-0400 FOO[1269:493592] TCP Conn 0x283b9c630 Failed : error 0:61 [61]
2021-10-07 18:21:05.326671-0400 FOO[1269:493267] [native] [GESTURE HANDLER] Initialize gesture handler for root view <RCTRootContentView: 0x105d15f10; reactTag: 1; frame = (0 0; 414 896); gestureRecognizers = <NSArray: 0x2802ad680>; layer = <CALayer: 0x280aa23a0>>
2021-10-07 18:21:09.968471-0400 FOO[1269:493267] [native] VisionCamera.didSetProps(_:): Updating 10 prop(s)...
2021-10-07 18:21:09.968604-0400 FOO[1269:493588] [native] VisionCamera.configureCaptureSession(): Configuring Session...
2021-10-07 18:21:09.968617-0400 FOO[1269:493588] [native] VisionCamera.configureCaptureSession(): Initializing Camera with device com.apple.avfoundation.avcapturedevice.built-in_video:6...
2021-10-07 18:21:09.968655-0400 FOO[1269:493588] [native] VisionCamera.configureCaptureSession(): Adding Video input...
2021-10-07 18:21:09.978813-0400 FOO[1269:493588] [native] VisionCamera.configureCaptureSession(): Adding Photo output...
2021-10-07 18:21:09.982331-0400 FOO[1269:493588] [native] VisionCamera.invokeOnInitialized(): Camera initialized!
2021-10-07 18:21:09.982412-0400 FOO[1269:493588] [native] VisionCamera.configureCaptureSession(): Session successfully configured!
2021-10-07 18:21:09.982984-0400 FOO[1269:493588] [native] VisionCamera.configureFormat(): Configuring Format...
2021-10-07 18:21:09.982995-0400 FOO[1269:493588] [native] VisionCamera.configureDevice(): Configuring Device...
2021-10-07 18:21:09.983002-0400 FOO[1269:493588] [native] VisionCamera.configureDevice(): Device successfully configured!
2021-10-07 18:21:09.984223-0400 FOO[1269:493588] [native] VisionCamera.didSetProps(_:): Starting Session...
2021-10-07 18:21:10.706210-0400 FOO[1269:493588] [native] VisionCamera.didSetProps(_:): Started Session!
2021-10-07 18:21:34.506429-0400 FOO[1269:493590] [native] VisionCamera.takePhoto(options:promise:): Capturing photo...

Device

iPhone 11 Pro Max (iOS 15.0)

VisionCamera Version

2.8.3

Additional information

@kidculli kidculli added the 🐛 bug Something isn't working label Oct 7, 2021
@mrousavy
Copy link
Owner

Hi, thanks for the detailed bug report!

@kidculli
Copy link
Author

Hi, thanks for the detailed bug report!

My pleasure, thanks for the fantastic module :)

@almost
Copy link

almost commented May 27, 2022

Did you find any workarounds for this? Taking photos fails on iOS for me with this error and I don't think I have any particularly odd settings.

@kidculli
Copy link
Author

Did you find any workarounds for this? Taking photos fails on iOS for me with this error and I don't think I have any particularly odd settings.

@almost I ended up using react-native-camera instead.

@mrousavy
Copy link
Owner

The fix for this would be to move autoDistortionCorrection from takePhoto(...) props to the actual <Camera> view props, then set self.contentAwareDistortionCorrectionEnabled to true in the CameraView+AVCaptureSession.swift file and in CameraView+TakePhoto.swift you just check the props if it's enabled.

I don't have a lot of time rn to fix this, but if anyone wants to attempt to fix it in the meantime I'll gladly merge a PR

rrr-core added a commit to rrr-core/vision-camera that referenced this issue Jul 11, 2024
See mrousavy/react-native-vision-camera#1376

## Breaking Changes

* Frame Processors are now **synchronous**. Previously they ran on a
separate Thread. If you want to run something on a separate Thread now,
use `runAsync` inside a Frame Processor
* Frame Processor Plugins are no longer in the global object with the
`__` prefix, but rather stored directly in the `FrameProcessorPlugins`
object exported by react-native-vision-camera. (e.g. replace
`__scanQRCodes(frame)` with `FrameProcessorPlugins.scanQRCodes(frame)`)
* `frameProcessorFps` no longer exists. Use `runAtTargetFps` inside a
Frame Processor to throttle some calls.
* `onFrameProcessorPerformanceSuggestionAvailable` no longer exists. Use
the FPS display (`enableFpsGraph={true}`) to see how your Frame
Processor performs over time. This is more in-line with how React Native
works (Dev Tools / Perf Monitor)
* VisionCamera V3 will not work on RN 0.70 or below. You need to use RN
0.71. This is because the build script got way simpler and smaller,
making it faster to build and way less error prone. Backwards
compatibility is just too complex here.
* Reanimated is no longer used as a Worklet Runtime. Instead,
VisionCamera now uses
[react-native-worklets-core](https://github.com/margelo/react-native-worklets-core).

## Progress

You can test the latest V3 release by creating a new RN project with RN
0.71 and installing VisionCamera + RNWorklets:

```sh
yarn add react-native-vision-camera@3.0.0-rc.5
yarn add react-native-worklets-core
yarn add @shopify/react-native-skia
```

Things to test:

* TensorFlow Lite plugin to load any `.tflite` model!! ✨ (see [this PR
for more
info](mrousavy/react-native-vision-camera#1633),
will be a separate library soon)
* Drawing onto a Frame using Skia!! 🎉 
* Using `frame.toArrayBuffer()` to get the Frame's byte content in JS
* New Android build script. This should drastically speed up the build
time! 💨
* New Worklet library. This replaces Reanimated Worklets. Should be
faster and more stable :)
* New synchronous Frame Processors. Should be faster :)
* `runAtTargetFps` and `runAsync` in Frame Processors
* Using HostObjects or HostFunctions (like models from PyTorch) inside a
Frame Processor. This will probably require a few native bindings on
PyTorch's end to make the integration work (cc @raedle)

Overall V3 is close to completion. I have a few things to do the coming
days so not sure how much work I can put into this. **If anyone wants to
support the development of v3, I'd appreciate donations / sponsors:
https://github.com/sponsors/mrousavy** ❤️ :)


## Related issues 

features

- resolves
mrousavy/react-native-vision-camera#1376
- fixes
mrousavy/react-native-vision-camera#281
- resolves
mrousavy/react-native-vision-camera#211
- resolves
mrousavy/react-native-vision-camera#130
- resolves
mrousavy/react-native-vision-camera#117
- fixes mrousavy/react-native-vision-camera#76
- resolves
mrousavy/react-native-vision-camera#75
- resolves
mrousavy/react-native-vision-camera#562
- resolves
mrousavy/react-native-vision-camera#565
- fixes
mrousavy/react-native-vision-camera#570
- fixes
mrousavy/react-native-vision-camera#287
- resolves
mrousavy/react-native-vision-camera#311
- fixes
mrousavy/react-native-vision-camera#315
- resolves
mrousavy/react-native-vision-camera#323
- fixes
mrousavy/react-native-vision-camera#340
- fixes
mrousavy/react-native-vision-camera#354
- resolves
mrousavy/react-native-vision-camera#420
- fixes
mrousavy/react-native-vision-camera#434
- fixes
mrousavy/react-native-vision-camera#452
- fixes
mrousavy/react-native-vision-camera#496
- fixes
mrousavy/react-native-vision-camera#497
- resolves
mrousavy/react-native-vision-camera#499
- fixes
mrousavy/react-native-vision-camera#516
- fixes
mrousavy/react-native-vision-camera#527
- fixes
mrousavy/react-native-vision-camera#542
- fixes
mrousavy/react-native-vision-camera#548
- fixes
mrousavy/react-native-vision-camera#561
- fixes
mrousavy/react-native-vision-camera#740
- fixes
mrousavy/react-native-vision-camera#770


...and then pretty much every Android issue lol

- fixes
mrousavy/react-native-vision-camera#1675
(**maybe**, please test @PrernaBudhraja)
- fixes
mrousavy/react-native-vision-camera#1671

.. maybe also (not tested):

- fixes
mrousavy/react-native-vision-camera#1698
- fixes
mrousavy/react-native-vision-camera#1687
- fixes
mrousavy/react-native-vision-camera#1685
- fixes
mrousavy/react-native-vision-camera#1681
- fixes
mrousavy/react-native-vision-camera#1650
- fixes
mrousavy/react-native-vision-camera#1646
- fixes
mrousavy/react-native-vision-camera#1635
- fixes
mrousavy/react-native-vision-camera#1631
- fixes
mrousavy/react-native-vision-camera#1621
- fixes
mrousavy/react-native-vision-camera#1615
- fixes
mrousavy/react-native-vision-camera#1612
- fixes
mrousavy/react-native-vision-camera#1605
- fixes
mrousavy/react-native-vision-camera#1599
- fixes
mrousavy/react-native-vision-camera#1585
- fixes
mrousavy/react-native-vision-camera#1581
- fixes
mrousavy/react-native-vision-camera#1569
- fixes
mrousavy/react-native-vision-camera#1568
- fixes
mrousavy/react-native-vision-camera#1565
- fixes
mrousavy/react-native-vision-camera#1561
- fixes
mrousavy/react-native-vision-camera#1558
- fixes
mrousavy/react-native-vision-camera#1554
- fixes
mrousavy/react-native-vision-camera#1551
- fixes
mrousavy/react-native-vision-camera#1547
- fixes
mrousavy/react-native-vision-camera#1543
- fixes
mrousavy/react-native-vision-camera#1538
- fixes
mrousavy/react-native-vision-camera#1536
- fixes
mrousavy/react-native-vision-camera#1534
- fixes
mrousavy/react-native-vision-camera#1528
- fixes
mrousavy/react-native-vision-camera#1520
- fixes
mrousavy/react-native-vision-camera#1498
- fixes
mrousavy/react-native-vision-camera#1489
- fixes
mrousavy/react-native-vision-camera#1477
- fixes
mrousavy/react-native-vision-camera#1474
- fixes
mrousavy/react-native-vision-camera#1463
- fixes
mrousavy/react-native-vision-camera#1462
- fixes
mrousavy/react-native-vision-camera#1449
- fixes
mrousavy/react-native-vision-camera#1443
- fixes
mrousavy/react-native-vision-camera#1437
- fixes
mrousavy/react-native-vision-camera#1431
- fixes
mrousavy/react-native-vision-camera#1429
- fixes
mrousavy/react-native-vision-camera#1427
- fixes
mrousavy/react-native-vision-camera#1423
- fixes
mrousavy/react-native-vision-camera#1416
- fixes
mrousavy/react-native-vision-camera#1407
- fixes
mrousavy/react-native-vision-camera#1403
- fixes
mrousavy/react-native-vision-camera#1402
- fixes
mrousavy/react-native-vision-camera#1398
- fixes
mrousavy/react-native-vision-camera#1396
- fixes
mrousavy/react-native-vision-camera#1395
- fixes
mrousavy/react-native-vision-camera#1379
- fixes
mrousavy/react-native-vision-camera#1377
- fixes
mrousavy/react-native-vision-camera#1374
- fixes
mrousavy/react-native-vision-camera#1373
- fixes
mrousavy/react-native-vision-camera#1365
- fixes
mrousavy/react-native-vision-camera#1356
- fixes
mrousavy/react-native-vision-camera#1353
- fixes
mrousavy/react-native-vision-camera#1352
- fixes
mrousavy/react-native-vision-camera#1351
- fixes
mrousavy/react-native-vision-camera#1343
- fixes
mrousavy/react-native-vision-camera#1340
- fixes
mrousavy/react-native-vision-camera#1334
- fixes
mrousavy/react-native-vision-camera#1330
- fixes
mrousavy/react-native-vision-camera#1322
- fixes
mrousavy/react-native-vision-camera#1296
- fixes
mrousavy/react-native-vision-camera#1283
- fixes
mrousavy/react-native-vision-camera#1260
- fixes
mrousavy/react-native-vision-camera#1253
- fixes
mrousavy/react-native-vision-camera#1251
- fixes
mrousavy/react-native-vision-camera#1245
- fixes
mrousavy/react-native-vision-camera#1238
- fixes
mrousavy/react-native-vision-camera#1227
- fixes
mrousavy/react-native-vision-camera#1226
- fixes
mrousavy/react-native-vision-camera#1225
- fixes
mrousavy/react-native-vision-camera#1222
- fixes
mrousavy/react-native-vision-camera#1211
- fixes
mrousavy/react-native-vision-camera#1208
- fixes
mrousavy/react-native-vision-camera#1193
- fixes
mrousavy/react-native-vision-camera#1191
- fixes
mrousavy/react-native-vision-camera#1184
- fixes
mrousavy/react-native-vision-camera#1164
- fixes
mrousavy/react-native-vision-camera#1143
- fixes
mrousavy/react-native-vision-camera#1128
- fixes
mrousavy/react-native-vision-camera#1122
- fixes
mrousavy/react-native-vision-camera#1120
- fixes
mrousavy/react-native-vision-camera#1110
- fixes
mrousavy/react-native-vision-camera#1097
- fixes
mrousavy/react-native-vision-camera#1081
- fixes
mrousavy/react-native-vision-camera#1080
- fixes
mrousavy/react-native-vision-camera#1064
- fixes
mrousavy/react-native-vision-camera#1053
- fixes
mrousavy/react-native-vision-camera#1047
- fixes
mrousavy/react-native-vision-camera#1044
- fixes
mrousavy/react-native-vision-camera#1032
- fixes
mrousavy/react-native-vision-camera#1026
- fixes
mrousavy/react-native-vision-camera#1023
- fixes
mrousavy/react-native-vision-camera#1015
- fixes
mrousavy/react-native-vision-camera#1012
- fixes
mrousavy/react-native-vision-camera#997
- fixes
mrousavy/react-native-vision-camera#960
- fixes
mrousavy/react-native-vision-camera#959
- fixes
mrousavy/react-native-vision-camera#954
- fixes
mrousavy/react-native-vision-camera#946
- fixes
mrousavy/react-native-vision-camera#945
- fixes
mrousavy/react-native-vision-camera#922
- fixes
mrousavy/react-native-vision-camera#908
- fixes
mrousavy/react-native-vision-camera#907
- fixes
mrousavy/react-native-vision-camera#868
- fixes
mrousavy/react-native-vision-camera#855
- fixes
mrousavy/react-native-vision-camera#834
- fixes
mrousavy/react-native-vision-camera#793
- fixes
mrousavy/react-native-vision-camera#779
- fixes
mrousavy/react-native-vision-camera#746
- fixes
mrousavy/react-native-vision-camera#740
- fixes
mrousavy/react-native-vision-camera#727
- fixes
mrousavy/react-native-vision-camera#671
- fixes
mrousavy/react-native-vision-camera#613
- fixes
mrousavy/react-native-vision-camera#595
- fixes
mrousavy/react-native-vision-camera#588
- fixes
mrousavy/react-native-vision-camera#570
- fixes
mrousavy/react-native-vision-camera#569
- fixes
mrousavy/react-native-vision-camera#542
- fixes
mrousavy/react-native-vision-camera#516
- fixes
mrousavy/react-native-vision-camera#515
- fixes
mrousavy/react-native-vision-camera#434
- fixes
mrousavy/react-native-vision-camera#354
- fixes
mrousavy/react-native-vision-camera#323
- fixes
mrousavy/react-native-vision-camera#315
- fixes
mrousavy/react-native-vision-camera#281
- fixes
mrousavy/react-native-vision-camera#211
- fixes mrousavy/react-native-vision-camera#76
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants