Skip to content

Commit 7586e98

Browse files
authored
Revert "feat: Add supportedMultiCamDeviceCombinations" (#3820)
Revert "feat: Add `supportedMultiCamDeviceCombinations` (#3817)" This reverts commit 2179030.
1 parent 2179030 commit 7586e98

14 files changed

Lines changed: 17 additions & 219 deletions

File tree

docs/content/docs/multi-camera.mdx

Lines changed: 9 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: Using multiple Camera Devices in a single Camera Session
55

66
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
77

8-
A [`CameraSession`](/api/react-native-vision-camera/hybrid-objects/CameraSession) allows attaching multiple connections to stream from multiple [`CameraDevice`](/api/react-native-vision-camera/hybrid-objects/CameraDevice)s at the same time (e.g. Picture-in-Picture mode via front + back Camera) - if the system supports it.
8+
A [`CameraSession`](/api/react-native-vision-camera/hybrid-objects/CameraSession) allows attaching multiple connections to stream from multiple [`CameraDevice`](/api/react-native-vision-camera/hybrid-objects/CameraDevice)s at the same time - if the system supports it.
99

1010
### Creating a Multi-Camera Session
1111

@@ -19,35 +19,14 @@ if (VisionCamera.supportsMultiCamSessions) {
1919

2020
### Using multiple Connections
2121

22-
Due to hardware constraints, not every [`CameraDevice`](/api/react-native-vision-camera/hybrid-objects/CameraDevice) can be paired with every other [`CameraDevice`](/api/react-native-vision-camera/hybrid-objects/CameraDevice) - therefore VisionCamera exposes a fixed array of supported combinations via [`CameraDeviceFactory.supportedMultiCamDeviceCombinations`](/api/react-native-vision-camera/hybrid-objects/CameraDeviceFactory#supportedmulticamdevicecombinations) upfront:
22+
With a multi-cam [`CameraSession`](/api/react-native-vision-camera/hybrid-objects/CameraSession), you can now attach multiple [`CameraSessionConnection`](/api/react-native-vision-camera/interfaces/CameraSessionConnection)s - for example to stream and capture from the Front- and Back-Camera at the same time, attach both devices:
2323

2424
```ts
25-
if (!VisionCamera.supportsMultiCamSessions)
26-
return
27-
28-
const deviceFactory = await VisionCamera.createDeviceFactory()
29-
const frontAndBackCombination =
30-
deviceFactory.supportedMultiCamDeviceCombinations.find((devices) => {
31-
return (
32-
devices.some((d) => d.position === 'front') &&
33-
devices.some((d) => d.position === 'back')
34-
)
35-
})
36-
if (frontAndBackCombination == null)
37-
return
38-
39-
const frontDevice = frontAndBackCombination.find((d) => d.position === 'front')
40-
const backDevice = frontAndBackCombination.find((d) => d.position === 'back')
41-
```
42-
43-
Then, knowing `frontDevice` and `backDevice` can be used simultaneously in a Multi-Cam session, create the [`CameraSession`](/api/react-native-vision-camera/hybrid-objects/CameraSession), and attach the [`CameraSessionConnection`](/api/react-native-vision-camera/interfaces/CameraSessionConnection)s:
44-
45-
```ts
46-
const session = await VisionCamera.createCameraSession(true)
47-
const frontPreviewOutput = VisionCamera.createPreviewOutput()
48-
const frontPhotoOutput = VisionCamera.createPhotoOutput({})
49-
const backPreviewOutput = VisionCamera.createPreviewOutput()
50-
const backPhotoOutput = VisionCamera.createPhotoOutput({})
25+
const session = ...
26+
const frontDevice = useCameraDevice('front')
27+
const backDevice = useCameraDevice('back')
28+
const frontPreview = usePreviewOutput()
29+
const backPreview = usePreviewOutput()
5130

5231
const [frontController, backController] = await session.configure([
5332
// Front Camera
@@ -72,26 +51,6 @@ const [frontController, backController] = await session.configure([
7251
await session.start()
7352
```
7453

75-
Each returned [`CameraController`](/api/react-native-vision-camera/hybrid-objects/CameraController) correlates to the connection at that index - e.g. `frontController` allows zooming/exposure/focus the `frontDevice`, and vice-versa.
76-
77-
Then, ensure you display both `frontPreviewOutput` and `backPreviewOutput` in separate [`<NativePreviewView />`](/api/react-native-vision-camera/views/NativePreviewView) views:
78-
79-
```tsx
80-
function App() {
81-
const frontPreviewOutput = ...
82-
const backPreviewOutput = ...
54+
Then, ensure you display both `frontPreview` and `backPreview` in separate [`<NativePreviewView />`](/api/react-native-vision-camera/views/NativePreviewView) views.
8355

84-
return (
85-
<View style={StyleSheet.absoluteFill}>
86-
<NativePreviewView
87-
style={{ flex: 1 }}
88-
previewOutput={frontPreviewOutput}
89-
/>
90-
<NativePreviewView
91-
style={{ flex: 1 }}
92-
previewOutput={backPreviewOutput}
93-
/>
94-
</View>
95-
)
96-
}
97-
```
56+
Each returned [`CameraController`](/api/react-native-vision-camera/hybrid-objects/CameraController) correlates to the connection at that index.

packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/HybridCameraDeviceFactory.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ class HybridCameraDeviceFactory(
3838
override val cameraDevices: Array<HybridCameraDeviceSpec>
3939
get() = cameraProvider.availableCameraInfos.mapToArray { HybridCameraDevice(it) }
4040

41-
override val supportedMultiCamDeviceCombinations: Array<Array<HybridCameraDeviceSpec>>
42-
get() {
43-
return cameraProvider.availableConcurrentCameraInfos.mapToArray { devices ->
44-
return@mapToArray devices.mapToArray { HybridCameraDevice(it) }
45-
}
46-
}
47-
4841
override var userPreferredCamera: HybridCameraDeviceSpec?
4942
get() {
5043
val preferredCameraId =

packages/react-native-vision-camera/ios/Hybrid Objects/HybridCameraDeviceFactory.swift

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import Foundation
99
import NitroModules
1010

1111
class HybridCameraDeviceFactory: HybridCameraDeviceFactorySpec {
12+
let discoverySession: AVCaptureDevice.DiscoverySession
13+
var cameraDevices: [any HybridCameraDeviceSpec] {
14+
return discoverySession.devices.map { HybridCameraDevice(device: $0) }
15+
}
16+
1217
override init() {
1318
self.discoverySession = AVCaptureDevice.DiscoverySession(
1419
deviceTypes: AVCaptureDevice.DeviceType.all,
@@ -17,17 +22,6 @@ class HybridCameraDeviceFactory: HybridCameraDeviceFactorySpec {
1722
super.init()
1823
}
1924

20-
let discoverySession: AVCaptureDevice.DiscoverySession
21-
var cameraDevices: [any HybridCameraDeviceSpec] {
22-
return discoverySession.devices.map { HybridCameraDevice(device: $0) }
23-
}
24-
25-
var supportedMultiCamDeviceCombinations: [[any HybridCameraDeviceSpec]] {
26-
return discoverySession.supportedMultiCamDeviceSets.map { devices in
27-
return devices.map { HybridCameraDevice(device: $0) }
28-
}
29-
}
30-
3125
var userPreferredCamera: (any HybridCameraDeviceSpec)? {
3226
get {
3327
guard #available(iOS 17.0, *) else {
@@ -42,7 +36,7 @@ class HybridCameraDeviceFactory: HybridCameraDeviceFactorySpec {
4236
guard #available(iOS 17.0, *) else {
4337
return
4438
}
45-
guard let hybridDevice = newValue as? any NativeCameraDevice else {
39+
guard let hybridDevice = newValue as? HybridCameraDevice else {
4640
return
4741
}
4842
AVCaptureDevice.userPreferredCamera = hybridDevice.device

packages/react-native-vision-camera/nitrogen/generated/android/c++/JHybridCameraDeviceFactorySpec.cpp

Lines changed: 0 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react-native-vision-camera/nitrogen/generated/android/c++/JHybridCameraDeviceFactorySpec.hpp

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react-native-vision-camera/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/HybridCameraDeviceFactorySpec.kt

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react-native-vision-camera/nitrogen/generated/ios/VisionCamera-Swift-Cxx-Bridge.hpp

Lines changed: 0 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react-native-vision-camera/nitrogen/generated/ios/c++/HybridCameraDeviceFactorySpecSwift.hpp

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react-native-vision-camera/nitrogen/generated/ios/swift/HybridCameraDeviceFactorySpec.swift

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react-native-vision-camera/nitrogen/generated/ios/swift/HybridCameraDeviceFactorySpec_cxx.swift

Lines changed: 0 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)