react-native-skia-webgpu-video 0.1.0-beta.3 → 0.1.0-beta.4

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.
Files changed (65) hide show
  1. package/README.md +39 -32
  2. package/android/BUILD_VALIDATION.md +1 -1
  3. package/android/CMakeLists.txt +3 -2
  4. package/android/cpp/ExportHintSession.cpp +114 -0
  5. package/android/cpp/ExportHintSession.h +35 -0
  6. package/android/cpp/VideoEncoderHostObject.cpp +76 -101
  7. package/android/cpp/VideoEncoderHostObject.h +14 -9
  8. package/android/cpp/VideoFrame.cpp +3 -5
  9. package/android/cpp/cpp-adapter.cpp +7 -4
  10. package/android/src/main/java/com/azzapp/rnskv/GLFrameExtractor.java +3 -9
  11. package/android/src/main/java/com/azzapp/rnskv/VideoCompositionDecoder.java +8 -11
  12. package/android/src/main/java/com/azzapp/rnskv/VideoEncoder.java +68 -28
  13. package/docs/FRAME_PIXEL_FORMAT.md +1 -1
  14. package/docs/MIGRATION.md +1 -1
  15. package/docs/UPSTREAM_NOTES.md +15 -2
  16. package/lib/module/canvas.js +3 -5
  17. package/lib/module/canvas.js.map +1 -1
  18. package/lib/module/exportFrames.js +6 -8
  19. package/lib/module/exportFrames.js.map +1 -1
  20. package/lib/module/exportTarget.js +183 -40
  21. package/lib/module/exportTarget.js.map +1 -1
  22. package/lib/module/exportVideoComposition.js +53 -12
  23. package/lib/module/exportVideoComposition.js.map +1 -1
  24. package/lib/module/frameInterop.js +9 -12
  25. package/lib/module/frameInterop.js.map +1 -1
  26. package/lib/module/gpu.js +0 -2
  27. package/lib/module/gpu.js.map +1 -1
  28. package/lib/module/gpuDevice.js +12 -0
  29. package/lib/module/gpuDevice.js.map +1 -1
  30. package/lib/module/previewLifecycle.js +0 -1
  31. package/lib/module/previewLifecycle.js.map +1 -1
  32. package/lib/module/yuvBlit.js +28 -21
  33. package/lib/module/yuvBlit.js.map +1 -1
  34. package/lib/typescript/src/canvas.d.ts.map +1 -1
  35. package/lib/typescript/src/exportFrames.d.ts +3 -2
  36. package/lib/typescript/src/exportFrames.d.ts.map +1 -1
  37. package/lib/typescript/src/exportTarget.d.ts +53 -14
  38. package/lib/typescript/src/exportTarget.d.ts.map +1 -1
  39. package/lib/typescript/src/exportVideoComposition.d.ts +2 -1
  40. package/lib/typescript/src/exportVideoComposition.d.ts.map +1 -1
  41. package/lib/typescript/src/frameInterop.d.ts.map +1 -1
  42. package/lib/typescript/src/gpu.d.ts.map +1 -1
  43. package/lib/typescript/src/gpuDevice.d.ts +5 -1
  44. package/lib/typescript/src/gpuDevice.d.ts.map +1 -1
  45. package/lib/typescript/src/previewLifecycle.d.ts.map +1 -1
  46. package/lib/typescript/src/types.d.ts +10 -5
  47. package/lib/typescript/src/types.d.ts.map +1 -1
  48. package/lib/typescript/src/yuvBlit.d.ts +16 -14
  49. package/lib/typescript/src/yuvBlit.d.ts.map +1 -1
  50. package/package.json +6 -6
  51. package/patches/react-native-skia+3.7.4.patch +146 -0
  52. package/scripts/skia-canvas-patch.json +22 -258
  53. package/src/canvas.ts +3 -7
  54. package/src/exportFrames.ts +8 -9
  55. package/src/exportTarget.ts +217 -56
  56. package/src/exportVideoComposition.ts +87 -26
  57. package/src/frameInterop.ts +9 -11
  58. package/src/gpu.ts +0 -2
  59. package/src/gpuDevice.ts +26 -1
  60. package/src/previewLifecycle.ts +0 -1
  61. package/src/types.ts +10 -5
  62. package/src/yuvBlit.ts +43 -28
  63. package/android/cpp/EncoderTargets.cpp +0 -226
  64. package/android/cpp/EncoderTargets.h +0 -70
  65. package/patches/react-native-skia+3.7.1.patch +0 -502
