Skip to content

Add macOS support for Orbbec Gemini330 camera#27930

Merged
asmorkalov merged 4 commits intoopencv:4.xfrom
sirudoi:4.x
Nov 7, 2025
Merged

Add macOS support for Orbbec Gemini330 camera#27930
asmorkalov merged 4 commits intoopencv:4.xfrom
sirudoi:4.x

Conversation

@sirudoi
Copy link
Copy Markdown
Contributor

@sirudoi sirudoi commented Oct 22, 2025

Description of Changes

Adds macOS support for Orbbec Gemini330 in videoio by integrating OrbbecSDK v2. Completes the non-macOS work in #27230.

Motivation

#27230 skipped macOS. On macOS, UVC alone lacks required device controls; OrbbecSDK v2 provides them.

Key Change

  • macOS: fetch/link OrbbecSDK v2.5.5 (replaces v1.9.4).
  • videoio (macOS): switch OrbbecSDK API usage from v1 to v2.

Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

  • I agree to contribute to the project under Apache 2 License.
  • To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
  • The PR is proposed to the proper branch
  • The feature is well documented and sample code can be built with the project CMake

@asmorkalov asmorkalov added this to the 4.13.0 milestone Oct 22, 2025
@asmorkalov asmorkalov self-assigned this Oct 22, 2025
@asmorkalov asmorkalov self-requested a review October 22, 2025 11:43
@asmorkalov asmorkalov changed the title [3rdparty][videoio] Add macOS support for Orbbec Gemini330 camera Add macOS support for Orbbec Gemini330 camera Oct 22, 2025
@asmorkalov asmorkalov requested a review from kaingwade October 22, 2025 13:39
@asmorkalov
Copy link
Copy Markdown
Contributor

@kaingwade Could you test it with camera?

Copy link
Copy Markdown
Contributor

@kaingwade kaingwade left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On M1: 2L, Femto Mega, 335, 335L, 336, 336L work; 2XL and Femto crashed. @sirudoi Please check.

@kaingwade
Copy link
Copy Markdown
Contributor

On M1: 2L, Femto Mega, 335, 335L, 336, 336L work; 2XL and Femto crashed. @sirudoi Please check.

Also: Astra 2 works; Astra + no.

@sirudoi
Copy link
Copy Markdown
Contributor Author

sirudoi commented Oct 23, 2025

On M1: 2L, Femto Mega, 335, 335L, 336, 336L work; 2XL and Femto crashed. @sirudoi Please check.

Hi, Femto is EOL and G2XL/Astra+ are nearing EOL; future SDKs won’t support these cameras, so this test result is expected, and thanks for testing.

@kaingwade
Copy link
Copy Markdown
Contributor

Hi, Femto is EOL and G2XL/Astra+ are nearing EOL; future SDKs won’t support these cameras, so this test result is expected, and thanks for testing.

@asmorkalov What would you suggest? Should we ignore these older models that are already EOL or approaching EOL? The Orbbec SDK v2 will not support them anyway.

@asmorkalov
Copy link
Copy Markdown
Contributor

@sirudoi Is there some trade-off version of the SDK where both families are supported? As alternative, I propose to have 2 urls for 1.x and 2.x sdk and switch between them over command line. 2.x should be default, of course.

# OrbbecSDK v2 loads some libraries at runtime.
file(COPY ${OrbbecSDK_RUNTIME_RESOURCE_FILES} DESTINATION ${CMAKE_BINARY_DIR}/lib)
endif()
install(FILES ${OrbbecSDK_DLL_FILES} DESTINATION ${OPENCV_LIB_INSTALL_PATH})
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OrbbecSDK_RUNTIME_RESOURCE_FILES need to be installed to OPENCV_LIB_INSTALL_PATH too for OrbbecSDK v2.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OrbbecSDK_RUNTIME_RESOURCE_FILES need to be installed to OPENCV_LIB_INSTALL_PATH too for OrbbecSDK v2.

Hi, thanks for the heads-up. I’d like to confirm one detail, the OrbbecSDK v2 runtime files have this layout:

extensions/
├── depthengine
│   ├── libdepthengine.so -> libdepthengine.so.2.0
│   └── libdepthengine.so.2.0
├── filters
│   ├── libFilterProcessor.so
│   └── libob_priv_filter.so
├── firmwareupdater
│   └── libfirmwareupdater.so
└── frameprocessor
    └── libob_frame_processor.so

As you can see, the v2 runtime is delivered as a directory. Does this structure meet the requirement for installing into OPENCV_LIB_INSTALL_PATH, or is it necessary to force the .so files to be placed directly in that path?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can use install(DIRECTORY …) to install the extensions folder as it is. I assume the layout should be preserved for OrbbecSDK v2 to successfully load dll inside it at runtime?

@asmorkalov asmorkalov merged commit 881774d into opencv:4.x Nov 7, 2025
91 of 109 checks passed
@asmorkalov asmorkalov mentioned this pull request Nov 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants