react-native-skia-webgpu-video 0.1.0-beta.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -43
- package/android/BUILD_VALIDATION.md +1 -1
- package/android/CMakeLists.txt +3 -2
- package/android/cpp/ExportHintSession.cpp +114 -0
- package/android/cpp/ExportHintSession.h +35 -0
- package/android/cpp/VideoEncoderHostObject.cpp +76 -101
- package/android/cpp/VideoEncoderHostObject.h +14 -9
- package/android/cpp/VideoFrame.cpp +3 -5
- package/android/cpp/cpp-adapter.cpp +7 -4
- package/android/src/main/java/com/azzapp/rnskv/GLFrameExtractor.java +3 -9
- package/android/src/main/java/com/azzapp/rnskv/VideoCompositionDecoder.java +8 -11
- package/android/src/main/java/com/azzapp/rnskv/VideoEncoder.java +68 -28
- package/docs/FRAME_PIXEL_FORMAT.md +17 -2
- package/docs/MIGRATION.md +1 -1
- package/docs/UPSTREAM_NOTES.md +42 -2
- package/ios/RNSVColorSpace.h +8 -3
- package/lib/module/canvas.js +3 -5
- package/lib/module/canvas.js.map +1 -1
- package/lib/module/exportFrames.js +8 -10
- package/lib/module/exportFrames.js.map +1 -1
- package/lib/module/exportTarget.js +183 -40
- package/lib/module/exportTarget.js.map +1 -1
- package/lib/module/exportVideoComposition.js +78 -35
- package/lib/module/exportVideoComposition.js.map +1 -1
- package/lib/module/frameInterop.js +323 -82
- package/lib/module/frameInterop.js.map +1 -1
- package/lib/module/gpu.js +1 -3
- package/lib/module/gpu.js.map +1 -1
- package/lib/module/gpuDevice.js +12 -0
- package/lib/module/gpuDevice.js.map +1 -1
- package/lib/module/memory.js +7 -0
- package/lib/module/memory.js.map +1 -1
- package/lib/module/previewLifecycle.js +2 -1
- package/lib/module/previewLifecycle.js.map +1 -1
- package/lib/module/videoCompositionPlayer.js +65 -14
- package/lib/module/videoCompositionPlayer.js.map +1 -1
- package/lib/module/videoFrameImage.js +1 -1
- package/lib/module/yuvBlit.js +31 -24
- package/lib/module/yuvBlit.js.map +1 -1
- package/lib/typescript/src/canvas.d.ts.map +1 -1
- package/lib/typescript/src/exportFrames.d.ts +3 -2
- package/lib/typescript/src/exportFrames.d.ts.map +1 -1
- package/lib/typescript/src/exportTarget.d.ts +53 -14
- package/lib/typescript/src/exportTarget.d.ts.map +1 -1
- package/lib/typescript/src/exportVideoComposition.d.ts +2 -1
- package/lib/typescript/src/exportVideoComposition.d.ts.map +1 -1
- package/lib/typescript/src/frameInterop.d.ts +16 -5
- package/lib/typescript/src/frameInterop.d.ts.map +1 -1
- package/lib/typescript/src/gpu.d.ts.map +1 -1
- package/lib/typescript/src/gpuDevice.d.ts +5 -1
- package/lib/typescript/src/gpuDevice.d.ts.map +1 -1
- package/lib/typescript/src/memory.d.ts +2 -0
- package/lib/typescript/src/memory.d.ts.map +1 -1
- package/lib/typescript/src/previewLifecycle.d.ts +2 -0
- package/lib/typescript/src/previewLifecycle.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +18 -12
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/videoCompositionPlayer.d.ts +4 -5
- package/lib/typescript/src/videoCompositionPlayer.d.ts.map +1 -1
- package/lib/typescript/src/videoFrameImage.d.ts +1 -1
- package/lib/typescript/src/yuvBlit.d.ts +16 -14
- package/lib/typescript/src/yuvBlit.d.ts.map +1 -1
- package/package.json +6 -6
- package/patches/react-native-skia+3.10.0.patch +150 -0
- package/scripts/skia-canvas-patch.json +22 -258
- package/src/canvas.ts +3 -7
- package/src/exportFrames.ts +10 -11
- package/src/exportTarget.ts +217 -56
- package/src/exportVideoComposition.ts +130 -85
- package/src/frameInterop.ts +389 -96
- package/src/gpu.ts +1 -3
- package/src/gpuDevice.ts +26 -1
- package/src/memory.ts +6 -0
- package/src/previewLifecycle.ts +4 -1
- package/src/types.ts +18 -12
- package/src/videoCompositionPlayer.ts +76 -23
- package/src/videoFrameImage.ts +1 -1
- package/src/yuvBlit.ts +46 -31
- package/android/cpp/EncoderTargets.cpp +0 -226
- package/android/cpp/EncoderTargets.h +0 -70
- package/patches/react-native-skia+3.7.1.patch +0 -502
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["assertExportRecorderCacheSupport","trimExportRecorderCache","getVideoCanvas","createWorkletRuntime","createSynchronizable","runOnRuntime","scheduleOnRN","AlphaType","BlendMode","ColorType","Skia","Platform","RNSkiaVideoModule","clearVideoFrameImages","ownVideoFrames","releaseVideoFrameImage","frameByteSize","releaseVideoMemory","reserveVideoMemory","enqueueExport","exportAbortError","acquireEncoderTarget","closeEncoderTarget","probeEncoderTarget","supportsEncoderTargets","yieldToRuntime","createExportFrameImports","ownExportFrames","releaseExportFrames","exportRuntime","getExportRuntime","name","runWithVideoAutoreleasePool","fn","runWithAutoreleasePool","body","exportVideoComposition","args","executeExport","abortSignal","Promise","resolve","reject","videoComposition","drawFrame","beforeDrawFrame","afterDrawFrame","onProgress","createFrameProcessor","onProfile","options","aborted","bytes","nbFrames","width","height","Number","isFinite","frameRate","duration","bitRate","outPath","Error","Math","ceil","isSafeInteger","error","cancelled","onAbort","setBlocking","addEventListener","settle","failed","removeEventListener","runtime","getBlocking","bgra","OS","gpuExport","getBackendInfo","gpuDirectExport","step","frameWorklet","storage","globalThis","state","__rnskwgpuExport","isCancelled","profile","frames","totalMs","decodeMs","importMs","prepareMs","targetMs","drawMs","gpuMs","encodeMs","yieldMs","clock","last","lap","stage","now","performance","finish","cleanup","failure","safeToRelease","clean","e","surface","flush","target","pendingAfterDraw","processor","dispose","extractor","encoder","frame","Object","values","imports","canvas","hasRecorder","i","reservations","length","splice","readback","poisoned","setupError","work","time","index","owned","decoded","decodeCompositionFrames","imported","key","previous","entries","producers","has","producerId","prepareFrame","currentTime","draw","gpu","drawColor","Color","Clear","context","drawn","undefined","drained","encodeFrame","kind","nativeBuffer","pointer","fences","readbackCanvas","pixels","readPixels","colorType","BGRA_8888","RGBA_8888","alphaType","Premul","Uint8Array","byteLength","byteOffset","buffer","slice","data","bytesPerRow","releaseContext","framesCompleted","finishWriting","run","setup","allocateReadback","push","Surface","MakeOffscreen","createVideoEncoder","audioBitRate","audioSampleRate","audioChannelCount","prepare","console","warn","String","createVideoCompositionFramesExtractorSync","start"],"sourceRoot":"../../src","sources":["exportVideoComposition.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["assertExportRecorderCacheSupport","trimExportRecorderCache","getVideoCanvas","createWorkletRuntime","createSynchronizable","runOnRuntime","scheduleOnRN","AlphaType","BlendMode","ColorType","Skia","Platform","RNSkiaVideoModule","clearVideoFrameImages","ownVideoFrames","releaseVideoFrameImage","frameByteSize","releaseVideoMemory","reserveVideoMemory","enqueueExport","exportAbortError","acquireEncoderTarget","acquireWindowTarget","closeEncoderTarget","closeEncoderWindow","presentWindowTarget","probeEncoderTarget","probeEncoderWindow","releaseEncoderWindow","supportsEncoderTargets","yieldToRuntime","createExportFrameImports","ownExportFrames","releaseExportFrames","exportRuntime","getExportRuntime","name","runWithVideoAutoreleasePool","fn","runWithAutoreleasePool","body","exportVideoComposition","args","executeExport","abortSignal","Promise","resolve","reject","videoComposition","drawFrame","beforeDrawFrame","afterDrawFrame","onProgress","createFrameProcessor","onProfile","options","aborted","bytes","nbFrames","width","height","Number","isFinite","frameRate","duration","bitRate","outPath","Error","Math","ceil","isSafeInteger","error","cancelled","onAbort","setBlocking","addEventListener","settle","failed","removeEventListener","runtime","getBlocking","bgra","OS","gpuExport","getBackendInfo","gpuDirectExport","step","frameWorklet","storage","globalThis","state","__rnskwgpuExport","isCancelled","profile","frames","totalMs","decodeMs","importMs","prepareMs","targetMs","drawMs","gpuMs","encodeMs","yieldMs","clock","last","lap","stage","now","performance","checkWindowFrame","unchecked","window","slots","next","surface","flush","finish","cleanup","failure","safeToRelease","clean","e","target","pendingAfterDraw","processor","dispose","extractor","encoder","frame","Object","values","imports","canvas","hasRecorder","i","reservations","length","splice","poisoned","setupError","work","time","index","owned","decoded","decodeCompositionFrames","imported","key","previous","entries","producers","has","producerId","prepareFrame","currentTime","readback","pixels","draw","gpu","drawColor","Color","Clear","context","drawn","undefined","drained","encodeFrame","kind","nativeBuffer","pointer","readPixels","colorType","BGRA_8888","RGBA_8888","alphaType","Premul","releaseContext","ArrayBuffer","isView","byteLength","byteOffset","buffer","slice","data","bytesPerRow","framesCompleted","finishWriting","run","setup","allocateReadback","push","Surface","MakeOffscreen","createVideoEncoder","audioBitRate","audioSampleRate","audioChannelCount","prepare","probe","console","warn","String","createVideoCompositionFramesExtractorSync","start"],"sourceRoot":"../../src","sources":["exportVideoComposition.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,8 +4,34 @@ import { getVideoCanvas } from "./canvas.js";
|
|
|
4
4
|
import { Platform } from "react-native";
|
|
5
5
|
import { AlphaType, BlendMode, ColorType, Skia } from "react-native-skia";
|
|
6
6
|
import { getVideoGpuDevice, createNativeVideoGpuFrame, nativeVideoTextureUsage, rgbaVideoTextureUsage } from "./gpuDevice.js";
|
|
7
|
-
import { frameByteSize, releaseVideoMemory, reserveVideoMemory } from "./memory.js";
|
|
8
|
-
import { blitNv12Frame, blitYuvFrame, releaseYuvImports,
|
|
7
|
+
import { frameByteSize, releaseVideoMemory, reserveVideoMemory, videoMemoryBudget } from "./memory.js";
|
|
8
|
+
import { blitNv12Frame, blitYuvFrame, releaseYuvImports, yuvFrameRegion } from "./yuvBlit.js";
|
|
9
|
+
|
|
10
|
+
/** A decoder buffer an import's GPU copy still reads. */
|
|
11
|
+
|
|
12
|
+
/** A texture frames are converted into, and that their images wrap. */
|
|
13
|
+
|
|
14
|
+
/** The textures of a producer: its frames go into them in turn, so that the
|
|
15
|
+
* image of the previous frame stays whole while the next is written. One
|
|
16
|
+
* texture only, written in place, when the memory budget is short. */
|
|
17
|
+
|
|
18
|
+
// Imports whose GPU copy may still be running, their decoder buffers out. Kept
|
|
19
|
+
// below the YUV imports cached per producer (yuvBlit.ts), so that the one it
|
|
20
|
+
// evicts, the least recently drawn, is never still being read.
|
|
21
|
+
const maxInFlightImports = 2;
|
|
22
|
+
|
|
23
|
+
/** Whether the memory budget affords keeping a decoder buffer of `bytes` out
|
|
24
|
+
* until the GPU is done with it: a buffer within a sixteenth of the budget
|
|
25
|
+
* (two out stay within an eighth), and room left for the decoder's next two
|
|
26
|
+
* frames, which it reserves ahead. With the default 256 MB, a 4K BGRA frame
|
|
27
|
+
* (33 MB) is waited for; two 4K NV12 ones (12 MB each) are not. */
|
|
28
|
+
const affordsInFlight = bytes => {
|
|
29
|
+
"worklet";
|
|
30
|
+
|
|
31
|
+
const budget = videoMemoryBudget();
|
|
32
|
+
return !!budget && bytes <= budget.maxBytes / 16 && budget.maxBytes - budget.currentBytes >= 2 * bytes;
|
|
33
|
+
};
|
|
34
|
+
|
|
9
35
|
// Capture a scalar on the RN runtime instead of importing Platform inside a
|
|
10
36
|
// worklet. iOS keeps its existing native-buffer and RGBA compatibility paths.
|
|
11
37
|
const uploadAndroidRgba = Platform.OS === "android";
|
|
@@ -18,16 +44,16 @@ const getCache = () => {
|
|
|
18
44
|
images: new Map(),
|
|
19
45
|
stage: null,
|
|
20
46
|
canvas: null,
|
|
21
|
-
width: 0,
|
|
22
|
-
height: 0,
|
|
23
|
-
format: null,
|
|
24
47
|
uploadTexture: null,
|
|
25
|
-
|
|
48
|
+
targets: new Map(),
|
|
49
|
+
freeTextures: [],
|
|
26
50
|
cpuPixels: null,
|
|
27
51
|
cpuReservation: 0,
|
|
28
52
|
cpuBytesPerRow: 0,
|
|
29
53
|
pendingSources: [],
|
|
30
|
-
yuvImports: new Map()
|
|
54
|
+
yuvImports: new Map(),
|
|
55
|
+
checkedWaits: 0,
|
|
56
|
+
inFlight: []
|
|
31
57
|
};
|
|
32
58
|
}
|
|
33
59
|
return runtime.__rnskwgpuFrames;
|
|
@@ -49,11 +75,174 @@ const clearEntry = (cache, producer) => {
|
|
|
49
75
|
const clearSurfaceView = cache => {
|
|
50
76
|
"worklet";
|
|
51
77
|
|
|
52
|
-
cache.canvas?.dispose();
|
|
53
78
|
cache.canvas = null;
|
|
54
79
|
cache.stage?.dispose();
|
|
55
80
|
cache.stage = null;
|
|
56
81
|
};
|
|
82
|
+
|
|
83
|
+
/** Waits for all the GPU work submitted so far, on the shared context. */
|
|
84
|
+
const waitForGpu = cache => {
|
|
85
|
+
"worklet";
|
|
86
|
+
|
|
87
|
+
if (cache.stage) cache.stage.flush(true);else {
|
|
88
|
+
let texture = cache.uploadTexture ?? cache.freeTextures[0]?.texture;
|
|
89
|
+
if (!texture) {
|
|
90
|
+
for (const target of cache.targets.values()) {
|
|
91
|
+
texture = target.textures[0]?.texture;
|
|
92
|
+
if (texture) break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// A released producer's textures may all be gone (too big to keep free)
|
|
96
|
+
// while its imports are still in flight: any Graphite surface's checked
|
|
97
|
+
// flush waits on the shared context just the same.
|
|
98
|
+
const view = texture ? Skia.Surface.MakeFromGPUTexture(texture) : Skia.Surface.MakeOffscreen(1, 1);
|
|
99
|
+
if (!view) throw new Error("Video import drain surface is unavailable");
|
|
100
|
+
try {
|
|
101
|
+
view.flush(true);
|
|
102
|
+
} finally {
|
|
103
|
+
view.dispose();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
cache.checkedWaits++;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/** Hands the decoder buffers of the first `count` imports in flight back,
|
|
110
|
+
* once the GPU is done with them: because the GPU reported the last of these
|
|
111
|
+
* imports done (in order: the work before it is done too), or after a wait
|
|
112
|
+
* for it, made here when `count` is all of them and nobody `waited`. */
|
|
113
|
+
const settleInFlightImports = (cache, count, waited = false) => {
|
|
114
|
+
"worklet";
|
|
115
|
+
|
|
116
|
+
if (!count) return;
|
|
117
|
+
if (count === cache.inFlight.length && !waited) waitForGpu(cache);
|
|
118
|
+
for (let i = 0; i < count; i++) {
|
|
119
|
+
const entry = cache.inFlight.shift();
|
|
120
|
+
try {
|
|
121
|
+
entry.nativeSource?.release();
|
|
122
|
+
entry.nativeSource = null;
|
|
123
|
+
entry.frame.dispose?.();
|
|
124
|
+
} catch (error) {
|
|
125
|
+
// Like a failed release at import: only the final drain retries it.
|
|
126
|
+
cache.pendingSources.push({
|
|
127
|
+
nativeSource: entry.nativeSource,
|
|
128
|
+
owned: null,
|
|
129
|
+
reservation: 0,
|
|
130
|
+
frame: entry.frame,
|
|
131
|
+
needsDrain: false,
|
|
132
|
+
sourceReleased: false
|
|
133
|
+
});
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// Free textures kept for the next producer, when they are small enough.
|
|
140
|
+
const maxFreeImportTextures = 2;
|
|
141
|
+
|
|
142
|
+
/** Work already submitted still completes on a destroyed texture; a caller
|
|
143
|
+
* that cannot tell whether everything reading it was submitted waits first. */
|
|
144
|
+
const destroyImportTexture = (cache, entry) => {
|
|
145
|
+
"worklet";
|
|
146
|
+
|
|
147
|
+
if (cache.uploadTexture === entry.texture) {
|
|
148
|
+
clearSurfaceView(cache);
|
|
149
|
+
cache.uploadTexture = null;
|
|
150
|
+
}
|
|
151
|
+
entry.texture.destroy();
|
|
152
|
+
releaseVideoMemory(entry.reservation);
|
|
153
|
+
entry.reservation = 0;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// A texture leaves its list only once destroyed: a failed teardown is
|
|
157
|
+
// retried by the next one, its memory still accounted.
|
|
158
|
+
const releaseFreeImportTextures = cache => {
|
|
159
|
+
"worklet";
|
|
160
|
+
|
|
161
|
+
while (cache.freeTextures.length) {
|
|
162
|
+
destroyImportTexture(cache, cache.freeTextures[cache.freeTextures.length - 1]);
|
|
163
|
+
cache.freeTextures.pop();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/** Gives up the textures of a producer whose image is disposed. Small ones
|
|
168
|
+
* are kept for the next producer of that size (a montage goes from clip to
|
|
169
|
+
* clip), within the budget's sixteenth each, as for imports in flight. */
|
|
170
|
+
const releaseImportTarget = (cache, producer, keep = true) => {
|
|
171
|
+
"worklet";
|
|
172
|
+
|
|
173
|
+
const target = cache.targets.get(producer);
|
|
174
|
+
if (!target) return;
|
|
175
|
+
const budget = videoMemoryBudget();
|
|
176
|
+
while (target.textures.length) {
|
|
177
|
+
const entry = target.textures[target.textures.length - 1];
|
|
178
|
+
if (keep && cache.freeTextures.length < maxFreeImportTextures && !!budget && frameByteSize(entry.width, entry.height) <= budget.maxBytes / 16) cache.freeTextures.push(entry);else destroyImportTexture(cache, entry);
|
|
179
|
+
target.textures.pop();
|
|
180
|
+
}
|
|
181
|
+
cache.targets.delete(producer);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
/** The texture the next frame of `producer` goes into: one that its current
|
|
185
|
+
* image does not wrap, when the producer has or can afford a second one. */
|
|
186
|
+
const acquireImportTexture = (cache, device, producer, width, height, format, usage, label) => {
|
|
187
|
+
"worklet";
|
|
188
|
+
|
|
189
|
+
let target = cache.targets.get(producer);
|
|
190
|
+
if (target && target.textures.some(entry => entry.width !== width || entry.height !== height || entry.format !== format)) {
|
|
191
|
+
// The producer changed size: its image wraps a texture given up here.
|
|
192
|
+
clearEntry(cache, producer);
|
|
193
|
+
releaseImportTarget(cache, producer, false);
|
|
194
|
+
target = undefined;
|
|
195
|
+
}
|
|
196
|
+
if (!target) {
|
|
197
|
+
target = {
|
|
198
|
+
textures: []
|
|
199
|
+
};
|
|
200
|
+
cache.targets.set(producer, target);
|
|
201
|
+
}
|
|
202
|
+
const shown = cache.images.get(producer);
|
|
203
|
+
const live = shown?.image ? target.textures.findIndex(entry => entry.texture === shown.texture) : -1;
|
|
204
|
+
let index = target.textures.findIndex((_, i) => i !== live);
|
|
205
|
+
if (index < 0) {
|
|
206
|
+
const free = cache.freeTextures.findIndex(entry => entry.width === width && entry.height === height && entry.format === format);
|
|
207
|
+
const bytes = frameByteSize(width, height);
|
|
208
|
+
const budget = videoMemoryBudget();
|
|
209
|
+
if (free >= 0) {
|
|
210
|
+
target.textures.push(cache.freeTextures.splice(free, 1)[0]);
|
|
211
|
+
index = target.textures.length - 1;
|
|
212
|
+
} else if (!target.textures.length || !budget || budget.maxBytes - budget.currentBytes >= 3 * bytes) {
|
|
213
|
+
// Free textures of another size only hold memory back from here on.
|
|
214
|
+
releaseFreeImportTextures(cache);
|
|
215
|
+
const reservation = reserveVideoMemory(bytes, label);
|
|
216
|
+
let texture;
|
|
217
|
+
try {
|
|
218
|
+
texture = device.createTexture({
|
|
219
|
+
size: {
|
|
220
|
+
width,
|
|
221
|
+
height
|
|
222
|
+
},
|
|
223
|
+
format,
|
|
224
|
+
usage,
|
|
225
|
+
label
|
|
226
|
+
});
|
|
227
|
+
} catch (error) {
|
|
228
|
+
releaseVideoMemory(reservation);
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
target.textures.push({
|
|
232
|
+
texture,
|
|
233
|
+
width,
|
|
234
|
+
height,
|
|
235
|
+
format,
|
|
236
|
+
reservation
|
|
237
|
+
});
|
|
238
|
+
index = target.textures.length - 1;
|
|
239
|
+
} else {
|
|
240
|
+
// No room for a second texture: write over the current frame.
|
|
241
|
+
index = live;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return target.textures[index].texture;
|
|
245
|
+
};
|
|
57
246
|
const clearCpuPixels = cache => {
|
|
58
247
|
"worklet";
|
|
59
248
|
|
|
@@ -65,35 +254,45 @@ const clearCpuPixels = cache => {
|
|
|
65
254
|
const clearStagingSurface = cache => {
|
|
66
255
|
"worklet";
|
|
67
256
|
|
|
257
|
+
settleInFlightImports(cache, cache.inFlight.length);
|
|
68
258
|
cache.stage?.flush(true);
|
|
69
259
|
clearSurfaceView(cache);
|
|
70
|
-
cache.
|
|
260
|
+
for (const producer of [...cache.targets.keys()]) releaseImportTarget(cache, producer, false);
|
|
261
|
+
releaseFreeImportTextures(cache);
|
|
71
262
|
cache.uploadTexture = null;
|
|
72
|
-
releaseVideoMemory(cache.uploadReservation);
|
|
73
|
-
cache.uploadReservation = 0;
|
|
74
263
|
clearCpuPixels(cache);
|
|
75
|
-
cache.width = cache.height = 0;
|
|
76
|
-
cache.format = null;
|
|
77
264
|
};
|
|
78
265
|
|
|
79
266
|
/** Record explicit recovery work after a possibly submitted external copy.
|
|
80
|
-
*
|
|
81
|
-
*
|
|
267
|
+
* It clears the texture of the import that failed, whose image is dropped;
|
|
268
|
+
* with two textures, the producer's previous image is in the other one. The
|
|
269
|
+
* checked fence must succeed before either native lease or the texture can be released. */
|
|
82
270
|
const drainNativeCopies = cache => {
|
|
83
271
|
"worklet";
|
|
84
272
|
|
|
85
273
|
if (!cache.stage || !cache.canvas) throw new Error("Video import drain surface is unavailable");
|
|
86
274
|
cache.canvas.drawColor(Skia.Color("#00000000"), BlendMode.Clear);
|
|
87
275
|
cache.stage.flush(true);
|
|
276
|
+
cache.checkedWaits++;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
/** The checked GPU waits this runtime's imports have made so far, and the
|
|
280
|
+
* completions the GPU reported for them. Each one covers all the GPU work
|
|
281
|
+
* submitted before it, on the shared context. */
|
|
282
|
+
export const videoFrameImportWaits = () => {
|
|
283
|
+
"worklet";
|
|
284
|
+
|
|
285
|
+
return getCache().checkedWaits;
|
|
88
286
|
};
|
|
89
287
|
|
|
90
288
|
/** Clear a runtime's imported images after ending all its producers.
|
|
91
289
|
* Do not clear a paused producer's current frame: its native source has
|
|
92
|
-
* already been released, and
|
|
290
|
+
* already been released, and its image's texture is its remaining pixels. */
|
|
93
291
|
export const clearVideoFrameImages = (releaseStagingSurface = false) => {
|
|
94
292
|
"worklet";
|
|
95
293
|
|
|
96
294
|
const cache = getCache();
|
|
295
|
+
settleInFlightImports(cache, cache.inFlight.length);
|
|
97
296
|
if (cache.pendingSources.length) {
|
|
98
297
|
// A failed drain retains leases; only a successful fence can release them.
|
|
99
298
|
if (cache.pendingSources.some(source => source.needsDrain)) {
|
|
@@ -133,17 +332,30 @@ export const releaseVideoFrameImage = frame => {
|
|
|
133
332
|
const producer = frame.producerId ?? frame.id ?? -1;
|
|
134
333
|
const cache = getCache();
|
|
135
334
|
const entry = cache.images.get(producer);
|
|
136
|
-
if (entry && entry.id === (frame.id ?? -1))
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
335
|
+
if (entry && entry.id === (frame.id ?? -1)) {
|
|
336
|
+
clearEntry(cache, producer);
|
|
337
|
+
releaseImportTarget(cache, producer);
|
|
338
|
+
}
|
|
339
|
+
// Every import is done once the GPU is; after a failed one, only the drain
|
|
340
|
+
// in clearVideoFrameImages may release the decoder buffers.
|
|
341
|
+
if (!cache.pendingSources.length && cache.yuvImports.has(producer)) {
|
|
342
|
+
settleInFlightImports(cache, cache.inFlight.length);
|
|
343
|
+
releaseYuvImports(cache.yuvImports, producer);
|
|
344
|
+
}
|
|
140
345
|
if (cache.images.size === 0) clearVideoFrameImages(true);
|
|
141
346
|
};
|
|
142
347
|
|
|
143
|
-
/** Returns
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
348
|
+
/** Returns owned pixels. WebGPU uploads Android RGBA pixels or blits native
|
|
349
|
+
* buffers into a texture of the frame's producer, which the image wraps: no
|
|
350
|
+
* copy into a snapshot, and no entry in the raster ImageProvider's LRU.
|
|
351
|
+
* Sources go back once the GPU is done with them.
|
|
352
|
+
*
|
|
353
|
+
* The image is the producer's until its next frame is imported, which
|
|
354
|
+
* disposes it. A producer has two textures and writes its frames into them in
|
|
355
|
+
* turn, so the texture of an image is only written again by the import after
|
|
356
|
+
* the one that disposed it; with a memory budget too short for a second
|
|
357
|
+
* texture, the next frame is written over it, in queue order after the draws
|
|
358
|
+
* already submitted. */
|
|
147
359
|
export const imageFromVideoFrame = frame => {
|
|
148
360
|
"worklet";
|
|
149
361
|
|
|
@@ -153,7 +365,7 @@ export const imageFromVideoFrame = frame => {
|
|
|
153
365
|
const existing = cache.images.get(producer);
|
|
154
366
|
if (existing?.id === frame.id && existing.image) {
|
|
155
367
|
// Android can issue a fresh lease for the same paused picture. The
|
|
156
|
-
//
|
|
368
|
+
// image already owns its pixels, so close that unused native lease.
|
|
157
369
|
// Weak tracking avoids retaining raw buffers or closing one wrapper twice.
|
|
158
370
|
if (!existing.releasedSources.has(frame)) {
|
|
159
371
|
frame.dispose?.();
|
|
@@ -168,6 +380,9 @@ export const imageFromVideoFrame = frame => {
|
|
|
168
380
|
let ownsSurfaceView = false;
|
|
169
381
|
let nativeSource = null;
|
|
170
382
|
let sourceDrained = false;
|
|
383
|
+
let completion = null;
|
|
384
|
+
let sourceBytes = 0;
|
|
385
|
+
let importTexture = null;
|
|
171
386
|
let releaseSource = true;
|
|
172
387
|
let importFailed = false;
|
|
173
388
|
try {
|
|
@@ -215,7 +430,7 @@ export const imageFromVideoFrame = frame => {
|
|
|
215
430
|
reservation = reserveVideoMemory(pixels.byteLength, "owned video image");
|
|
216
431
|
const data = Skia.Data.fromBytes(pixels);
|
|
217
432
|
try {
|
|
218
|
-
image = Skia.Image.
|
|
433
|
+
image = Skia.Image.MakeRaster({
|
|
219
434
|
width: frame.width,
|
|
220
435
|
height: frame.height,
|
|
221
436
|
colorType: ColorType.RGBA_8888,
|
|
@@ -235,37 +450,14 @@ export const imageFromVideoFrame = frame => {
|
|
|
235
450
|
if (!Number.isSafeInteger(extentLimit) || extentLimit <= 0 || frame.width > extentLimit || frame.height > extentLimit) throw new Error("Video frame exceeds the WebGPU texture extent limit");
|
|
236
451
|
}
|
|
237
452
|
const format = uploadRgba || uploadAndroidRgba ? "rgba8unorm" : "bgra8unorm";
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
size: {
|
|
247
|
-
width: frame.width,
|
|
248
|
-
height: frame.height
|
|
249
|
-
},
|
|
250
|
-
format,
|
|
251
|
-
// Android AHB and CPU frames share the RGBA scratch. Include
|
|
252
|
-
// COPY_DST even for a first AHB frame, so a later CPU fallback
|
|
253
|
-
// cannot reuse a texture that forbids writeTexture.
|
|
254
|
-
usage: uploadRgba || uploadAndroidRgba ? rgbaVideoTextureUsage : nativeVideoTextureUsage,
|
|
255
|
-
label: uploadRgba ? "video RGBA frame upload" : "video native frame upload"
|
|
256
|
-
});
|
|
257
|
-
cache.width = frame.width;
|
|
258
|
-
cache.height = frame.height;
|
|
259
|
-
cache.format = format;
|
|
260
|
-
} catch (error) {
|
|
261
|
-
try {
|
|
262
|
-
clearStagingSurface(cache);
|
|
263
|
-
} catch {
|
|
264
|
-
/* unfinished cleanup/accounting stays reachable */
|
|
265
|
-
}
|
|
266
|
-
throw error;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
453
|
+
// The frame is converted straight into a texture of its producer, which
|
|
454
|
+
// the image wraps: no copy into a snapshot. Android AHB and CPU frames
|
|
455
|
+
// share RGBA textures, COPY_DST included even for a first AHB frame, so
|
|
456
|
+
// that a later CPU fallback can write into them.
|
|
457
|
+
clearSurfaceView(cache);
|
|
458
|
+
cache.uploadTexture = null;
|
|
459
|
+
cache.uploadTexture = acquireImportTexture(cache, device, key, frame.width, frame.height, format, uploadRgba || uploadAndroidRgba ? rgbaVideoTextureUsage : nativeVideoTextureUsage, uploadRgba ? "video RGBA frame" : "video native frame");
|
|
460
|
+
importTexture = cache.uploadTexture;
|
|
269
461
|
if (copyRgbaPixels && texture.kind === "rgba") {
|
|
270
462
|
if (!cache.cpuPixels || cache.cpuPixels.byteLength !== requiredRgbaBytes || cache.cpuBytesPerRow !== texture.bytesPerRow) {
|
|
271
463
|
clearCpuPixels(cache);
|
|
@@ -293,9 +485,8 @@ export const imageFromVideoFrame = frame => {
|
|
|
293
485
|
clearCpuPixels(cache);
|
|
294
486
|
}
|
|
295
487
|
clearSurfaceView(cache);
|
|
296
|
-
//
|
|
297
|
-
//
|
|
298
|
-
// GPU allocation or a write through Skia that would overwrite the input.
|
|
488
|
+
// The surface only carries the checked submissions and waits of this
|
|
489
|
+
// import, and its recovery drain; the image wraps the texture itself.
|
|
299
490
|
cache.stage = Skia.Surface.MakeFromGPUTexture(cache.uploadTexture);
|
|
300
491
|
if (!cache.stage) throw new Error("Cannot wrap video upload texture");
|
|
301
492
|
ownsSurfaceView = true;
|
|
@@ -320,17 +511,15 @@ export const imageFromVideoFrame = frame => {
|
|
|
320
511
|
const region = texture.region;
|
|
321
512
|
const rotation = texture.rotation ?? 0;
|
|
322
513
|
const nv12 = !region && texture.format === "nv12";
|
|
323
|
-
let
|
|
324
|
-
x: 0,
|
|
325
|
-
y: 0
|
|
326
|
-
};
|
|
514
|
+
let upright = null;
|
|
327
515
|
if (region) {
|
|
328
516
|
// An Android codec buffer: padded, YUV, in encoded orientation. The
|
|
329
|
-
// blit converts, crops and
|
|
330
|
-
// as the GL path's SurfaceTexture transform did. RN WebGPU
|
|
331
|
-
// driver-defined YUV formats "bgra8", yet Dawn imports them
|
|
332
|
-
// the native side checked the format, so the label is not
|
|
333
|
-
|
|
517
|
+
// blit converts, crops, turns and scales it into the frame-sized
|
|
518
|
+
// scratch, as the GL path's SurfaceTexture transform did. RN WebGPU
|
|
519
|
+
// labels driver-defined YUV formats "bgra8", yet Dawn imports them
|
|
520
|
+
// as YUV: the native side checked the format, so the label is not
|
|
521
|
+
// read.
|
|
522
|
+
upright = yuvFrameRegion(region, rotation, nativeSource);
|
|
334
523
|
} else if (nv12) {
|
|
335
524
|
if (nativeSource.width !== frame.width || nativeSource.height !== frame.height) throw new Error("Native video buffer dimensions mismatch");
|
|
336
525
|
} else if (
|
|
@@ -346,7 +535,7 @@ export const imageFromVideoFrame = frame => {
|
|
|
346
535
|
if (region) {
|
|
347
536
|
// copyExternalImageToTexture would also convert the video's
|
|
348
537
|
// transfer function and primaries to sRGB (see yuvBlit.ts).
|
|
349
|
-
blitYuvFrame(device, cache.yuvImports, key, nativeSource, rotation,
|
|
538
|
+
blitYuvFrame(device, cache.yuvImports, key, nativeSource, rotation, upright, cache.uploadTexture);
|
|
350
539
|
} else if (nv12) {
|
|
351
540
|
// Decoded orientation, as below: drawVideoFrame applies rotation.
|
|
352
541
|
blitNv12Frame(device, nativeSource, cache.uploadTexture);
|
|
@@ -368,27 +557,79 @@ export const imageFromVideoFrame = frame => {
|
|
|
368
557
|
}
|
|
369
558
|
// Snapshot records an independent texture copy and submits it after
|
|
370
559
|
// the external blit on the shared queue. The wrapper never draws.
|
|
371
|
-
image =
|
|
372
|
-
|
|
373
|
-
|
|
560
|
+
image = Skia.Image.MakeFromGPUTexture(cache.uploadTexture);
|
|
561
|
+
// Submitted without waiting for the GPU, which held the UI thread for
|
|
562
|
+
// the work of every Skia view on the shared context: the decoder buffer
|
|
563
|
+
// is handed back once the GPU reports the copy done. A wait still
|
|
564
|
+
// bounds the buffers out, and stands in where nothing can report.
|
|
565
|
+
// NV12 and Android's YUV buffers take a byte and a half per pixel.
|
|
566
|
+
sourceBytes = texture.kind === "native-buffer" && (texture.region || texture.format === "nv12") ? Math.ceil(bytes * 0.375) : bytes;
|
|
567
|
+
const wait = typeof device.queue.onSubmittedWorkDone !== "function" || cache.inFlight.length >= maxInFlightImports || !affordsInFlight(sourceBytes);
|
|
568
|
+
cache.stage.flush(wait);
|
|
569
|
+
if (!wait) {
|
|
570
|
+
try {
|
|
571
|
+
completion = device.queue.onSubmittedWorkDone();
|
|
572
|
+
} catch {
|
|
573
|
+
// A runtime WebGPU cannot settle promises on.
|
|
574
|
+
completion = null;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
if (wait || !completion) {
|
|
578
|
+
if (!wait) cache.stage.flush(true);
|
|
579
|
+
cache.checkedWaits++;
|
|
580
|
+
// Every import before this one is done too.
|
|
581
|
+
settleInFlightImports(cache, cache.inFlight.length, true);
|
|
582
|
+
completion = null;
|
|
583
|
+
sourceDrained = true;
|
|
584
|
+
}
|
|
374
585
|
}
|
|
375
586
|
if (!image) throw new Error("Cannot create a video frame image");
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
587
|
+
if (completion) {
|
|
588
|
+
// The GPU copy may still read the decoder buffer: it goes back once the
|
|
589
|
+
// GPU reports the copy done, or after a wait (settleInFlightImports).
|
|
590
|
+
// The view stays for that wait.
|
|
591
|
+
const entry = {
|
|
592
|
+
frame,
|
|
593
|
+
nativeSource,
|
|
594
|
+
bytes: sourceBytes
|
|
595
|
+
};
|
|
596
|
+
cache.inFlight.push(entry);
|
|
597
|
+
nativeSource = null;
|
|
598
|
+
releaseSource = false;
|
|
381
599
|
ownsSurfaceView = false;
|
|
600
|
+
completion.then(() => {
|
|
601
|
+
const settled = cache.inFlight.indexOf(entry) + 1;
|
|
602
|
+
// Zero: a wait handed it back already.
|
|
603
|
+
if (!settled) return;
|
|
604
|
+
cache.checkedWaits++;
|
|
605
|
+
try {
|
|
606
|
+
settleInFlightImports(cache, settled, true);
|
|
607
|
+
} catch (error) {
|
|
608
|
+
console.warn("Video frame release failed", error);
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
// Handed back by the next wait instead.
|
|
612
|
+
() => undefined);
|
|
613
|
+
} else {
|
|
614
|
+
// Complete the native handoff before replacing published pixels. A
|
|
615
|
+
// failed source close must not evict a paused image or leave an
|
|
616
|
+
// unpublished cache entry behind when the caller receives an import
|
|
617
|
+
// error.
|
|
618
|
+
if (ownsSurfaceView) {
|
|
619
|
+
clearSurfaceView(cache);
|
|
620
|
+
ownsSurfaceView = false;
|
|
621
|
+
}
|
|
622
|
+
nativeSource?.release();
|
|
623
|
+
nativeSource = null;
|
|
624
|
+
frame.dispose?.();
|
|
625
|
+
releaseSource = false;
|
|
382
626
|
}
|
|
383
|
-
nativeSource?.release();
|
|
384
|
-
nativeSource = null;
|
|
385
|
-
frame.dispose?.();
|
|
386
|
-
releaseSource = false;
|
|
387
627
|
clearEntry(cache, key);
|
|
388
628
|
cache.images.set(key, {
|
|
389
629
|
id: frame.id ?? -1,
|
|
390
630
|
image,
|
|
391
631
|
reservation,
|
|
632
|
+
texture: importTexture,
|
|
392
633
|
releasedSources: new WeakSet([frame])
|
|
393
634
|
});
|
|
394
635
|
return image;
|