@editframe/elements 0.15.0-beta.9 → 0.16.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/dist/EF_FRAMEGEN.d.ts +14 -10
- package/dist/EF_FRAMEGEN.js +17 -28
- package/dist/elements/EFCaptions.js +0 -7
- package/dist/elements/EFImage.js +0 -4
- package/dist/elements/EFMedia.d.ts +13 -8
- package/dist/elements/EFMedia.js +163 -146
- package/dist/elements/EFSourceMixin.js +2 -1
- package/dist/elements/EFTemporal.browsertest.d.ts +4 -3
- package/dist/elements/EFTemporal.d.ts +14 -11
- package/dist/elements/EFTemporal.js +63 -87
- package/dist/elements/EFTimegroup.d.ts +2 -4
- package/dist/elements/EFTimegroup.js +15 -103
- package/dist/elements/EFVideo.js +3 -1
- package/dist/elements/EFWaveform.d.ts +1 -1
- package/dist/elements/EFWaveform.js +11 -28
- package/dist/elements/durationConverter.d.ts +8 -8
- package/dist/elements/durationConverter.js +2 -2
- package/dist/elements/updateAnimations.d.ts +9 -0
- package/dist/elements/updateAnimations.js +62 -0
- package/dist/getRenderInfo.d.ts +51 -0
- package/dist/getRenderInfo.js +72 -0
- package/dist/gui/EFFilmstrip.js +7 -16
- package/dist/gui/EFFitScale.d.ts +27 -0
- package/dist/gui/EFFitScale.js +138 -0
- package/dist/gui/EFWorkbench.d.ts +2 -5
- package/dist/gui/EFWorkbench.js +11 -56
- package/dist/gui/TWMixin.css.js +1 -1
- package/dist/gui/TWMixin.js +14 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -1
- package/dist/style.css +3 -3
- package/package.json +4 -3
- package/src/elements/EFCaptions.browsertest.ts +2 -2
- package/src/elements/EFCaptions.ts +0 -7
- package/src/elements/EFImage.browsertest.ts +2 -2
- package/src/elements/EFImage.ts +0 -4
- package/src/elements/EFMedia.browsertest.ts +14 -14
- package/src/elements/EFMedia.ts +219 -182
- package/src/elements/EFSourceMixin.ts +4 -4
- package/src/elements/EFTemporal.browsertest.ts +64 -31
- package/src/elements/EFTemporal.ts +99 -119
- package/src/elements/EFTimegroup.ts +15 -133
- package/src/elements/EFVideo.ts +3 -1
- package/src/elements/EFWaveform.ts +10 -44
- package/src/elements/durationConverter.ts +9 -4
- package/src/elements/updateAnimations.ts +88 -0
- package/src/gui/ContextMixin.ts +0 -3
- package/src/gui/EFFilmstrip.ts +7 -16
- package/src/gui/EFFitScale.ts +152 -0
- package/src/gui/EFWorkbench.ts +16 -65
- package/src/gui/TWMixin.ts +19 -2
- package/types.json +1 -1
package/dist/EF_FRAMEGEN.d.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { VideoRenderOptions } from '../../assets/src/index.ts';
|
|
2
|
+
interface Bridge {
|
|
3
|
+
onInitialize: (callback: (renderOptions: VideoRenderOptions) => void) => void;
|
|
4
|
+
initialized(): void;
|
|
5
|
+
onBeginFrame(callback: (frameNumber: number, isLast: boolean) => void): void;
|
|
6
|
+
onTriggerCanvas(callback: () => void): void;
|
|
7
|
+
frameReady(frameNumber: number, audioSamples: ArrayBuffer): void;
|
|
8
|
+
error(error: Error): void;
|
|
9
|
+
}
|
|
2
10
|
declare global {
|
|
3
11
|
interface Window {
|
|
4
|
-
EF_FRAMEGEN?:
|
|
5
|
-
FRAMEGEN_BRIDGE?:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
onTriggerCanvas(callback: () => void): void;
|
|
10
|
-
frameReady(frameNumber: number, audioSamples: ArrayBuffer): void;
|
|
11
|
-
error(error: Error): void;
|
|
12
|
-
};
|
|
12
|
+
EF_FRAMEGEN?: EFFramegen;
|
|
13
|
+
FRAMEGEN_BRIDGE?: Bridge;
|
|
14
|
+
FRAMEGEN_BINDING?: any;
|
|
15
|
+
FRAMEGEN_BINDING_error?: (error: Error) => void;
|
|
16
|
+
EF_RENDERING?: () => boolean;
|
|
13
17
|
}
|
|
14
18
|
}
|
|
15
19
|
declare class TriggerCanvas {
|
|
@@ -18,7 +22,7 @@ declare class TriggerCanvas {
|
|
|
18
22
|
constructor();
|
|
19
23
|
trigger(): void;
|
|
20
24
|
}
|
|
21
|
-
export declare class
|
|
25
|
+
export declare class EFFramegen {
|
|
22
26
|
time: number;
|
|
23
27
|
frameDurationMs: number;
|
|
24
28
|
initialBusyTasks: Promise<unknown[]>;
|
package/dist/EF_FRAMEGEN.js
CHANGED
|
@@ -14,18 +14,19 @@ class TriggerCanvas {
|
|
|
14
14
|
height: "1px",
|
|
15
15
|
zIndex: "100000"
|
|
16
16
|
});
|
|
17
|
-
document.body.
|
|
17
|
+
document.body.appendChild(this.canvas);
|
|
18
18
|
const ctx = this.canvas.getContext("2d", { willReadFrequently: true });
|
|
19
19
|
if (!ctx) throw new Error("Canvas 2d context not ready");
|
|
20
20
|
this.ctx = ctx;
|
|
21
|
-
this.ctx.fillStyle = "
|
|
21
|
+
this.ctx.fillStyle = "transparent";
|
|
22
22
|
}
|
|
23
23
|
trigger() {
|
|
24
24
|
console.log("TRIGGERING CANVAS");
|
|
25
25
|
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
|
26
|
+
this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
|
-
class
|
|
29
|
+
class EFFramegen {
|
|
29
30
|
constructor() {
|
|
30
31
|
this.time = 0;
|
|
31
32
|
this.frameDurationMs = 0;
|
|
@@ -34,7 +35,7 @@ class EfFramegen {
|
|
|
34
35
|
this.triggerCanvas = new TriggerCanvas();
|
|
35
36
|
this.BRIDGE = window.FRAMEGEN_BRIDGE;
|
|
36
37
|
if (this.BRIDGE) {
|
|
37
|
-
console.log("BRIDGE.constructor (connecting to bridge)");
|
|
38
|
+
console.log("trace: BRIDGE.constructor (connecting to bridge)");
|
|
38
39
|
this.connectToBridge();
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -46,30 +47,18 @@ class EfFramegen {
|
|
|
46
47
|
if (!BRIDGE) {
|
|
47
48
|
throw new Error("No BRIDGE when attempting to connect to bridge");
|
|
48
49
|
}
|
|
49
|
-
console.log("BRIDGE.connectToBridge");
|
|
50
|
+
console.log("trace: BRIDGE.connectToBridge");
|
|
50
51
|
BRIDGE.onInitialize(async (renderOptions) => {
|
|
51
|
-
console.log("BRIDGE.onInitialize", renderOptions);
|
|
52
|
+
console.log("trace: BRIDGE.onInitialize", renderOptions);
|
|
52
53
|
await this.initialize(renderOptions);
|
|
53
54
|
BRIDGE.initialized();
|
|
54
55
|
});
|
|
55
56
|
BRIDGE.onBeginFrame((frameNumber, isLast) => {
|
|
56
|
-
console.log("BRIDGE.onBeginFrame", frameNumber, isLast);
|
|
57
|
+
console.log("trace: BRIDGE.onBeginFrame", frameNumber, isLast);
|
|
57
58
|
this.beginFrame(frameNumber, isLast);
|
|
58
59
|
});
|
|
59
60
|
}
|
|
60
61
|
async initialize(renderOptions) {
|
|
61
|
-
addEventListener("unhandledrejection", (event) => {
|
|
62
|
-
this.trace("Unhandled rejection:", event.reason);
|
|
63
|
-
if (this.BRIDGE) {
|
|
64
|
-
this.BRIDGE.error(event.reason);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
addEventListener("error", (event) => {
|
|
68
|
-
this.trace("Uncaught error", event.error);
|
|
69
|
-
if (this.BRIDGE) {
|
|
70
|
-
this.BRIDGE.error(event.error);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
62
|
this.renderOptions = renderOptions;
|
|
74
63
|
const workbench = document.querySelector("ef-workbench");
|
|
75
64
|
if (!workbench) {
|
|
@@ -105,7 +94,7 @@ class EfFramegen {
|
|
|
105
94
|
renderOptions.encoderOptions.alignedFromUs / 1e3,
|
|
106
95
|
renderOptions.encoderOptions.alignedToUs / 1e3
|
|
107
96
|
);
|
|
108
|
-
console.log("Initialized");
|
|
97
|
+
console.log("trace: Initialized");
|
|
109
98
|
}
|
|
110
99
|
async beginFrame(frameNumber, isLast) {
|
|
111
100
|
if (this.renderOptions === void 0) {
|
|
@@ -130,20 +119,22 @@ class EfFramegen {
|
|
|
130
119
|
}
|
|
131
120
|
this.time = this.renderOptions.encoderOptions.fromMs + frameNumber * this.frameDurationMs;
|
|
132
121
|
firstGroup.currentTimeMs = this.time;
|
|
133
|
-
console.log("Awaiting initialBusyTasks");
|
|
122
|
+
console.log("trace: Awaiting initialBusyTasks");
|
|
134
123
|
await this.initialBusyTasks;
|
|
135
|
-
console.log("Awaiting microtask");
|
|
124
|
+
console.log("trace: Awaiting microtask");
|
|
136
125
|
await new Promise(queueMicrotask);
|
|
137
|
-
console.log("Awaiting frame tasks");
|
|
126
|
+
console.log("trace: Awaiting frame tasks");
|
|
138
127
|
const now = performance.now();
|
|
128
|
+
console.log("trace: HTML", document.body.innerHTML);
|
|
139
129
|
await Promise.all(
|
|
140
130
|
temporals.filter((temporal) => temporal.frameTask.status < TaskStatus.COMPLETE).map((temporal) => {
|
|
141
131
|
return temporal.frameTask;
|
|
142
132
|
}).map((task) => task.taskComplete)
|
|
143
133
|
);
|
|
144
134
|
console.log(
|
|
145
|
-
`frame:${frameNumber} All tasks complete ${performance.now() - now}ms`
|
|
135
|
+
`trace: frame:${frameNumber} All tasks complete ${performance.now() - now}ms`
|
|
146
136
|
);
|
|
137
|
+
this.triggerCanvas.trigger();
|
|
147
138
|
if (isLast && this.audioBufferPromise) {
|
|
148
139
|
const renderedAudio = await this.audioBufferPromise;
|
|
149
140
|
const channelCount = renderedAudio.numberOfChannels;
|
|
@@ -159,7 +150,6 @@ class EfFramegen {
|
|
|
159
150
|
}
|
|
160
151
|
}
|
|
161
152
|
if (this.BRIDGE) {
|
|
162
|
-
this.triggerCanvas.trigger();
|
|
163
153
|
this.BRIDGE.frameReady(frameNumber, interleavedSamples.buffer);
|
|
164
154
|
} else {
|
|
165
155
|
const fileReader = new FileReader();
|
|
@@ -172,7 +162,6 @@ class EfFramegen {
|
|
|
172
162
|
}
|
|
173
163
|
} else {
|
|
174
164
|
if (this.BRIDGE) {
|
|
175
|
-
this.triggerCanvas.trigger();
|
|
176
165
|
this.BRIDGE.frameReady(frameNumber, new ArrayBuffer(0));
|
|
177
166
|
} else {
|
|
178
167
|
const fileReader = new FileReader();
|
|
@@ -187,8 +176,8 @@ class EfFramegen {
|
|
|
187
176
|
}
|
|
188
177
|
}
|
|
189
178
|
if (typeof window !== "undefined") {
|
|
190
|
-
window.EF_FRAMEGEN = new
|
|
179
|
+
window.EF_FRAMEGEN = new EFFramegen();
|
|
191
180
|
}
|
|
192
181
|
export {
|
|
193
|
-
|
|
182
|
+
EFFramegen
|
|
194
183
|
};
|
|
@@ -2,7 +2,6 @@ import { Task } from "@lit/task";
|
|
|
2
2
|
import { html, css, LitElement } from "lit";
|
|
3
3
|
import { property, customElement } from "lit/decorators.js";
|
|
4
4
|
import { EF_INTERACTIVE } from "../EF_INTERACTIVE.js";
|
|
5
|
-
import { EF_RENDERING } from "../EF_RENDERING.js";
|
|
6
5
|
import { CrossUpdateController } from "./CrossUpdateController.js";
|
|
7
6
|
import { EFAudio } from "./EFAudio.js";
|
|
8
7
|
import { EFSourceMixin } from "./EFSourceMixin.js";
|
|
@@ -301,18 +300,12 @@ let EFCaptions = class extends EFSourceMixin(
|
|
|
301
300
|
}
|
|
302
301
|
transcriptionsPath() {
|
|
303
302
|
if (this.targetElement.assetId) {
|
|
304
|
-
if (EF_RENDERING()) {
|
|
305
|
-
return `editframe://api/v1/isobmff_files/${this.targetElement.assetId}/transcription`;
|
|
306
|
-
}
|
|
307
303
|
return `${this.apiHost}/api/v1/isobmff_files/${this.targetElement.assetId}/transcription`;
|
|
308
304
|
}
|
|
309
305
|
return null;
|
|
310
306
|
}
|
|
311
307
|
captionsPath() {
|
|
312
308
|
if (this.targetElement.assetId) {
|
|
313
|
-
if (EF_RENDERING()) {
|
|
314
|
-
return `editframe://api/v1/caption_files/${this.targetElement.assetId}`;
|
|
315
|
-
}
|
|
316
309
|
return `${this.apiHost}/api/v1/caption_files/${this.targetElement.assetId}`;
|
|
317
310
|
}
|
|
318
311
|
const targetSrc = this.targetElement.src;
|
package/dist/elements/EFImage.js
CHANGED
|
@@ -3,7 +3,6 @@ import { html, css, LitElement } from "lit";
|
|
|
3
3
|
import { property, customElement } from "lit/decorators.js";
|
|
4
4
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
5
5
|
import { EF_INTERACTIVE } from "../EF_INTERACTIVE.js";
|
|
6
|
-
import { EF_RENDERING } from "../EF_RENDERING.js";
|
|
7
6
|
import { EFSourceMixin } from "./EFSourceMixin.js";
|
|
8
7
|
import { EFTemporal } from "./EFTemporal.js";
|
|
9
8
|
import { FetchMixin } from "./FetchMixin.js";
|
|
@@ -72,9 +71,6 @@ let EFImage = class extends EFTemporal(
|
|
|
72
71
|
}
|
|
73
72
|
assetPath() {
|
|
74
73
|
if (this.assetId) {
|
|
75
|
-
if (EF_RENDERING()) {
|
|
76
|
-
return `editframe://api/v1/image_files/${this.assetId}`;
|
|
77
|
-
}
|
|
78
74
|
return `${this.apiHost}/api/v1/image_files/${this.assetId}`;
|
|
79
75
|
}
|
|
80
76
|
return `/@ef-image/${this.src}`;
|
|
@@ -19,7 +19,7 @@ export declare class EFMedia extends EFMedia_base {
|
|
|
19
19
|
get assetId(): string | null;
|
|
20
20
|
fragmentIndexPath(): string;
|
|
21
21
|
fragmentTrackPath(trackId: string): string;
|
|
22
|
-
trackFragmentIndexLoader: Task<readonly [string, typeof fetch], Record<number, TrackFragmentIndex
|
|
22
|
+
trackFragmentIndexLoader: Task<readonly [string, typeof fetch], Record<number, TrackFragmentIndex> | undefined>;
|
|
23
23
|
initSegmentsLoader: Task<readonly [Record<number, TrackFragmentIndex> | undefined, string, typeof fetch], {
|
|
24
24
|
trackId: string;
|
|
25
25
|
buffer: MP4Box.MP4ArrayBuffer;
|
|
@@ -50,7 +50,7 @@ export declare class EFMedia extends EFMedia_base {
|
|
|
50
50
|
protected executeSeek(seekToMs: number): Promise<void>;
|
|
51
51
|
protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
52
52
|
get hasOwnDuration(): boolean;
|
|
53
|
-
get
|
|
53
|
+
get intrinsicDurationMs(): number;
|
|
54
54
|
audioBufferTask: Task<readonly [Record<string, File> | undefined, Record<string, {
|
|
55
55
|
segment: TrackSegment;
|
|
56
56
|
track: MP4Box.TrackInfo;
|
|
@@ -64,13 +64,18 @@ export declare class EFMedia extends EFMedia_base {
|
|
|
64
64
|
startMs: number;
|
|
65
65
|
endMs: number;
|
|
66
66
|
} | undefined>;
|
|
67
|
-
fftSize: number;
|
|
68
|
-
fftDecay: number;
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
set fftSize(value: number);
|
|
68
|
+
set fftDecay(value: number);
|
|
69
|
+
get fftSize(): number;
|
|
70
|
+
get fftDecay(): number;
|
|
71
|
+
set interpolateFrequencies(value: boolean);
|
|
72
|
+
get interpolateFrequencies(): boolean;
|
|
73
|
+
get shouldInterpolateFrequencies(): boolean;
|
|
71
74
|
private static readonly DECAY_WEIGHT;
|
|
72
75
|
get FREQ_WEIGHTS(): Float32Array;
|
|
73
|
-
byteTimeDomainTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number], Uint8Array | null>;
|
|
74
|
-
frequencyDataTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number], Uint8Array | null>;
|
|
76
|
+
byteTimeDomainTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
|
|
77
|
+
frequencyDataTask: Task<readonly [import('@lit/task').TaskStatus, number, number, number, number, boolean], Uint8Array | null>;
|
|
78
|
+
set fftGain(value: number);
|
|
79
|
+
get fftGain(): number;
|
|
75
80
|
}
|
|
76
81
|
export {};
|