FCE-3838: React Native camera effects on Fishjam's own camera - #287
Open
MiloszFilimowski wants to merge 4 commits into
Open
MiloszFilimowski wants to merge 4 commits into
MiloszFilimowski wants to merge 4 commits into
Conversation
Direct React Native users to camera effects that run on the camera Fishjam already manages (camera track middleware, react-native-worklets frame callbacks, @fishjam-cloud/video-effects) instead of VisionCamera. - How-to: new "Camera effects" category with background effects, WebGPU effects, frame processing and stream middleware (now for both platforms) - Tutorials: new background blur tutorial; WebGPU effects tutorial rewritten on createCameraFrameProcessorSession - Integrations: VisionCamera tutorial and how-tos moved to their own section - Concepts: new "How camera effects work" page - API reference: video-effects and react-native-worklets submodules with TypeDoc; web-client-sdk bumped to fff4e570 (#606) - Redirects for the moved pages Validated end to end on the iOS simulator (SimCam) and a Galaxy S23 (debug and release), which surfaced the Android minSdkVersion 26 requirement and the expo-asset workaround for bundled images in Android release builds.
0.1.4 makes background images load on React Native and reports image load failures. Bump the video-effects submodule to v0.1.4.
…camera effects react-native-webgpu 0.10.1 releases the imported camera frame on destroy() (wcandillon/react-native-webgpu#478); older versions leak one frame of graphics memory per frame on Android until garbage collection. Since 0.8.4 the flag constants re-exported by react-native-webgpu are undefined at import time, so the WebGPU tutorial uses the GPUTextureUsage / GPUShaderStage globals instead, and video-effects 0.1.5 does the same internally.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
The React Native docs now send users to camera effects on the camera Fishjam already manages, instead of VisionCamera. VisionCamera stays as an integration.
An effect is a camera track middleware. Peers keep receiving it as
peer.cameraTrack:Menu changes
createCameraFrameProcessorSession, with no VisionCamera.Build and API reference
web-client-sdksubmodule bumped to fff4e570 (web-client-sdk#606).video-effects(v0.1.5) andreact-native-worklets(v0.12.1), with TypeDoc pages.typegpupinned to 0.12.4 (the versionvideo-effectsuses). The VisionCamera WebGPU snippet mapstypegputo the SDK's 0.11 through hidden Twoslash flags, so every snippet still type-checks.Tested
yarn buildpasses with no broken links, and the pre-commit checks (format, spellcheck, typecheck) pass.Testing found these, now fixed in the docs:
minSdkVersion: 26(react-native-webgpu). The docs add it withexpo-build-properties.expo-assetkeeps bundled images as drawable resources, so reading them withFilefails. The docs include a workaround, checked in a release build.tgpu.resolve({ externals })returns empty WGSL in TypeGPU 0.12. The examples use the array form.Performance on the Galaxy S23 (release build, 720x1280): blur runs at 30 fps with no dropped frames at about 110% CPU of 800% and 33% GPU; the WebGPU tutorial effect at about 111% CPU and 12% GPU. Graphics memory showed a 200 MB to 1 GB saw-tooth with any effect on
react-native-webgpu0.5.15. The cause was inreact-native-webgpu(GPUExternalTexture.destroy()did not release the imported frame); fixed upstream in wcandillon/react-native-webgpu#478, released in 0.10.1, memory flat at about 145 MB after it.Fixes opened in our repos along the way:
render()no longer hold GPU memory (released in 0.1.4)react-native-webgpu0.8.4 and newer export them asundefined(released in 0.1.5). The WebGPU tutorial uses theGPUTextureUsage/GPUShaderStageglobals for the same reason.minSdkVersion26 and moves toreact-native-webgpu0.10.1The docs require
@fishjam-cloud/react-native-client0.30.2 or newer,@fishjam-cloud/video-effects0.1.5 or newer andreact-native-webgpu0.10.1 or newer.