Commit Graph

1190 Commits

Author SHA1 Message Date
Marc Rousavy
12f850c8e1
feat: Draw onto Frame as if it was a Skia Canvas (#1479)
* Create Shaders.ts

* Add `previewType` and `enableFpsGraph`

* Add RN Skia native dependency

* Add Skia Preview View on iOS

* Pass 1

* Update FrameHostObject.mm

* Wrap Canvas

* Lockfiles

* fix: Fix stuff

* chore: Upgrade RNWorklets

* Add `previewType` to set the Preview

* feat: Add Example

* Update project.pbxproj

* `enableFpsGraph`

* Cache the `std::shared_ptr<FrameHostObject>`

* Update CameraView+RecordVideo.swift

* Update SkiaMetalCanvasProvider.mm

* Android: Integrate Skia Dependency

* fix: Use new Prefix

* Add example for rendering shader

* chore: Upgrade CameraX

* Remove KTX

* Enable `viewBinding`

* Revert "Enable `viewBinding`"

This reverts commit f2a603f53b33ea4311a296422ffd1a910ce03f9e.

* Revert "chore: Upgrade CameraX"

This reverts commit 8dc832cf8754490d31a6192e6c1a1f11cdcd94fe.

* Remove unneeded `ProcessCameraProvider.getInstance()` call

* fix: Add REA hotfix patch

* fix: Fix FrameHostObject dead in runAsync

* fix: Make `runAsync` run truly async by dropping new Frames while executing

* chore: Upgrade RN Worklets to latest

* chore: Upgrade RN Skia

* Revert "Remove KTX"

This reverts commit 253f586633f7af2da992d2279fc206dc62597129.

* Make Skia optional in CMake

* Fix import

* Update CMakeLists.txt

* Update build.gradle

* Update CameraView.kt

* Update CameraView.kt

* Update CameraView.kt

* Update Shaders.ts

* Center Blur

* chore: Upgrade RN Worklets

* feat: Add `toByteArray()`, `orientation`, `isMirrored` and `timestamp` to `Frame` (#1487)

* feat: Implement `orientation` and `isMirrored` on Frame

* feat: Add `toArrayBuffer()` func

* perf: Do faster buffer copy

* feat: Implement `toArrayBuffer()` on Android

* feat: Add `orientation` and `isMirrored` to Android

* feat: Add `timestamp` to Frame

* Update Frame.ts

* Update JImageProxy.h

* Update FrameHostObject.cpp

* Update FrameHostObject.cpp

* Update CameraPage.tsx

* fix: Format Swift
2023-02-21 15:00:48 +01:00
Marc Rousavy
1f7a2e07f2 fix: Fix global.FrameProcessorPlugins TS error 2023-02-15 19:15:36 +01:00
Marc Rousavy
0635d4aba0 fix: Add missing <regex> header 2023-02-15 19:13:33 +01:00
Marc Rousavy
2909085ea6 chore: release 3.0.0-rc.1 2023-02-15 18:23:05 +01:00
Marc Rousavy
770357fd94 chore: Bump to 3.0.0-rc.0 2023-02-15 18:21:33 +01:00
Marc Rousavy
222ded4728 fix: Prevent possible crash in log error handler 2023-02-15 18:15:13 +01:00
Marc Rousavy
6825c1f587 fix: Print correct error in build.gradle 2023-02-15 17:39:46 +01:00
Marc Rousavy
f0ea18115e
fix: Fix CI for V3 (#1475)
* fix: Fix CI for "Build Android"

* update versions

* Update Gemfile.lock

* format swift

* fix: Fix swift lint

* Update .swiftlint.yml

* Use C++17 for lint

* fix: Fix C++ lints
2023-02-15 17:24:33 +01:00
Marc Rousavy
30b56153db
feat: Sync Frame Processors (plus runAsync and runAtTargetFps) (#1472)
Before, Frame Processors ran on a separate Thread.

After, Frame Processors run fully synchronous and always at the same FPS as the Camera.

Two new functions have been introduced:

* `runAtTargetFps(fps: number, func: () => void)`: Runs the given code as often as the given `fps`, effectively throttling it's calls.
* `runAsync(frame: Frame, func: () => void)`: Runs the given function on a separate Thread for Frame Processing. A strong reference to the Frame is held as long as the function takes to execute.

You can use `runAtTargetFps` to throttle calls to a specific API (e.g. if your Camera is running at 60 FPS, but you only want to run face detection at ~25 FPS, use `runAtTargetFps(25, ...)`.)

You can use `runAsync` to run a heavy algorithm asynchronous, so that the Camera is not blocked while your algorithm runs. This is useful if your main sync processor draws something, and your async processor is doing some image analysis on the side. 

You can also combine both functions.

Examples:

```js
const frameProcessor = useFrameProcessor((frame) => {
  'worklet'
  console.log("I'm running at 60 FPS!")
}, [])
```

```js
const frameProcessor = useFrameProcessor((frame) => {
  'worklet'
  console.log("I'm running at 60 FPS!")

  runAtTargetFps(10, () => {
    'worklet'
    console.log("I'm running at 10 FPS!")
  })
}, [])
```



```js
const frameProcessor = useFrameProcessor((frame) => {
  'worklet'
  console.log("I'm running at 60 FPS!")

  runAsync(frame, () => {
    'worklet'
    console.log("I'm running on another Thread, I can block for longer!")
  })
}, [])
```

```js
const frameProcessor = useFrameProcessor((frame) => {
  'worklet'
  console.log("I'm running at 60 FPS!")

  runAtTargetFps(10, () => {
    'worklet'
    runAsync(frame, () => {
      'worklet'
      console.log("I'm running on another Thread at 10 FPS, I can block for longer!")
    })
  })
}, [])
```
2023-02-15 16:47:09 +01:00
Marc Rousavy
a0590dccb5
feat: Replace Reanimated with RN Worklets (#1468)
* Setup RN Worklets

* Use RN Worklets on iOS

* Fix console

* Add `installFrameProcessorBindings()` function

* Add `FrameProcessorPlugins` proxy (BREAKING CHANGE)

* Clean up docs

* Update FRAME_PROCESSORS.mdx

* Use RN Worklets 0.2.5

* feat: Android build setup

* Rewrite Android Frame Processor Part

* Update CMakeLists.txt

* fix: Add react-native-worklets Gradle dependency

* Update Podfile.lock

* fix build

* gradle:7.4.1

* Init JSI Bindings in method on Android

* Fix Folly flags

* fix: Init `FrameProcessorRuntimeManager` later

* fix: Wrap in `<GestureHandlerRootView>`

* Refactor plugins

* fix: Remove enableFrameProcessors

* Install RN Worklets from current GH master

* Update babel.config.js

* Update CameraViewModule.kt

* Update ImageProxyUtils.java

* feat: Upgrade to Reanimated v3

* fix: Fix crash on Worklet init

* Update RN Worklets to latest master

* fix: Simplify FP Plugins Proxy
2023-02-13 15:22:45 +01:00
Marc Rousavy
11d1e7178d
chore: Upgrade to RN 71 (#1465)
* chore: Upgrade Example to RN 0.71

* chore: Upgrade all libs

* fix: Fix CameraRoll installation

* Update Gradle Tools

* fix: Fix buildscripts

* Clean out build.gradle

* fix: Fix Kotlin setup

* fix: Move kotlin-android dependency to lib

* Move `_setGlobalConsole`

* Update gradle-wrapper.properties

* Rebuild lockfiles

* chore: Update build:gradle

* Update StatusBarBlurBackground.tsx

* Use Java 11 in Workflows

* Update MediaPage.tsx

* Add `google` repository to build.gradle

* Double Java Heap size

* Increase heap size

* Alternative args

* Update build.gradle
2023-02-09 11:52:41 +01:00
mrousavy
28a43f716f chore: Drop support for RN < 71 to simplify buildscript 2023-02-08 17:48:22 +01:00
Marc Rousavy
9963f4dedc chore: release 2.15.4 2023-02-01 16:37:53 +01:00
zzz08900
6a094bf1b0
fix: Fix Android build error on RN < 0.71 (#1447) 2023-02-01 16:37:18 +01:00
Marc Rousavy
a1a2cdc246 chore: release 2.15.3 2023-01-30 19:39:46 +01:00
Christoph Gritschenberger
b82d0e362d
fix: Add support for react-native 0.71 (#1438)
Co-authored-by: Christoph Gritschenberger <christoph.gritschenberger@cca.io>
2023-01-30 19:38:52 +01:00
Marc Rousavy
ae2c28a2c2
Add VisionCamera V3 link to README 2022-12-06 15:45:52 +01:00
Marc Rousavy
231838772c Update Podfile.lock 2022-11-30 12:06:11 +01:00
Marc Rousavy
938cb2e42a Update CameraView+Orientation.swift 2022-11-25 15:40:07 +01:00
Marc Rousavy
bf71901968 fix: Fix orientation glitching on first frame 2022-11-25 15:39:40 +01:00
Marc Rousavy
a65b8720bd chore: release 2.15.2 2022-10-31 13:05:21 +01:00
Al Mochkin
045794c979
fix: Update CLANG_CXX_LANGUAGE_STANDARD to C++17 (#1309) 2022-10-31 13:04:07 +01:00
LazyAfternoons
3416e94b18
fix: Use +load for registering Frame Processors (#1308)
Fixes crash with Xcode 14
2022-10-28 13:12:44 +02:00
Rohan Barman
6b32cd9cd7
docs: Replace outdated react-native-reanimated doc links (#1304) 2022-10-28 12:18:36 +02:00
Thibault Malbranche
c046440e0e
fix: Allowed setting custom downloads directory (#1306)
Clone of https://github.com/mrousavy/react-native-mmkv/pull/459/
2022-10-28 12:18:06 +02:00
Marc Rousavy
1d6f720f8b chore: release 2.15.1 2022-10-24 14:10:30 +02:00
Marc Rousavy
a7932bdc98
fix: Support new Reanimated Headers directory (2.11.10+) (#1301) 2022-10-24 14:09:56 +02:00
Marc Rousavy
849aa3ebaf chore: release 2.15.0 2022-10-20 12:50:08 +02:00
Thomas Coldwell
52a1d50d91
fix: Frame Processor FPS (#1288)
* fix: Build using XCode 14

* fix: Throttle FP by start time rather than end time
2022-10-20 12:49:22 +02:00
Marc Rousavy
4781ad9835
feat: Continue to record audio when receiving a phone call (try to prevent interruptions) (#1278)
* feat: Continue to record audio when receiving a phone call (try to prevent interruptions)

Uses `setPrefersNoInterruptionsFromSystemAlerts` to prevent system alerts (like phone calls) from interrupting the audio session which records audio from the microphone.

* fix: Add `try`
2022-10-14 12:30:22 +02:00
Efe Furkan KARAKAYA
cc7d195cbd
fix: CameraDevices type can't be imported (#1255) 2022-10-04 10:39:50 +02:00
viniciusyoshioka
b7bb8e45da
fix: Build error "2 files found with path '.../libfolly_runtime.so'" (#1144) 2022-08-10 11:21:59 +02:00
Marc Rousavy
0fbb8a3108 chore: release 2.14.1 2022-08-09 18:21:14 +02:00
Thibault Malbranche
205e542cb6
fix: Support RN 0.69 and use Hermes from source! 🎉 (#1186)
* wip

* wip

* Update CMakeLists.txt

* Update CMakeLists.txt

* Update android/build.gradle

Co-authored-by: Tomek Zawadzki <tomekzawadzki98@gmail.com>

Co-authored-by: Tomek Zawadzki <tomekzawadzki98@gmail.com>
2022-08-09 18:20:42 +02:00
Lihang Xu
312b82b9f6
docs: Add Dynamsoft Label Recognizer Frame Processor Plugin (#1183) 2022-08-05 09:52:35 +02:00
Philipp Parzer
f289f91773
docs: Fix typo in ERRORS (#1160)
fix typo "promt" to "prompt"
2022-07-25 13:26:18 +02:00
Eduardo Borges
80df81815a
fix: Fix takePhoto not working inside an Modal (#1021)
* fix: fix takePhoto not working inside an Modal

* chore: remover unnecessary code

* chore: remove unnecessary variable
2022-07-20 14:02:20 +02:00
Marc Rousavy
230b3a6f62 Rename .save -> +save 2022-07-19 13:30:59 +02:00
Marc Rousavy
3329ee2841 chore: release 2.14.0 2022-07-18 10:42:58 +02:00
Marc Rousavy
8bafd96c24
feat: Allow returning of ImageProxy in a Frame Processor (#1149)
* feat: Allow returning of ImageProxy in a Frame Processor

* chore: Clean up

* fix: Missing space

* Update useFrameProcessor.ts

* Revert "Update useFrameProcessor.ts"

This reverts commit 9c645489cdfdf2079972669756a2cd20cc81e25e.
2022-07-18 10:40:56 +02:00
Mateusz Mędrek
2a73c09be5
docs: add vision-camera-plugin-builder sections in Creating Frame Processor Plugins (#1123)
- add automatic setup section to "Creating Frame Processor Plugins (iOS|Android)" with
vision-camera-plugin-builder CLI
2022-07-07 14:06:31 +02:00
Rupesh Chaudhari
724af31807
fix: Use facebook::jsi instead of jsi (#1109)
This PR fixes the Build error in React Native 0.69 for iOS
2022-07-05 10:51:24 +02:00
Thomas Coldwell
54703f386c
fix: Set initial timestamp on first frame (#1114) 2022-07-04 14:09:39 +02:00
Marc Rousavy
147b9111d4 chore: release 2.13.5 2022-06-14 11:08:33 +02:00
Marc Rousavy
97f91b4fe9 Update package.json 2022-06-14 11:08:14 +02:00
Marc Rousavy
04a8794246
fix: Fix outputOrientation Main Thread API checker (#1094) 2022-06-14 11:00:28 +02:00
davidlcorbitt
096b1cca4e
fix: (Android) Give real video resolutions, unbind/rebind preview in onHostResume, add missing Android capture errors (#1079)
* Calculate a format's video dimensions based on supported resolutions and photo dimensions

* Add Android fallback strategy for recording quality

* Ensure that session props are not ignored when app is resumed

* Simplify setting Android video dimensions in format

* Modify Android imageAnalysisBuilder to use photoSize

* Update onHostResume function to reference android preview issue

* Add missing Android capture errors
2022-06-14 10:54:33 +02:00
Thomas Coldwell
fb2156ec39
fix: Asset Writer Video-Audio Sync (#1075)
* fix: Start asset writer session on first frame

* fix: Remove debug log

* fix: Reset dev team
2022-06-11 11:15:24 +02:00
Joaquín Ossandon
de41f8be83
docs: 📄 Add mocking section to docs (#1061)
* docs: add mocking mdx guide

* docs: show mocking section on sidebar
2022-05-27 11:34:54 +02:00
Hirbod
83943da112
fix: AVWriter status 1 crash (#996)
* Fix AVWriter status 1 crash followup

* Update RecordingSession.swift

removing trailing semicolon to make linter happy

* Update RecordingSession.swift

Set hasRunningWritingAttempt to true

* Update RecordingSession.swift

* Update RecordingSession.swift

* Update RecordingSession.swift

* Update RecordingSession.swift

Make the linter hate me again

* Update RecordingSession.swift
2022-05-23 14:27:25 +02:00