@@ -1,16 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  /// <reference types="@webgpu/types" />
4
- import { Platform } from "react-native";
5
4
  import { BlendMode, Skia } from "react-native-skia";
6
5
  import { getVideoCanvas } from "./canvas.js";
7
- import { createNativeVideoGpuFrame, getVideoGpuDevice } from "./gpuDevice.js";
6
+ import { createNativeVideoGpuFrame, createNativeWindowGpuContext, encoderWindowTextureUsage, getVideoGpuDevice, nativeVideoTextureUsage } from "./gpuDevice.js";
7
+ import { frameByteSize, releaseVideoMemory, reserveVideoMemory } from "./memory.js";
8
8
 
9
- /** An encoder pool buffer that Skia draws into through WebGPU. */
9
+ /** A texture Skia draws an exported frame into through WebGPU: a lent
10
+ * encoder pool buffer on iOS, one of the encoder window's own textures on
11
+ * Android. */
10
12
 
11
- // Captured on the RN runtime. iOS lends CVPixelBuffers, imported through
12
- // their IOSurface; Android lends the AHardwareBuffer itself.
13
- const lendsPixelBuffers = Platform.OS === "ios";
13
+ /** Android: a canvas context presenting to the codec's input Surface. Skia
14
+ * draws each frame into one of two textures of our own, which a GPU copy then
15
+ * puts into the window's texture. The window's textures are the codec's
16
+ * input buffers: the copy waits on the GPU for the codec to hand one back,
17
+ * while the export goes on with the next frame, rather than the frame's
18
+ * checked wait. */
19
+
20
+ const windowSlots = 2;
14
21
  export const supportsEncoderTargets = encoder => {
15
22
  "worklet";
16
23
 
@@ -18,35 +25,20 @@ export const supportsEncoderTargets = encoder => {
18
25
  };
19
26
 
20
27
  // Declared before its callers: worklets capture their closure on creation.
21
- /** Ends GPU access; the lent buffer stays with the caller, to encode or
22
- * release. Call only after a checked flush(true) of its surface. With
23
- * `encoding`, Android keeps the access's sync-fds in `target.fences` for the
24
- * encoder, which owns and closes them: ending an AHB access submits a
25
- * release that flush(true) has not waited for. */
26
- export const closeEncoderTarget = (target, encoding = false) => {
28
+ /** iOS: ends GPU access; the lent buffer stays with the caller, to encode or
29
+ * release. Call only after a checked flush(true) of its surface. */
30
+ export const closeEncoderTarget = target => {
27
31
  "worklet";
28
32
 
29
- target.canvas?.dispose();
33
+ // Disposing the surface detaches its canvas.
30
34
  target.canvas = null;
31
35
  target.surface?.dispose();
32
36
  target.surface = null;
33
37
  if (target.accessing && target.memory && target.texture) {
34
38
  const ended = target.memory.endAccess(target.texture);
35
39
  target.accessing = false;
36
- for (const state of ended?.fences ?? []) {
37
- try {
38
- if (encoding && !lendsPixelBuffers) {
39
- const exported = state.fence.export();
40
- // Unreachable when negotiated: AHB interop requires the device's
41
- // only shared-fence feature to be sync-fd (see gpuDevice.ts).
42
- if (exported.type !== "sync-fd") throw new Error("GPU export needs sync-fd fences");
43
- target.fences.push(exported.handle);
44
- }
45
- } finally {
46
- // iOS: already waited for. The wrapper is released either way.
47
- state.fence.destroy();
48
- }
49
- }
40
+ // Already waited for. The wrappers are released either way.
41
+ for (const state of ended?.fences ?? []) state.fence.destroy();
50
42
  }
51
43
  target.accessing = false;
52
44
  target.texture?.destroy();
@@ -60,13 +52,12 @@ export const closeEncoderTarget = (target, encoding = false) => {
60
52
  target.frame = null;
61
53
  };
62
54
 
63
- /** Lends the next pool buffer and wraps it as a Skia surface. */
55
+ /** iOS: lends the next pool buffer and wraps it as a Skia surface. */
64
56
  export const acquireEncoderTarget = (encoder, width, height) => {
65
57
  "worklet";
66
58
 
67
59
  const target = {
68
60
  pointer: encoder.acquireFrameBuffer(),
69
- fences: [],
70
61
  frame: null,
71
62
  memory: null,
72
63
  texture: null,
@@ -75,24 +66,19 @@ export const acquireEncoderTarget = (encoder, width, height) => {
75
66
  canvas: null
76
67
  };
77
68
  try {
78
- if (lendsPixelBuffers) {
79
- target.frame = createNativeVideoGpuFrame(target.pointer);
80
- if (target.frame.width !== width || target.frame.height !== height || target.frame.pixelFormat !== "bgra8") {
81
- throw new Error("Encoder buffer dimensions or BGRA layout mismatch");
82
- }
69
+ target.frame = createNativeVideoGpuFrame(target.pointer);
70
+ if (target.frame.width !== width || target.frame.height !== height || target.frame.pixelFormat !== "bgra8") {
71
+ throw new Error("Encoder buffer dimensions or BGRA layout mismatch");
83
72
  }
84
73
  const device = getVideoGpuDevice();
85
74
  if (typeof device.importSharedTextureMemory !== "function") {
86
75
  throw new Error("WebGPU shared texture memory is unavailable");
87
76
  }
88
77
  target.memory = device.importSharedTextureMemory({
89
- handle: target.frame ? target.frame.handle : target.pointer,
78
+ handle: target.frame.handle,
90
79
  label: "video export frame"
91
80
  });
92
81
  target.texture = target.memory.createTexture();
93
- if (!lendsPixelBuffers && (target.texture.width !== width || target.texture.height !== height || target.texture.format !== "rgba8unorm")) {
94
- throw new Error("Encoder buffer dimensions or RGBA layout mismatch");
95
- }
96
82
  // Uninitialized: every frame starts with a full clear.
97
83
  target.memory.beginAccess(target.texture, false);
98
84
  target.accessing = true;
@@ -111,8 +97,9 @@ export const acquireEncoderTarget = (encoder, width, height) => {
111
97
  }
112
98
  };
113
99
 
114
- /** Clears one lent buffer on the GPU, then returns it unencoded. Returns the
115
- * failure, or null when this device can export through encoder targets. */
100
+ /** iOS: clears one lent buffer on the GPU, then returns it unencoded.
101
+ * Returns the failure, or null when this device can export through encoder
102
+ * targets. */
116
103
  export const probeEncoderTarget = (encoder, width, height) => {
117
104
  "worklet";
118
105
 
@@ -134,4 +121,160 @@ export const probeEncoderTarget = (encoder, width, height) => {
134
121
  encoder.releaseFrameBuffer();
135
122
  return failure;
136
123
  };
124
+
125
+ /** Android: the window's next texture, checked against the export size. */
126
+ const windowTexture = (window, width, height) => {
127
+ "worklet";
128
+
129
+ const texture = window.pending ?? window.context.getCurrentTexture();
130
+ window.pending = null;
131
+ if (texture.width !== width || texture.height !== height || texture.format !== "rgba8unorm") {
132
+ throw new Error("Encoder window dimensions or RGBA layout mismatch");
133
+ }
134
+ return texture;
135
+ };
136
+
137
+ /** Android: the slot the next frame draws into. Its previous copy completed:
138
+ * the checked wait the export makes before each frame's import covers the
139
+ * queue before it. */
140
+ export const acquireWindowTarget = window => {
141
+ "worklet";
142
+
143
+ return window.slots[window.next];
144
+ };
145
+
146
+ /** Android: copies the slot Skia drew into to the window's next texture and
147
+ * hands it to the encoder, with its time. Call once the slot's surface was
148
+ * flushed: the copy follows the drawing on the same queue. */
149
+ export const presentWindowTarget = (encoder, window, target, time) => {
150
+ "worklet";
151
+
152
+ const source = target.texture;
153
+ const destination = windowTexture(window, source.width, source.height);
154
+ const commands = window.device.createCommandEncoder({
155
+ label: "video export window copy"
156
+ });
157
+ commands.copyTextureToTexture({
158
+ texture: source
159
+ }, {
160
+ texture: destination
161
+ }, {
162
+ width: source.width,
163
+ height: source.height
164
+ });
165
+ window.device.queue.submit([commands.finish()]);
166
+ window.next = (window.next + 1) % window.slots.length;
167
+ // The encoder sets the frame's time on the window, then presents.
168
+ encoder.encodeFrame({
169
+ kind: "window",
170
+ present: () => window.context.present()
171
+ }, time);
172
+ };
173
+
174
+ /** Android: the swapchain gives the codec its buffers back at once, rather
175
+ * than once the context is collected. Call before disposing the encoder. */
176
+ export const closeEncoderWindow = window => {
177
+ "worklet";
178
+
179
+ window.pending = null;
180
+ if (!window.configured) return;
181
+ window.context.unconfigure();
182
+ window.configured = false;
183
+ };
184
+
185
+ /** Android: frees the window's own textures. Call once their last recording
186
+ * was submitted: a copy still in flight keeps its source alive. */
187
+ export const releaseEncoderWindow = window => {
188
+ "worklet";
189
+
190
+ while (window.slots.length) {
191
+ const slot = window.slots[window.slots.length - 1];
192
+ // Disposing the surface detaches its canvas.
193
+ slot.canvas = null;
194
+ slot.surface?.dispose();
195
+ slot.surface = null;
196
+ slot.texture?.destroy();
197
+ slot.texture = null;
198
+ window.slots.pop();
199
+ }
200
+ while (window.reservations.length) {
201
+ releaseVideoMemory(window.reservations[window.reservations.length - 1]);
202
+ window.reservations.pop();
203
+ }
204
+ };
205
+
206
+ /** Android: opens a canvas context on the encoder's input window with its
207
+ * slots, acquires the window's first texture and draws a clear into the
208
+ * first slot: nothing reaches the encoder. Returns the window, or the
209
+ * failure, after which the window is closed and the export can fall back to
210
+ * readback. */
211
+ export const probeEncoderWindow = (encoder, width, height) => {
212
+ "worklet";
213
+
214
+ let window = null;
215
+ let failure = null;
216
+ try {
217
+ if (typeof encoder.acquireInputWindow !== "function") throw new Error("Encoder cannot present through its input window");
218
+ const device = getVideoGpuDevice();
219
+ window = {
220
+ context: createNativeWindowGpuContext(encoder.acquireInputWindow(), width, height),
221
+ device,
222
+ configured: false,
223
+ slots: [],
224
+ next: 0,
225
+ reservations: [],
226
+ pending: null
227
+ };
228
+ // Presented in FIFO order, opaque: every frame reaches the codec.
229
+ window.context.configure({
230
+ device,
231
+ format: "rgba8unorm",
232
+ usage: encoderWindowTextureUsage
233
+ });
234
+ window.configured = true;
235
+ for (let i = 0; i < windowSlots; i++) {
236
+ window.reservations.push(reserveVideoMemory(frameByteSize(width, height), "export window slot"));
237
+ const slot = {
238
+ pointer: null,
239
+ frame: null,
240
+ memory: null,
241
+ texture: device.createTexture({
242
+ label: "video export window slot",
243
+ size: {
244
+ width,
245
+ height
246
+ },
247
+ format: "rgba8unorm",
248
+ usage: nativeVideoTextureUsage
249
+ }),
250
+ accessing: false,
251
+ surface: null,
252
+ canvas: null
253
+ };
254
+ window.slots.push(slot);
255
+ slot.surface = Skia.Surface.MakeFromGPUTexture(slot.texture);
256
+ if (!slot.surface) throw new Error("Cannot wrap the export frame");
257
+ slot.canvas = getVideoCanvas(slot.surface);
258
+ }
259
+ window.pending = windowTexture(window, width, height);
260
+ const target = acquireWindowTarget(window);
261
+ target.canvas.drawColor(Skia.Color("#00000000"), BlendMode.Clear);
262
+ target.surface.flush(true);
263
+ } catch (error) {
264
+ failure = error ?? new Error("GPU export probe failed");
265
+ }
266
+ if (failure === null) return {
267
+ window,
268
+ failure
269
+ };
270
+ if (window) {
271
+ // Not caught: a window still drawn by WebGPU cannot fall back to EGL.
272
+ closeEncoderWindow(window);
273
+ releaseEncoderWindow(window);
274
+ }
275
+ return {
276
+ window: null,
277
+ failure
278
+ };
279
+ };
137
280
  //# sourceMappingURL=exportTarget.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","BlendMode","Skia","getVideoCanvas","createNativeVideoGpuFrame","getVideoGpuDevice","lendsPixelBuffers","OS","supportsEncoderTargets","encoder","acquireFrameBuffer","releaseFrameBuffer","closeEncoderTarget","target","encoding","canvas","dispose","surface","accessing","memory","texture","ended","endAccess","state","fences","exported","fence","export","type","Error","push","handle","destroy","frame","release","acquireEncoderTarget","width","height","pointer","pixelFormat","device","importSharedTextureMemory","label","createTexture","format","beginAccess","Surface","MakeFromGPUTexture","error","probeEncoderTarget","failure","drawColor","Color","Clear","flush"],"sourceRoot":"../../src","sources":["exportTarget.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["BlendMode","Skia","getVideoCanvas","createNativeVideoGpuFrame","createNativeWindowGpuContext","encoderWindowTextureUsage","getVideoGpuDevice","nativeVideoTextureUsage","frameByteSize","releaseVideoMemory","reserveVideoMemory","windowSlots","supportsEncoderTargets","encoder","acquireFrameBuffer","releaseFrameBuffer","closeEncoderTarget","target","canvas","surface","dispose","accessing","memory","texture","ended","endAccess","state","fences","fence","destroy","frame","release","acquireEncoderTarget","width","height","pointer","pixelFormat","Error","device","importSharedTextureMemory","handle","label","createTexture","beginAccess","Surface","MakeFromGPUTexture","error","probeEncoderTarget","failure","drawColor","Color","Clear","flush","windowTexture","window","pending","context","getCurrentTexture","format","acquireWindowTarget","slots","next","presentWindowTarget","time","source","destination","commands","createCommandEncoder","copyTextureToTexture","queue","submit","finish","length","encodeFrame","kind","present","closeEncoderWindow","configured","unconfigure","releaseEncoderWindow","slot","pop","reservations","probeEncoderWindow","acquireInputWindow","configure","usage","i","push","size"],"sourceRoot":"../../src","sources":["exportTarget.ts"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ import RNSkiaVideoModule from "./RNSkiaVideoModule.js";
9
9
  import { clearVideoFrameImages, ownVideoFrames, releaseVideoFrameImage } from "./frameInterop.js";
10
10
  import { frameByteSize, releaseVideoMemory, reserveVideoMemory } from "./memory.js";
11
11
  import { enqueueExport, exportAbortError } from "./exportQueue.js";
12
- import { acquireEncoderTarget, closeEncoderTarget, probeEncoderTarget, supportsEncoderTargets } from "./exportTarget.js";
12
+ import { acquireEncoderTarget, acquireWindowTarget, closeEncoderTarget, closeEncoderWindow, presentWindowTarget, probeEncoderTarget, probeEncoderWindow, releaseEncoderWindow, supportsEncoderTargets } from "./exportTarget.js";
13
13
  import { yieldToRuntime } from "./runtimeYield.js";
14
14
  import { createExportFrameImports, ownExportFrames, releaseExportFrames } from "./exportFrames.js";
15
15
 
@@ -142,6 +142,17 @@ const executeExport = args => new Promise((resolve, reject) => {
142
142
  if (clock.last >= 0) profile[stage] += now - clock.last;
143
143
  clock.last = now;
144
144
  };
145
+ /** Android window: the checked GPU wait the last frame left for later,
146
+ * so that the GPU converted and drew it while the CPU presented it and
147
+ * decoded the next one. An empty recording: Graphite still waits for
148
+ * every command submitted so far. */
149
+ const checkWindowFrame = () => {
150
+ "worklet";
151
+
152
+ if (!state.unchecked) return;
153
+ state.window.slots[state.window.next].surface.flush(true);
154
+ state.unchecked = false;
155
+ };
145
156
  const finish = async (error, aborted = false, failed = false) => {
146
157
  "worklet";
147
158
 
@@ -167,6 +178,7 @@ const executeExport = args => new Promise((resolve, reject) => {
167
178
  };
168
179
  // Submit any recording left by a drawing exception before an
169
180
  // adapter is allowed to destroy textures referenced by that canvas.
181
+ clean(checkWindowFrame);
170
182
  clean(() => state.surface?.flush(true));
171
183
  clean(() => state.target?.surface?.flush(true));
172
184
  if (cleanup.safeToRelease && state.pendingAfterDraw) {
@@ -183,6 +195,10 @@ const executeExport = args => new Promise((resolve, reject) => {
183
195
  }
184
196
  }
185
197
  if (clean(() => state.extractor?.dispose())) state.extractor = null;
198
+ // Android: the window's swapchain lets go of the codec's buffers
199
+ // before the encoder goes. Its own textures are freed further down.
200
+ const window = state.window;
201
+ if (window) clean(() => closeEncoderWindow(window));
186
202
  if (clean(() => state.encoder?.dispose())) state.encoder = null;
187
203
  if (cleanup.safeToRelease) {
188
204
  clean(() => state.surface?.flush(true));
@@ -193,8 +209,16 @@ const executeExport = args => new Promise((resolve, reject) => {
193
209
  if (imports && clean(() => releaseExportFrames(imports))) state.imports = null;
194
210
  clean(() => clearVideoFrameImages(true));
195
211
  }
196
- if (cleanup.safeToRelease && clean(() => state.canvas?.dispose())) state.canvas = null;
197
- if (cleanup.safeToRelease && clean(() => state.surface?.dispose())) state.surface = null;
212
+ // Disposing the surface detaches its canvas.
213
+ if (cleanup.safeToRelease && clean(() => state.surface?.dispose())) {
214
+ state.surface = null;
215
+ state.canvas = null;
216
+ }
217
+ // The target, if any, is one of the window's slots.
218
+ if (cleanup.safeToRelease && window && clean(() => releaseEncoderWindow(window))) {
219
+ state.window = null;
220
+ state.target = null;
221
+ }
198
222
  const target = state.target;
199
223
  if (cleanup.safeToRelease && target) {
200
224
  if (clean(() => closeEncoderTarget(target))) state.target = null;
@@ -239,6 +263,8 @@ const executeExport = args => new Promise((resolve, reject) => {
239
263
  const owned = runWithVideoAutoreleasePool(() => {
240
264
  const decoded = state.extractor.decodeCompositionFrames(time);
241
265
  lap("decodeMs");
266
+ checkWindowFrame();
267
+ lap("gpuMs");
242
268
  const imports = state.imports;
243
269
  // In place, a producer's frame is released by its next import.
244
270
  const imported = imports ? ownExportFrames(imports, decoded, ownVideoFrames) : ownVideoFrames(decoded);
@@ -266,7 +292,7 @@ const executeExport = args => new Promise((resolve, reject) => {
266
292
  const draw = () => {
267
293
  "worklet";
268
294
 
269
- if (state.gpu) state.target = acquireEncoderTarget(state.encoder, options.width, options.height);
295
+ if (state.gpu) state.target = state.window ? acquireWindowTarget(state.window) : acquireEncoderTarget(state.encoder, options.width, options.height);
270
296
  lap("targetMs");
271
297
  const target = state.target;
272
298
  const surface = target ? target.surface : state.surface;
@@ -289,16 +315,22 @@ const executeExport = args => new Promise((resolve, reject) => {
289
315
  height: options.height
290
316
  });
291
317
  lap("drawMs");
292
- surface.flush(true);
318
+ // Android window, no context to release: the next frame waits
319
+ // for this one (see checkWindowFrame).
320
+ const unchecked = !!state.window && !!target && !afterDrawFrame && !state.processor;
321
+ surface.flush(!unchecked);
322
+ state.unchecked = unchecked;
293
323
  drawn.drained = true;
294
324
  lap("gpuMs");
295
- if (target) {
296
- closeEncoderTarget(target, true);
325
+ if (target && state.window) {
326
+ state.target = null;
327
+ presentWindowTarget(state.encoder, state.window, target, time);
328
+ } else if (target) {
329
+ closeEncoderTarget(target);
297
330
  state.target = null;
298
331
  state.encoder.encodeFrame({
299
332
  kind: "native-buffer",
300
- nativeBuffer: target.pointer,
301
- fences: target.fences
333
+ nativeBuffer: target.pointer
302
334
  }, time);
303
335
  } else {
304
336
  const readbackCanvas = canvas;
@@ -413,6 +445,7 @@ const executeExport = args => new Promise((resolve, reject) => {
413
445
  readback: null,
414
446
  gpu: false,
415
447
  target: null,
448
+ window: null,
416
449
  imports: null,
417
450
  frames: {},
418
451
  processor: null,
@@ -451,10 +484,18 @@ const executeExport = args => new Promise((resolve, reject) => {
451
484
  }, videoComposition);
452
485
  state.encoder.prepare();
453
486
  if (gpuExport) {
454
- // Skia draws straight into the encoder's buffers; the probe
455
- // keeps devices without IOSurface interop on the readback path.
487
+ // Skia draws straight into the encoder's buffers: lent pool
488
+ // buffers on iOS, the input window on Android. The probe keeps
489
+ // devices where that fails on the readback path.
456
490
  state.hasRecorder = true;
457
- const failure = supportsEncoderTargets(state.encoder) ? probeEncoderTarget(state.encoder, options.width, options.height) : new Error("Encoder cannot lend frame buffers");
491
+ let failure;
492
+ if (bgra) {
493
+ failure = supportsEncoderTargets(state.encoder) ? probeEncoderTarget(state.encoder, options.width, options.height) : new Error("Encoder cannot lend frame buffers");
494
+ } else {
495
+ const probe = probeEncoderWindow(state.encoder, options.width, options.height);
496
+ state.window = probe.window;
497
+ failure = probe.failure;
498
+ }
458
499
  state.gpu = failure === null;
459
500
  // Decoded frames are sampled in place too: on iOS through the
460
501
  // same IOSurface import, on Android once converted from YUV.
@@ -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","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","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","probe","console","warn","String","createVideoCompositionFramesExtractorSync","start"],"sourceRoot":"../../src","sources":["exportVideoComposition.ts"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ 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
7
  import { frameByteSize, releaseVideoMemory, reserveVideoMemory } from "./memory.js";
8
- import { blitNv12Frame, blitYuvFrame, releaseYuvImports, yuvFrameOrigin } from "./yuvBlit.js";
8
+ import { blitNv12Frame, blitYuvFrame, releaseYuvImports, yuvFrameRegion } from "./yuvBlit.js";
9
9
  // Capture a scalar on the RN runtime instead of importing Platform inside a
10
10
  // worklet. iOS keeps its existing native-buffer and RGBA compatibility paths.
11
11
  const uploadAndroidRgba = Platform.OS === "android";
@@ -49,7 +49,6 @@ const clearEntry = (cache, producer) => {
49
49
  const clearSurfaceView = cache => {
50
50
  "worklet";
51
51
 
52
- cache.canvas?.dispose();
53
52
  cache.canvas = null;
54
53
  cache.stage?.dispose();
55
54
  cache.stage = null;
@@ -320,17 +319,15 @@ export const imageFromVideoFrame = frame => {
320
319
  const region = texture.region;
321
320
  const rotation = texture.rotation ?? 0;
322
321
  const nv12 = !region && texture.format === "nv12";
323
- let origin = {
324
- x: 0,
325
- y: 0
326
- };
322
+ let upright = null;
327
323
  if (region) {
328
324
  // An Android codec buffer: padded, YUV, in encoded orientation. The
329
- // blit converts, crops and turns it into the display-sized scratch,
330
- // as the GL path's SurfaceTexture transform did. RN WebGPU labels
331
- // driver-defined YUV formats "bgra8", yet Dawn imports them as YUV:
332
- // the native side checked the format, so the label is not read.
333
- origin = yuvFrameOrigin(region, rotation, nativeSource, frame);
325
+ // blit converts, crops, turns and scales it into the frame-sized
326
+ // scratch, as the GL path's SurfaceTexture transform did. RN WebGPU
327
+ // labels driver-defined YUV formats "bgra8", yet Dawn imports them
328
+ // as YUV: the native side checked the format, so the label is not
329
+ // read.
330
+ upright = yuvFrameRegion(region, rotation, nativeSource);
334
331
  } else if (nv12) {
335
332
  if (nativeSource.width !== frame.width || nativeSource.height !== frame.height) throw new Error("Native video buffer dimensions mismatch");
336
333
  } else if (
@@ -346,7 +343,7 @@ export const imageFromVideoFrame = frame => {
346
343
  if (region) {
347
344
  // copyExternalImageToTexture would also convert the video's
348
345
  // transfer function and primaries to sRGB (see yuvBlit.ts).
349
- blitYuvFrame(device, cache.yuvImports, key, nativeSource, rotation, origin, frame.width, frame.height, cache.uploadTexture);
346
+ blitYuvFrame(device, cache.yuvImports, key, nativeSource, rotation, upright, cache.uploadTexture);
350
347
  } else if (nv12) {
351
348
  // Decoded orientation, as below: drawVideoFrame applies rotation.
352
349
  blitNv12Frame(device, nativeSource, cache.uploadTexture);