react-native-skia-webgpu-video 0.1.0-beta.0 → 0.1.0-beta.1
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/android/src/main/java/com/azzapp/rnskv/DisplayVsyncPeriod.java +72 -0
- package/android/src/main/java/com/azzapp/rnskv/NativeRgbaBuffer.java +9 -1
- package/android/src/main/java/com/azzapp/rnskv/RgbaBufferAllocator.java +32 -1
- package/android/src/main/java/com/azzapp/rnskv/VideoCompositionDecoder.java +10 -3
- package/android/src/main/java/com/azzapp/rnskv/VideoCompositionFramesExtractor.java +114 -5
- package/lib/module/videoCompositionPlayer.js +22 -2
- package/lib/module/videoCompositionPlayer.js.map +1 -1
- package/lib/typescript/src/videoCompositionPlayer.d.ts +21 -1
- package/lib/typescript/src/videoCompositionPlayer.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/videoCompositionPlayer.ts +51 -3
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
package com.azzapp.rnskv;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.hardware.display.DisplayManager;
|
|
5
|
+
import android.view.Display;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The vsync period of a display, kept current as its refresh rate changes.
|
|
9
|
+
*
|
|
10
|
+
* Taken from the display rather than from the gaps between vsyncs: those
|
|
11
|
+
* cannot tell a slower refresh rate from missed vsyncs, and an adaptive
|
|
12
|
+
* display dropping from 90 or 120 Hz to 60 Hz left such an estimate at the
|
|
13
|
+
* old rate.
|
|
14
|
+
*/
|
|
15
|
+
final class DisplayVsyncPeriod implements DisplayManager.DisplayListener {
|
|
16
|
+
private final DisplayManager displayManager;
|
|
17
|
+
private final Display display;
|
|
18
|
+
private volatile long periodNanos;
|
|
19
|
+
|
|
20
|
+
private DisplayVsyncPeriod(DisplayManager displayManager, Display display) {
|
|
21
|
+
this.displayManager = displayManager;
|
|
22
|
+
this.display = display;
|
|
23
|
+
update();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Follows the display's refresh rate changes on the calling thread's looper.
|
|
28
|
+
*
|
|
29
|
+
* @param display the display to follow, null for the default one
|
|
30
|
+
* @return null when the display cannot be followed
|
|
31
|
+
*/
|
|
32
|
+
static DisplayVsyncPeriod watch(Context context, Display display) {
|
|
33
|
+
DisplayManager displayManager = context.getSystemService(DisplayManager.class);
|
|
34
|
+
if (displayManager == null) return null;
|
|
35
|
+
if (display == null) display = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
|
|
36
|
+
if (display == null) return null;
|
|
37
|
+
DisplayVsyncPeriod period = new DisplayVsyncPeriod(displayManager, display);
|
|
38
|
+
displayManager.registerDisplayListener(period, null);
|
|
39
|
+
return period;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @return the display's vsync period in nanoseconds, 0 when unknown
|
|
44
|
+
*/
|
|
45
|
+
long getPeriodNanos() {
|
|
46
|
+
return periodNanos;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void release() {
|
|
50
|
+
displayManager.unregisterDisplayListener(this);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private void update() {
|
|
54
|
+
float rate = display.getRefreshRate();
|
|
55
|
+
periodNanos = rate > 0 ? (long) (1_000_000_000L / rate) : 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Override
|
|
59
|
+
public void onDisplayAdded(int displayId) {
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Override
|
|
63
|
+
public void onDisplayRemoved(int displayId) {
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public void onDisplayChanged(int displayId) {
|
|
68
|
+
if (displayId == display.getDisplayId()) {
|
|
69
|
+
update();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -21,7 +21,15 @@ final class NativeRgbaBuffer {
|
|
|
21
21
|
ByteBuffer::allocateDirect, NativeRgbaBuffer::nativeAlias, size -> {
|
|
22
22
|
Runtime runtime = Runtime.getRuntime();
|
|
23
23
|
RgbaBufferAllocator.checkAllocationCapacity(size, runtime.maxMemory());
|
|
24
|
-
});
|
|
24
|
+
}, NativeRgbaBuffer::collect);
|
|
25
|
+
|
|
26
|
+
/** Collects, then waits for the references it cleared to be enqueued. */
|
|
27
|
+
private static void collect() {
|
|
28
|
+
Runtime.getRuntime().gc();
|
|
29
|
+
// On ART this waits for the reference queue daemon, which enqueues the
|
|
30
|
+
// buffers' phantom references ahead of the finalizers it waits on.
|
|
31
|
+
System.runFinalization();
|
|
32
|
+
}
|
|
25
33
|
|
|
26
34
|
static ByteBuffer allocate(int size) { return allocator.allocate(size); }
|
|
27
35
|
|
|
@@ -14,14 +14,23 @@ final class RgbaBufferAllocator {
|
|
|
14
14
|
private final IntFunction<ByteBuffer> allocateBacking;
|
|
15
15
|
private final Function<ByteBuffer, ByteBuffer> alias;
|
|
16
16
|
private final IntConsumer checkHeap;
|
|
17
|
+
private final Runnable reclaim;
|
|
18
|
+
/** Collections asked for when the native budget refuses a reservation. */
|
|
19
|
+
static final int RECLAIM_ATTEMPTS = 3;
|
|
17
20
|
RgbaBufferAllocator(BufferLifetime lifetimes, IntToLongFunction reserve, LongConsumer release,
|
|
18
21
|
IntFunction<ByteBuffer> allocateBacking, Function<ByteBuffer, ByteBuffer> alias) {
|
|
19
22
|
this(lifetimes, reserve, release, allocateBacking, alias, size -> {});
|
|
20
23
|
}
|
|
21
24
|
RgbaBufferAllocator(BufferLifetime lifetimes, IntToLongFunction reserve, LongConsumer release,
|
|
22
25
|
IntFunction<ByteBuffer> allocateBacking, Function<ByteBuffer, ByteBuffer> alias, IntConsumer checkHeap) {
|
|
26
|
+
this(lifetimes, reserve, release, allocateBacking, alias, checkHeap, () -> {});
|
|
27
|
+
}
|
|
28
|
+
RgbaBufferAllocator(BufferLifetime lifetimes, IntToLongFunction reserve, LongConsumer release,
|
|
29
|
+
IntFunction<ByteBuffer> allocateBacking, Function<ByteBuffer, ByteBuffer> alias, IntConsumer checkHeap,
|
|
30
|
+
Runnable reclaim) {
|
|
23
31
|
this.lifetimes = lifetimes; this.reserve = reserve; this.release = release;
|
|
24
32
|
this.allocateBacking = allocateBacking; this.alias = alias; this.checkHeap = checkHeap;
|
|
33
|
+
this.reclaim = reclaim;
|
|
25
34
|
}
|
|
26
35
|
|
|
27
36
|
/** Refuse a single backing too large for ART's heap and cleanup headroom.
|
|
@@ -44,7 +53,7 @@ final class RgbaBufferAllocator {
|
|
|
44
53
|
ByteBuffer allocate(int size) {
|
|
45
54
|
lifetimes.drain();
|
|
46
55
|
checkHeap.accept(size);
|
|
47
|
-
long token =
|
|
56
|
+
long token = reserveReclaiming(size);
|
|
48
57
|
Allocation owner;
|
|
49
58
|
try {
|
|
50
59
|
owner = new Allocation();
|
|
@@ -79,5 +88,27 @@ final class RgbaBufferAllocator {
|
|
|
79
88
|
lifetimes.track(exposed, owner, 0);
|
|
80
89
|
return exposed;
|
|
81
90
|
}
|
|
91
|
+
/** A buffer holds its reservation until the GC finds it unreachable. A fast
|
|
92
|
+
* decode drops a frame per vsync, 8 MB each in 1080p, and those dead buffers
|
|
93
|
+
* filled the native budget before the Java heap asked for a collection: the
|
|
94
|
+
* budget refused frames nobody held. Refused while buffers are tracked, the
|
|
95
|
+
* reservation is retried after a collection has returned theirs. */
|
|
96
|
+
private long reserveReclaiming(int size) {
|
|
97
|
+
try {
|
|
98
|
+
return reserve.applyAsLong(size);
|
|
99
|
+
} catch (RuntimeException refused) {
|
|
100
|
+
RuntimeException last = refused;
|
|
101
|
+
for (int attempt = 0; attempt < RECLAIM_ATTEMPTS && lifetimes.trackedCount() > 0; attempt++) {
|
|
102
|
+
reclaim.run();
|
|
103
|
+
lifetimes.drain();
|
|
104
|
+
try {
|
|
105
|
+
return reserve.applyAsLong(size);
|
|
106
|
+
} catch (RuntimeException again) {
|
|
107
|
+
last = again;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
throw last;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
82
113
|
private static final class Allocation { ByteBuffer backing; }
|
|
83
114
|
}
|
|
@@ -114,15 +114,22 @@ public class VideoCompositionDecoder {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
private void prepareCurrent(long positionUs) {
|
|
117
|
+
if (realTime) {
|
|
118
|
+
// The codecs call back on their own thread, lazy or not. Left to default
|
|
119
|
+
// they call back on the looper of the thread that configures them, and
|
|
120
|
+
// the preview prepares from the UI thread: every buffer of every item,
|
|
121
|
+
// and the burst after each seek (a loop's wrap, a seam), then queued on
|
|
122
|
+
// the main looper ahead of the frame that draws them.
|
|
123
|
+
callbackThread = new HandlerThread("ReactNativeSkiaVideo-Codecs");
|
|
124
|
+
callbackThread.start();
|
|
125
|
+
callbacks = new Handler(callbackThread.getLooper());
|
|
126
|
+
}
|
|
117
127
|
if (realTime && window.isLazy()) {
|
|
118
128
|
// Opening a codec takes tens of milliseconds: not on the thread that
|
|
119
129
|
// draws, nor the one that plays, nor the one the playing codec calls back on.
|
|
120
130
|
openerThread = new HandlerThread("ReactNativeSkiaVideo-Opener");
|
|
121
131
|
openerThread.start();
|
|
122
132
|
opener = new Handler(openerThread.getLooper());
|
|
123
|
-
callbackThread = new HandlerThread("ReactNativeSkiaVideo-Codecs");
|
|
124
|
-
callbackThread.start();
|
|
125
|
-
callbacks = new Handler(callbackThread.getLooper());
|
|
126
133
|
}
|
|
127
134
|
for (VideoComposition.Item item : composition.getItems()) {
|
|
128
135
|
if (!item.isVideo() || !opens(item, positionUs)) {
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
package com.azzapp.rnskv;
|
|
2
2
|
|
|
3
|
+
import android.app.Activity;
|
|
3
4
|
import android.os.Handler;
|
|
4
5
|
import android.os.HandlerThread;
|
|
5
6
|
import android.os.Message;
|
|
6
7
|
import android.os.Process;
|
|
7
8
|
import android.os.SystemClock;
|
|
8
9
|
import android.util.Log;
|
|
10
|
+
import android.view.Choreographer;
|
|
9
11
|
|
|
10
12
|
import androidx.media3.common.util.UnstableApi;
|
|
11
13
|
|
|
14
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
15
|
+
|
|
12
16
|
import java.io.IOException;
|
|
13
17
|
import java.util.Map;
|
|
18
|
+
import java.util.concurrent.atomic.AtomicBoolean;
|
|
14
19
|
import javax.microedition.khronos.egl.EGLContext;
|
|
15
20
|
import javax.microedition.khronos.egl.EGL10;
|
|
16
21
|
|
|
@@ -48,13 +53,47 @@ public class VideoCompositionFramesExtractor {
|
|
|
48
53
|
|
|
49
54
|
|
|
50
55
|
private long pendingSeek = 0;
|
|
51
|
-
|
|
56
|
+
// Read on the thread that collects frames (see releaseForNextVsync), written on the playback thread.
|
|
57
|
+
private volatile boolean isPlaying = false;
|
|
52
58
|
|
|
53
|
-
private long startTime = 0;
|
|
54
|
-
private long pausePosition = 0;
|
|
59
|
+
private volatile long startTime = 0;
|
|
60
|
+
private volatile long pausePosition = 0;
|
|
55
61
|
private boolean isEOS = false;
|
|
56
62
|
private boolean completeDispatched = false;
|
|
57
63
|
|
|
64
|
+
// Vsync-aligned release, written and read on the thread that collects frames.
|
|
65
|
+
private long lastVsyncNanos = 0;
|
|
66
|
+
private long recordedVsyncNanos = 0;
|
|
67
|
+
private boolean recordingVsync = false;
|
|
68
|
+
/** Notes each vsync's timestamp on the collecting thread, for as long as the preview lives. */
|
|
69
|
+
private final Choreographer.FrameCallback vsyncRecorder = new Choreographer.FrameCallback() {
|
|
70
|
+
@Override
|
|
71
|
+
public void doFrame(long frameTimeNanos) {
|
|
72
|
+
if (releasing) {
|
|
73
|
+
unwatchDisplay();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
recordedVsyncNanos = frameTimeNanos;
|
|
77
|
+
Choreographer.getInstance().postFrameCallback(this);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
// The display the preview is on; null until the first collection, or when unknown.
|
|
81
|
+
private DisplayVsyncPeriod vsyncPeriod;
|
|
82
|
+
// When that thread last released frames; the playback loop stands back meanwhile.
|
|
83
|
+
private volatile long lastVsyncReleaseNanos = 0;
|
|
84
|
+
// The release itself runs on the playback thread: the decoder's locks are held
|
|
85
|
+
// there for whole codec flushes on a seek, and the UI thread must never
|
|
86
|
+
// wait on them (measured: 65 ms frames when it did).
|
|
87
|
+
private volatile long vsyncReleasePosition = 0;
|
|
88
|
+
private final AtomicBoolean vsyncReleasePosted = new AtomicBoolean(false);
|
|
89
|
+
private final Runnable vsyncRelease = this::runVsyncRelease;
|
|
90
|
+
|
|
91
|
+
private void runVsyncRelease() {
|
|
92
|
+
vsyncReleasePosted.set(false);
|
|
93
|
+
if (!releasing) decoder.render(vsyncReleasePosition);
|
|
94
|
+
}
|
|
95
|
+
private static final long VSYNC_RELEASE_TIMEOUT_NANOS = 100_000_000L;
|
|
96
|
+
|
|
58
97
|
/**
|
|
59
98
|
* Create a new VideoCompositionFramesExtractor.
|
|
60
99
|
*
|
|
@@ -117,7 +156,74 @@ public class VideoCompositionFramesExtractor {
|
|
|
117
156
|
* when finished, without affecting the producer or other snapshots
|
|
118
157
|
*/
|
|
119
158
|
public Map<String, VideoFrame> decodeCompositionFrames() {
|
|
120
|
-
|
|
159
|
+
Map<String, VideoFrame> frames = decoder.updateVideosFrames();
|
|
160
|
+
releaseForNextVsync();
|
|
161
|
+
return frames;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Releases the decoded frames the next vsync is due to show, from the thread
|
|
166
|
+
* that collects them, right after collecting.
|
|
167
|
+
*
|
|
168
|
+
* The playback loop released them on its 10 ms tick, out of phase with the
|
|
169
|
+
* display, so whether a frame was collected on the vsync after its time or
|
|
170
|
+
* the one after that was chance: 24 fps on a 60 Hz display came out in
|
|
171
|
+
* 17/67 ms steps among the 33/50 ms it implies. Released against the vsync's
|
|
172
|
+
* own timestamp, one vsync ahead, every frame is collected on the first
|
|
173
|
+
* vsync at or after its time. The position is decided here, against the
|
|
174
|
+
* vsync; the release is posted to the playback thread, a vsync ahead of the
|
|
175
|
+
* collection that needs it.
|
|
176
|
+
*/
|
|
177
|
+
private void releaseForNextVsync() {
|
|
178
|
+
if (!recordingVsync) {
|
|
179
|
+
try {
|
|
180
|
+
// The collecting thread is a Choreographer thread (the UI thread).
|
|
181
|
+
Choreographer.getInstance().postFrameCallback(vsyncRecorder);
|
|
182
|
+
recordingVsync = true;
|
|
183
|
+
} catch (RuntimeException e) {
|
|
184
|
+
// No looper on this thread: leave the release to the playback loop.
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
watchDisplay();
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
long period = vsyncPeriod != null ? vsyncPeriod.getPeriodNanos() : 0;
|
|
191
|
+
if (period == 0 || recordedVsyncNanos == 0) return;
|
|
192
|
+
// This frame's vsync, whether the recorder has run in this frame yet or not.
|
|
193
|
+
long since = Math.max(0, System.nanoTime() - recordedVsyncNanos);
|
|
194
|
+
long vsyncNanos = recordedVsyncNanos + (since / period) * period;
|
|
195
|
+
if (vsyncNanos == lastVsyncNanos) return;
|
|
196
|
+
lastVsyncNanos = vsyncNanos;
|
|
197
|
+
long vsyncPeriodNanos = period;
|
|
198
|
+
long position = isPlaying
|
|
199
|
+
? (vsyncNanos + vsyncPeriodNanos) / 1000 - startTime
|
|
200
|
+
: pausePosition;
|
|
201
|
+
lastVsyncReleaseNanos = System.nanoTime();
|
|
202
|
+
vsyncReleasePosition = position;
|
|
203
|
+
if (vsyncReleasePosted.compareAndSet(false, true)) {
|
|
204
|
+
handler.post(vsyncRelease);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Follows the refresh rate of the display the preview is on, from the
|
|
210
|
+
* collecting thread, whose looper then receives its changes. Without a React
|
|
211
|
+
* context (instrumented tests) the period stays unknown and the playback loop
|
|
212
|
+
* releases on its tick.
|
|
213
|
+
*/
|
|
214
|
+
private void watchDisplay() {
|
|
215
|
+
ReactApplicationContext context = ReactNativeSkiaVideoModule.currentReactApplicationContext();
|
|
216
|
+
if (context == null) return;
|
|
217
|
+
Activity activity = context.getCurrentActivity();
|
|
218
|
+
vsyncPeriod = DisplayVsyncPeriod.watch(context,
|
|
219
|
+
activity != null ? activity.getWindowManager().getDefaultDisplay() : null);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
private void unwatchDisplay() {
|
|
223
|
+
if (vsyncPeriod != null) {
|
|
224
|
+
vsyncPeriod.release();
|
|
225
|
+
vsyncPeriod = null;
|
|
226
|
+
}
|
|
121
227
|
}
|
|
122
228
|
|
|
123
229
|
/**
|
|
@@ -241,7 +347,10 @@ public class VideoCompositionFramesExtractor {
|
|
|
241
347
|
completeDispatched = false;
|
|
242
348
|
}
|
|
243
349
|
decoder.updateWindow(currentPosition);
|
|
244
|
-
|
|
350
|
+
if (System.nanoTime() - lastVsyncReleaseNanos > VSYNC_RELEASE_TIMEOUT_NANOS) {
|
|
351
|
+
// No one collecting at vsync (not yet, or no longer): release on the tick.
|
|
352
|
+
decoder.render(currentPosition);
|
|
353
|
+
}
|
|
245
354
|
if (isEOS && looping) {
|
|
246
355
|
playInternal();
|
|
247
356
|
}
|
|
@@ -24,6 +24,8 @@ export const useVideoComposition = ({
|
|
|
24
24
|
autoPlay = false,
|
|
25
25
|
isLooping = false,
|
|
26
26
|
drawWhenPaused = false,
|
|
27
|
+
redrawOnTime,
|
|
28
|
+
splitImportAndDraw = false,
|
|
27
29
|
onReadyToPlay,
|
|
28
30
|
onComplete,
|
|
29
31
|
onError
|
|
@@ -161,6 +163,10 @@ export const useVideoComposition = ({
|
|
|
161
163
|
const lastDrawnFramesVersion = useSharedValue(-1);
|
|
162
164
|
const lastDrawnTime = useSharedValue(-1);
|
|
163
165
|
const lastDrawnInputs = useSharedValue(null);
|
|
166
|
+
// Frames version whose new frames the previous vsyncs already imported.
|
|
167
|
+
const lastImportedVersion = useSharedValue(-1);
|
|
168
|
+
// Whether the previous vsync imported and left its draw to this one.
|
|
169
|
+
const drawDeferred = useSharedValue(false);
|
|
164
170
|
// A new drawFrame can draw something else from the same time and frames.
|
|
165
171
|
useEffect(() => {
|
|
166
172
|
lastDrawnTime.value = -1;
|
|
@@ -206,6 +212,18 @@ export const useVideoComposition = ({
|
|
|
206
212
|
sourcesGeneration.value = generation;
|
|
207
213
|
const currentTime = framesExtractor.currentTime;
|
|
208
214
|
const framesVersion = framesExtractor.framesVersion;
|
|
215
|
+
if (splitImportAndDraw && framesVersion !== lastImportedVersion.value) {
|
|
216
|
+
// ownVideoFrames above has just imported the new frames: leave the
|
|
217
|
+
// draw to the next vsync, which finds them in the import cache. Never
|
|
218
|
+
// twice running: a frame that lands on the vsync owed a draw would
|
|
219
|
+
// push it again, and the frame before it would never be shown.
|
|
220
|
+
lastImportedVersion.value = framesVersion;
|
|
221
|
+
if (!drawDeferred.value && currentFrame.value !== null && frameGeneration.value === generation) {
|
|
222
|
+
drawDeferred.value = true;
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
drawDeferred.value = false;
|
|
209
227
|
const inputs = Array.isArray(drawWhenPaused) ? drawWhenPaused : null;
|
|
210
228
|
let inputsSame = true;
|
|
211
229
|
if (inputs) {
|
|
@@ -219,8 +237,10 @@ export const useVideoComposition = ({
|
|
|
219
237
|
}
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
|
-
|
|
223
|
-
|
|
240
|
+
// A negative last time means a redraw was requested (a new drawFrame).
|
|
241
|
+
const timeSame = currentTime === lastDrawnTime.value || redrawOnTime !== undefined && lastDrawnTime.value >= 0 && !redrawOnTime(lastDrawnTime.value, currentTime);
|
|
242
|
+
if (drawWhenPaused !== true && inputsSame && (!framesExtractor.isPlaying || redrawOnTime !== undefined) && currentFrame.value !== null && frameGeneration.value === generation && framesVersion === lastDrawnFramesVersion.value && timeSame && surfaceWidth.value === pixelWidth && surfaceHeight.value === pixelHeight) {
|
|
243
|
+
// Nothing new to show: the image on screen is still exact, and
|
|
224
244
|
// redrawing it at every vsync would only burn GPU time and battery.
|
|
225
245
|
return;
|
|
226
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getVideoCanvas","BlendMode","Skia","useSharedValue","useFrameCallback","runOnUI","useCallback","useEffect","useRef","useState","RNSkiaVideoModule","useEventListener","PixelRatio","scheduleOnRN","ownVideoFrames","releaseVideoFrameImage","frameByteSize","reserveVideoMemory","disposePreviewResources","useVideoComposition","composition","drawFrame","beforeDrawFrame","afterDrawFrame","width","height","autoPlay","isLooping","drawWhenPaused","onReadyToPlay","onComplete","onError","failedComposition","setFailedComposition","isErrored","session","setSession","framesExtractor","extractor","generation","nextGeneration","activeOnRN","activeGeneration","frameGeneration","sourcesGeneration","currentFrame","pendingSnapshot","pendingAfterDraw","previousSources","onCreationError","current","created","createVideoCompositionFramesExtractor","error","createdGeneration","value","releasePreview","failure","native","failed","console","warn","retry","errorHandler","isCurrentSession","prepare","play","surfaceSharedValue","canvasSharedValue","surfaceReservation","surfaceWidth","surfaceHeight","resources","surface","canvas","images","frames","Object","values","reservation","afterDraw","run","lastDrawnFramesVersion","lastDrawnTime","lastDrawnInputs","pixelRatio","get","pixelWidth","Math","floor","pixelHeight","isFinite","decodeCompositionFrames","key","previous","entries","producerId","currentTime","framesVersion","inputs","Array","isArray","inputsSame","last","length","i","isPlaying","retired","retiredFailure","Surface","MakeOffscreen","Error","drawColor","Color","Clear","context","drawn","submitted","undefined","releaseContext","videoComposition","next","makeImageSnapshot","flush","modify","dispose","map","input","player"],"sourceRoot":"../../src","sources":["videoCompositionPlayer.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["getVideoCanvas","BlendMode","Skia","useSharedValue","useFrameCallback","runOnUI","useCallback","useEffect","useRef","useState","RNSkiaVideoModule","useEventListener","PixelRatio","scheduleOnRN","ownVideoFrames","releaseVideoFrameImage","frameByteSize","reserveVideoMemory","disposePreviewResources","useVideoComposition","composition","drawFrame","beforeDrawFrame","afterDrawFrame","width","height","autoPlay","isLooping","drawWhenPaused","redrawOnTime","splitImportAndDraw","onReadyToPlay","onComplete","onError","failedComposition","setFailedComposition","isErrored","session","setSession","framesExtractor","extractor","generation","nextGeneration","activeOnRN","activeGeneration","frameGeneration","sourcesGeneration","currentFrame","pendingSnapshot","pendingAfterDraw","previousSources","onCreationError","current","created","createVideoCompositionFramesExtractor","error","createdGeneration","value","releasePreview","failure","native","failed","console","warn","retry","errorHandler","isCurrentSession","prepare","play","surfaceSharedValue","canvasSharedValue","surfaceReservation","surfaceWidth","surfaceHeight","resources","surface","canvas","images","frames","Object","values","reservation","afterDraw","run","lastDrawnFramesVersion","lastDrawnTime","lastDrawnInputs","lastImportedVersion","drawDeferred","pixelRatio","get","pixelWidth","Math","floor","pixelHeight","isFinite","decodeCompositionFrames","key","previous","entries","producerId","currentTime","framesVersion","inputs","Array","isArray","inputsSame","last","length","i","timeSame","undefined","isPlaying","retired","retiredFailure","Surface","MakeOffscreen","Error","drawColor","Color","Clear","context","drawn","submitted","releaseContext","videoComposition","next","makeImageSnapshot","flush","modify","dispose","map","input","player"],"sourceRoot":"../../src","sources":["videoCompositionPlayer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -51,6 +51,26 @@ type UseVideoCompositionPlayerOptions<T = undefined> = {
|
|
|
51
51
|
* @default false
|
|
52
52
|
*/
|
|
53
53
|
drawWhenPaused?: boolean | SharedValue<unknown>[];
|
|
54
|
+
/**
|
|
55
|
+
* Whether `drawFrame` can draw something different at `currentTime` than it
|
|
56
|
+
* drew at `previousTime` from the same decoded frames. By default every time
|
|
57
|
+
* change redraws, so a playing player draws at every vsync even though the
|
|
58
|
+
* video only changes at its own frame rate. A drawer whose picture depends on
|
|
59
|
+
* time only through the frames (or only at known moments, a transition say)
|
|
60
|
+
* returns false elsewhere, and the player then redraws when a new frame is
|
|
61
|
+
* decoded instead. Must be a worklet.
|
|
62
|
+
*/
|
|
63
|
+
redrawOnTime?: (previousTime: number, currentTime: number) => boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Import a newly decoded frame in one vsync and draw it in the next, instead
|
|
66
|
+
* of both in the same one. On Android the import (YUV blit and its checked
|
|
67
|
+
* GPU wait) and the draw (snapshot and its checked GPU wait) cost about as
|
|
68
|
+
* much as each other, and together they overrun a 90–120 Hz frame budget on
|
|
69
|
+
* the UI thread. The picture then trails the clock by one vsync.
|
|
70
|
+
* The first frame of a session is still drawn as soon as it is imported.
|
|
71
|
+
* @default false
|
|
72
|
+
*/
|
|
73
|
+
splitImportAndDraw?: boolean;
|
|
54
74
|
/**
|
|
55
75
|
* Callback that is called when the composition is ready to play.
|
|
56
76
|
*/
|
|
@@ -80,6 +100,6 @@ type UseVideoCompositionPlayerReturnType = {
|
|
|
80
100
|
/**
|
|
81
101
|
* A hook that creates a video composition player.
|
|
82
102
|
*/
|
|
83
|
-
export declare const useVideoComposition: <T = undefined>({ composition, drawFrame, beforeDrawFrame, afterDrawFrame, width, height, autoPlay, isLooping, drawWhenPaused, onReadyToPlay, onComplete, onError, }: UseVideoCompositionPlayerOptions<T>) => UseVideoCompositionPlayerReturnType;
|
|
103
|
+
export declare const useVideoComposition: <T = undefined>({ composition, drawFrame, beforeDrawFrame, afterDrawFrame, width, height, autoPlay, isLooping, drawWhenPaused, redrawOnTime, splitImportAndDraw, onReadyToPlay, onComplete, onError, }: UseVideoCompositionPlayerOptions<T>) => UseVideoCompositionPlayerReturnType;
|
|
84
104
|
export {};
|
|
85
105
|
//# sourceMappingURL=videoCompositionPlayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoCompositionPlayer.d.ts","sourceRoot":"","sources":["../../../src/videoCompositionPlayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,OAAO,EAAa,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,WAAW,EAEX,gBAAgB,EAChB,+BAA+B,EAChC,MAAM,YAAS,CAAC;AASjB,KAAK,gCAAgC,CAAC,CAAC,GAAG,SAAS,IAAI;IACrD;;;OAGG;IACH,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IACtC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,KAAK,gCAAgC,GAAG,IAAI,CAC1C,+BAA+B,EAC/B,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAC1D,CAAC;AAEF,KAAK,mCAAmC,GAAG;IACzC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3C;;OAEG;IACH,MAAM,EAAE,gCAAgC,GAAG,IAAI,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,GAAG,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"videoCompositionPlayer.d.ts","sourceRoot":"","sources":["../../../src/videoCompositionPlayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,OAAO,EAAa,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,WAAW,EAEX,gBAAgB,EAChB,+BAA+B,EAChC,MAAM,YAAS,CAAC;AASjB,KAAK,gCAAgC,CAAC,CAAC,GAAG,SAAS,IAAI;IACrD;;;OAGG;IACH,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IACtC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACtE;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,KAAK,gCAAgC,GAAG,IAAI,CAC1C,+BAA+B,EAC/B,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAC1D,CAAC;AAEF,KAAK,mCAAmC,GAAG;IACzC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3C;;OAEG;IACH,MAAM,EAAE,gCAAgC,GAAG,IAAI,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,GAAG,SAAS,EAAE,wLAehD,gCAAgC,CAAC,CAAC,CAAC,KAAG,mCAsaxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-skia-webgpu-video",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.1",
|
|
4
4
|
"description": "Bounded video composition, playback and export for React Native Skia 3 / Graphite",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -59,7 +59,8 @@
|
|
|
59
59
|
"benchmark:compare": "node scripts/benchmark-compare.mjs",
|
|
60
60
|
"benchmark:inventory": "node scripts/benchmark-inventory.mjs",
|
|
61
61
|
"benchmark:fixtures": "node scripts/benchmark-fixture-manifest.mjs",
|
|
62
|
-
"test:package": "node --test test/package/*.test.mjs"
|
|
62
|
+
"test:package": "node --test test/package/*.test.mjs",
|
|
63
|
+
"release": "node scripts/release.mjs"
|
|
63
64
|
},
|
|
64
65
|
"keywords": [
|
|
65
66
|
"react-native",
|
|
@@ -73,6 +73,26 @@ type UseVideoCompositionPlayerOptions<T = undefined> = {
|
|
|
73
73
|
* @default false
|
|
74
74
|
*/
|
|
75
75
|
drawWhenPaused?: boolean | SharedValue<unknown>[];
|
|
76
|
+
/**
|
|
77
|
+
* Whether `drawFrame` can draw something different at `currentTime` than it
|
|
78
|
+
* drew at `previousTime` from the same decoded frames. By default every time
|
|
79
|
+
* change redraws, so a playing player draws at every vsync even though the
|
|
80
|
+
* video only changes at its own frame rate. A drawer whose picture depends on
|
|
81
|
+
* time only through the frames (or only at known moments, a transition say)
|
|
82
|
+
* returns false elsewhere, and the player then redraws when a new frame is
|
|
83
|
+
* decoded instead. Must be a worklet.
|
|
84
|
+
*/
|
|
85
|
+
redrawOnTime?: (previousTime: number, currentTime: number) => boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Import a newly decoded frame in one vsync and draw it in the next, instead
|
|
88
|
+
* of both in the same one. On Android the import (YUV blit and its checked
|
|
89
|
+
* GPU wait) and the draw (snapshot and its checked GPU wait) cost about as
|
|
90
|
+
* much as each other, and together they overrun a 90–120 Hz frame budget on
|
|
91
|
+
* the UI thread. The picture then trails the clock by one vsync.
|
|
92
|
+
* The first frame of a session is still drawn as soon as it is imported.
|
|
93
|
+
* @default false
|
|
94
|
+
*/
|
|
95
|
+
splitImportAndDraw?: boolean;
|
|
76
96
|
/**
|
|
77
97
|
* Callback that is called when the composition is ready to play.
|
|
78
98
|
*/
|
|
@@ -118,6 +138,8 @@ export const useVideoComposition = <T = undefined>({
|
|
|
118
138
|
autoPlay = false,
|
|
119
139
|
isLooping = false,
|
|
120
140
|
drawWhenPaused = false,
|
|
141
|
+
redrawOnTime,
|
|
142
|
+
splitImportAndDraw = false,
|
|
121
143
|
onReadyToPlay,
|
|
122
144
|
onComplete,
|
|
123
145
|
onError,
|
|
@@ -291,6 +313,10 @@ export const useVideoComposition = <T = undefined>({
|
|
|
291
313
|
const lastDrawnFramesVersion = useSharedValue(-1);
|
|
292
314
|
const lastDrawnTime = useSharedValue(-1);
|
|
293
315
|
const lastDrawnInputs = useSharedValue<unknown[] | null>(null);
|
|
316
|
+
// Frames version whose new frames the previous vsyncs already imported.
|
|
317
|
+
const lastImportedVersion = useSharedValue(-1);
|
|
318
|
+
// Whether the previous vsync imported and left its draw to this one.
|
|
319
|
+
const drawDeferred = useSharedValue(false);
|
|
294
320
|
// A new drawFrame can draw something else from the same time and frames.
|
|
295
321
|
useEffect(() => {
|
|
296
322
|
lastDrawnTime.value = -1;
|
|
@@ -356,6 +382,22 @@ export const useVideoComposition = <T = undefined>({
|
|
|
356
382
|
sourcesGeneration.value = generation;
|
|
357
383
|
const currentTime = framesExtractor.currentTime;
|
|
358
384
|
const framesVersion = framesExtractor.framesVersion;
|
|
385
|
+
if (splitImportAndDraw && framesVersion !== lastImportedVersion.value) {
|
|
386
|
+
// ownVideoFrames above has just imported the new frames: leave the
|
|
387
|
+
// draw to the next vsync, which finds them in the import cache. Never
|
|
388
|
+
// twice running: a frame that lands on the vsync owed a draw would
|
|
389
|
+
// push it again, and the frame before it would never be shown.
|
|
390
|
+
lastImportedVersion.value = framesVersion;
|
|
391
|
+
if (
|
|
392
|
+
!drawDeferred.value &&
|
|
393
|
+
currentFrame.value !== null &&
|
|
394
|
+
frameGeneration.value === generation
|
|
395
|
+
) {
|
|
396
|
+
drawDeferred.value = true;
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
drawDeferred.value = false;
|
|
359
401
|
const inputs = Array.isArray(drawWhenPaused) ? drawWhenPaused : null;
|
|
360
402
|
let inputsSame = true;
|
|
361
403
|
if (inputs) {
|
|
@@ -370,18 +412,24 @@ export const useVideoComposition = <T = undefined>({
|
|
|
370
412
|
}
|
|
371
413
|
}
|
|
372
414
|
}
|
|
415
|
+
// A negative last time means a redraw was requested (a new drawFrame).
|
|
416
|
+
const timeSame =
|
|
417
|
+
currentTime === lastDrawnTime.value ||
|
|
418
|
+
(redrawOnTime !== undefined &&
|
|
419
|
+
lastDrawnTime.value >= 0 &&
|
|
420
|
+
!redrawOnTime(lastDrawnTime.value, currentTime));
|
|
373
421
|
if (
|
|
374
422
|
drawWhenPaused !== true &&
|
|
375
423
|
inputsSame &&
|
|
376
|
-
!framesExtractor.isPlaying &&
|
|
424
|
+
(!framesExtractor.isPlaying || redrawOnTime !== undefined) &&
|
|
377
425
|
currentFrame.value !== null &&
|
|
378
426
|
frameGeneration.value === generation &&
|
|
379
427
|
framesVersion === lastDrawnFramesVersion.value &&
|
|
380
|
-
|
|
428
|
+
timeSame &&
|
|
381
429
|
surfaceWidth.value === pixelWidth &&
|
|
382
430
|
surfaceHeight.value === pixelHeight
|
|
383
431
|
) {
|
|
384
|
-
//
|
|
432
|
+
// Nothing new to show: the image on screen is still exact, and
|
|
385
433
|
// redrawing it at every vsync would only burn GPU time and battery.
|
|
386
434
|
return;
|
|
387
435
|
}
|