Go to file
Marc Rousavy ea3686cb9a
feat: Create C++/OpenGL-based Video Pipeline for more efficient Recording and Frame Processing (#1721)
* Create `VideoPipeline` c++

* Remove folly C++ dependency

* Create `VideoPipeline` HybridClass

* Set up OpenGL

* Add outputs

* Update VideoPipeline.kt

* Bum `minSdkVersion` to `26`

* Create `VideoPipelineOutput`

* Create output funcs

* Set output pipelines

* Add FP/Recording on Output change

* Update VideoPipeline.cpp

* Create `PassThroughShader`

* Try to draw? I have honestly no idea

* fix: Fix `setFrameProcessor` nameclash

* fix: Fix `high-res-sizes` being null

* Add preview output

* Create `OpenGLContext.cpp`

* Make screen red

* This _should_ work (MESSY)

* FINALLY RENDER TEXTURE

* Rotate

* Mirror

* Clean up a bit

* Add `getWidth()`/`getHeight()`

* Cleanup

* fix: Use uniforms instead of attributes

* Draw with passed rotation/mirror mode

* feat: Use SurfaceTexture's transformMatrix in OpenGL pipeline (#1727)

* feat: Use Transform Matrix from SurfaceTexture

* Renam

* feat: Fix OpenGL Shader

* Update VideoPipeline.kt

* Measure elapsed time

* fix: Fix low resolution

* Render to offscreen

* Render to every context

* Release `SurfaceTexture` on close

* Use one OpenGL context to render to multiple EGLSurfaces

* Clean up a bit

* fix: Fix recording pipeline not triggering

* fix: Synchronize close to prevent nulls

* Update OpenGLRenderer.cpp

* fix: Hardcode Android recorder size
2023-08-29 17:52:03 +02:00
.github feat: Full Android rewrite (CameraX -> Camera2) (#1674) 2023-08-21 12:50:14 +02:00
.vscode VSCode settings 2021-02-20 17:13:02 +01:00
android feat: Create C++/OpenGL-based Video Pipeline for more efficient Recording and Frame Processing (#1721) 2023-08-29 17:52:03 +02:00
cpp feat: Expose unified VisionCameraProxy object, make FrameProcessorPlugins object-oriented (#1660) 2023-07-21 17:52:30 +02:00
docs feat: Create C++/OpenGL-based Video Pipeline for more efficient Recording and Frame Processing (#1721) 2023-08-29 17:52:03 +02:00
example feat: Create C++/OpenGL-based Video Pipeline for more efficient Recording and Frame Processing (#1721) 2023-08-29 17:52:03 +02:00
ios fix: Export pixelFormat property on iOS 2023-08-24 17:14:24 +02:00
scripts fix: Improve C++ safety by attaching Cache Invalidator to jsi::Runtime's lifecycle (#1488) 2023-02-21 15:44:43 +01:00
src fix: Error on disabled Frame Processors 2023-08-24 16:28:16 +02:00
.eslintrc.js chore: Upgrade Skia to new Ganesh Rendering Pipeline and RN to 0.72 (#1638) 2023-07-03 12:40:07 +02:00
.gitignore feat: Add React Native 0.66 support (#490) 2021-10-05 12:22:14 +02:00
app.plugin.js feat: Expo support (#260) 2021-07-07 14:55:25 +02:00
CODE_OF_CONDUCT.md chore: Move to /mrousavy/ (#224) 2021-06-21 22:42:46 +02:00
CONTRIBUTING.md Update CONTRIBUTING.md 2021-10-05 15:01:26 +02:00
LICENSE chore: Move to /mrousavy/ (#224) 2021-06-21 22:42:46 +02:00
package.json chore: release 3.0.0-rc.8 2023-08-25 11:28:43 +02:00
README.md feat: Full Android rewrite (CameraX -> Camera2) (#1674) 2023-08-21 12:50:14 +02:00
tsconfig.json feat: Complete iOS Codebase rewrite (#1647) 2023-07-20 15:30:04 +02:00
VisionCamera.podspec fix: Fix node_modules/ directory detection 2023-08-24 16:16:45 +02:00
yarn.lock feat: Full Android rewrite (CameraX -> Camera2) (#1674) 2023-08-21 12:50:14 +02:00

Vision Camera



📸 The Camera library that sees the vision.
npm i react-native-vision-camera
npx pod-install
Buy Me a Coffee at ko-fi.com



‼️‼️‼️‼️‼️ VisionCamera V3 ‼️‼️‼️‼️‼️

See this discussion for the latest upcoming version of VisionCamera

Documentation

Features

  • Photo and Video capture
  • Customizable devices and multi-cameras (smoothly zoom out to "fish-eye" camera)
  • Customizable FPS
  • Frame Processors (JS worklets to run QR-Code scanning, facial recognition, AI object detection, realtime video chats, ...)
  • Smooth zooming (Reanimated)
  • Fast pause and resume
  • HDR & Night modes

See the example app

Example

function App() {
  const devices = useCameraDevices('wide-angle-camera')
  const device = devices.back

  if (device == null) return <LoadingView />
  return (
    <Camera
      style={StyleSheet.absoluteFill}
      device={device}
      isActive={true}
    />
  )
}

Adopting at scale

This library helped you? Consider sponsoring!

VisionCamera is provided as is, I work on it in my free time.

If you're integrating VisionCamera in a production app, consider funding this project and contact me to receive premium enterprise support, help with issues, prioritize bugfixes, request features, help at integrating VisionCamera and/or Frame Processors, and more.


🚀 Get started by setting up permissions!