@editframe/elements 0.5.0-beta.8 → 0.6.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/lib/av/EncodedAsset.cjs +561 -0
- package/dist/{editor/util/EncodedAsset/EncodedAsset.mjs → lib/av/EncodedAsset.js} +40 -33
- package/dist/lib/av/MP4File.cjs +182 -0
- package/dist/{editor/util/MP4File.mjs → lib/av/MP4File.js} +55 -51
- package/dist/lib/av/msToTimeCode.cjs +15 -0
- package/dist/lib/util/awaitMicrotask.cjs +8 -0
- package/dist/lib/util/memoize.cjs +14 -0
- package/dist/{util/memoize.mjs → lib/util/memoize.js} +1 -2
- package/dist/packages/elements/src/EF_FRAMEGEN.cjs +197 -0
- package/dist/packages/elements/src/EF_FRAMEGEN.d.ts +45 -0
- package/dist/packages/elements/src/EF_FRAMEGEN.js +197 -0
- package/dist/packages/elements/src/EF_INTERACTIVE.cjs +4 -0
- package/dist/packages/elements/src/EF_INTERACTIVE.d.ts +1 -0
- package/dist/packages/elements/src/elements/CrossUpdateController.cjs +16 -0
- package/dist/packages/elements/src/elements/CrossUpdateController.d.ts +9 -0
- package/dist/packages/elements/src/elements/EFAudio.cjs +53 -0
- package/dist/packages/elements/src/elements/EFAudio.d.ts +10 -0
- package/dist/{elements/src/elements/EFAudio.mjs → packages/elements/src/elements/EFAudio.js} +2 -5
- package/dist/packages/elements/src/elements/EFCaptions.cjs +171 -0
- package/dist/packages/elements/src/elements/EFCaptions.d.ts +39 -0
- package/dist/{elements/src/elements/EFCaptions.mjs → packages/elements/src/elements/EFCaptions.js} +18 -20
- package/dist/packages/elements/src/elements/EFImage.cjs +79 -0
- package/dist/packages/elements/src/elements/EFImage.d.ts +14 -0
- package/dist/{elements/src/elements/EFImage.mjs → packages/elements/src/elements/EFImage.js} +8 -7
- package/dist/packages/elements/src/elements/EFMedia.cjs +334 -0
- package/dist/packages/elements/src/elements/EFMedia.d.ts +61 -0
- package/dist/{elements/src/elements/EFMedia.mjs → packages/elements/src/elements/EFMedia.js} +40 -38
- package/dist/packages/elements/src/elements/EFSourceMixin.cjs +55 -0
- package/dist/packages/elements/src/elements/EFSourceMixin.d.ts +12 -0
- package/dist/{elements/src/elements/EFSourceMixin.mjs → packages/elements/src/elements/EFSourceMixin.js} +6 -8
- package/dist/packages/elements/src/elements/EFTemporal.cjs +198 -0
- package/dist/packages/elements/src/elements/EFTemporal.d.ts +36 -0
- package/dist/{elements/src/elements/EFTemporal.mjs → packages/elements/src/elements/EFTemporal.js} +6 -22
- package/dist/packages/elements/src/elements/EFTimegroup.browsertest.d.ts +12 -0
- package/{src/elements/EFTimegroup.ts → dist/packages/elements/src/elements/EFTimegroup.cjs} +162 -213
- package/dist/packages/elements/src/elements/EFTimegroup.d.ts +39 -0
- package/dist/{elements/src/elements/EFTimegroup.mjs → packages/elements/src/elements/EFTimegroup.js} +55 -65
- package/{src/elements/EFTimeline.ts → dist/packages/elements/src/elements/EFTimeline.cjs} +5 -3
- package/dist/packages/elements/src/elements/EFTimeline.d.ts +3 -0
- package/dist/{elements/src/elements/EFTimeline.mjs → packages/elements/src/elements/EFTimeline.js} +5 -2
- package/dist/packages/elements/src/elements/EFVideo.cjs +110 -0
- package/dist/packages/elements/src/elements/EFVideo.d.ts +14 -0
- package/dist/{elements/src/elements/EFVideo.mjs → packages/elements/src/elements/EFVideo.js} +10 -32
- package/dist/packages/elements/src/elements/EFWaveform.cjs +235 -0
- package/dist/packages/elements/src/elements/EFWaveform.d.ts +28 -0
- package/dist/{elements/src/elements/EFWaveform.mjs → packages/elements/src/elements/EFWaveform.js} +15 -16
- package/dist/packages/elements/src/elements/FetchMixin.cjs +28 -0
- package/dist/packages/elements/src/elements/FetchMixin.d.ts +8 -0
- package/dist/{elements/src/elements/FetchMixin.mjs → packages/elements/src/elements/FetchMixin.js} +5 -7
- package/dist/packages/elements/src/elements/TimegroupController.cjs +20 -0
- package/dist/packages/elements/src/elements/TimegroupController.d.ts +14 -0
- package/dist/packages/elements/src/elements/durationConverter.cjs +8 -0
- package/dist/packages/elements/src/elements/durationConverter.d.ts +4 -0
- package/dist/{elements/src/elements/durationConverter.mjs → packages/elements/src/elements/durationConverter.js} +1 -1
- package/dist/packages/elements/src/elements/parseTimeToMs.cjs +12 -0
- package/dist/packages/elements/src/elements/parseTimeToMs.d.ts +1 -0
- package/dist/packages/elements/src/elements/parseTimeToMs.js +12 -0
- package/dist/packages/elements/src/elements/util.cjs +11 -0
- package/dist/packages/elements/src/elements/util.d.ts +4 -0
- package/dist/{elements/src/elements/util.mjs → packages/elements/src/elements/util.js} +1 -1
- package/dist/packages/elements/src/gui/EFFilmstrip.cjs +675 -0
- package/dist/packages/elements/src/gui/EFFilmstrip.d.ts +138 -0
- package/dist/{elements/src/gui/EFFilmstrip.mjs → packages/elements/src/gui/EFFilmstrip.js} +57 -55
- package/dist/packages/elements/src/gui/EFWorkbench.cjs +199 -0
- package/dist/packages/elements/src/gui/EFWorkbench.d.ts +44 -0
- package/dist/{elements/src/gui/EFWorkbench.mjs → packages/elements/src/gui/EFWorkbench.js} +27 -49
- package/{src/gui/TWMixin.ts → dist/packages/elements/src/gui/TWMixin.cjs} +11 -10
- package/dist/packages/elements/src/gui/TWMixin.css.cjs +3 -0
- package/dist/packages/elements/src/gui/TWMixin.css.js +4 -0
- package/dist/packages/elements/src/gui/TWMixin.d.ts +3 -0
- package/dist/{elements/src/gui/TWMixin.mjs → packages/elements/src/gui/TWMixin.js} +4 -3
- package/dist/packages/elements/src/index.cjs +47 -0
- package/dist/packages/elements/src/index.d.ts +10 -0
- package/dist/packages/elements/src/index.js +23 -0
- package/dist/style.css +13 -4
- package/package.json +23 -4
- package/dist/elements/src/EF_FRAMEGEN.mjs +0 -130
- package/dist/elements/src/elements/parseTimeToMs.mjs +0 -13
- package/dist/elements/src/elements.mjs +0 -12
- package/dist/elements/src/gui/TWMixin.css.mjs +0 -4
- package/dist/util/awaitAnimationFrame.mjs +0 -11
- package/docker-compose.yaml +0 -17
- package/src/EF_FRAMEGEN.ts +0 -208
- package/src/EF_INTERACTIVE.ts +0 -2
- package/src/elements/CrossUpdateController.ts +0 -18
- package/src/elements/EFAudio.ts +0 -42
- package/src/elements/EFCaptions.ts +0 -202
- package/src/elements/EFImage.ts +0 -70
- package/src/elements/EFMedia.ts +0 -395
- package/src/elements/EFSourceMixin.ts +0 -57
- package/src/elements/EFTemporal.ts +0 -246
- package/src/elements/EFTimegroup.browsertest.ts +0 -360
- package/src/elements/EFVideo.ts +0 -114
- package/src/elements/EFWaveform.ts +0 -407
- package/src/elements/FetchMixin.ts +0 -18
- package/src/elements/TimegroupController.ts +0 -25
- package/src/elements/buildLitFixture.ts +0 -13
- package/src/elements/durationConverter.ts +0 -6
- package/src/elements/parseTimeToMs.ts +0 -10
- package/src/elements/util.ts +0 -24
- package/src/gui/EFFilmstrip.ts +0 -702
- package/src/gui/EFWorkbench.ts +0 -242
- package/src/gui/TWMixin.css +0 -3
- package/src/util.d.ts +0 -1
- /package/dist/{editor/msToTimeCode.mjs → lib/av/msToTimeCode.js} +0 -0
- /package/dist/{util/awaitMicrotask.mjs → lib/util/awaitMicrotask.js} +0 -0
- /package/dist/{elements/src/EF_INTERACTIVE.mjs → packages/elements/src/EF_INTERACTIVE.js} +0 -0
- /package/dist/{elements/src/elements/CrossUpdateController.mjs → packages/elements/src/elements/CrossUpdateController.js} +0 -0
- /package/dist/{elements/src/elements/TimegroupController.mjs → packages/elements/src/elements/TimegroupController.js} +0 -0
package/dist/{elements/src/elements/EFTimegroup.mjs → packages/elements/src/elements/EFTimegroup.js}
RENAMED
|
@@ -1,41 +1,39 @@
|
|
|
1
1
|
import { html, css, LitElement } from "lit";
|
|
2
2
|
import { provide } from "@lit/context";
|
|
3
3
|
import { property, customElement } from "lit/decorators.js";
|
|
4
|
-
import { EFTemporal, shallowGetTemporalElements, isEFTemporal, timegroupContext } from "./EFTemporal.
|
|
5
|
-
import { TimegroupController } from "./TimegroupController.
|
|
6
|
-
import { EF_INTERACTIVE } from "../EF_INTERACTIVE.
|
|
7
|
-
import { deepGetMediaElements } from "./EFMedia.
|
|
4
|
+
import { EFTemporal, shallowGetTemporalElements, isEFTemporal, timegroupContext } from "./EFTemporal.js";
|
|
5
|
+
import { TimegroupController } from "./TimegroupController.js";
|
|
6
|
+
import { EF_INTERACTIVE } from "../EF_INTERACTIVE.js";
|
|
7
|
+
import { deepGetMediaElements } from "./EFMedia.js";
|
|
8
8
|
import { Task } from "@lit/task";
|
|
9
9
|
var __defProp = Object.defineProperty;
|
|
10
10
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
|
+
var __typeError = (msg) => {
|
|
12
|
+
throw TypeError(msg);
|
|
13
|
+
};
|
|
11
14
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
12
15
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
13
16
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14
17
|
if (decorator = decorators[i])
|
|
15
18
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
16
|
-
if (kind && result)
|
|
17
|
-
__defProp(target, key, result);
|
|
19
|
+
if (kind && result) __defProp(target, key, result);
|
|
18
20
|
return result;
|
|
19
21
|
};
|
|
20
|
-
var __accessCheck = (obj, member, msg) =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var __privateGet = (obj, member, getter) => {
|
|
25
|
-
__accessCheck(obj, member, "read from private field");
|
|
26
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
27
|
-
};
|
|
28
|
-
var __privateAdd = (obj, member, value) => {
|
|
29
|
-
if (member.has(obj))
|
|
30
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
31
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
32
|
-
};
|
|
33
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
34
|
-
__accessCheck(obj, member, "write to private field");
|
|
35
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
36
|
-
return value;
|
|
37
|
-
};
|
|
22
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
23
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
24
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
25
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
38
26
|
var _currentTime;
|
|
27
|
+
const shallowGetTimegroups = (element, groups = []) => {
|
|
28
|
+
for (const child of Array.from(element.children)) {
|
|
29
|
+
if (child instanceof EFTimegroup) {
|
|
30
|
+
groups.push(child);
|
|
31
|
+
} else {
|
|
32
|
+
shallowGetTimegroups(child, groups);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return groups;
|
|
36
|
+
};
|
|
39
37
|
let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
40
38
|
constructor() {
|
|
41
39
|
super(...arguments);
|
|
@@ -46,7 +44,7 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
46
44
|
this.frameTask = new Task(this, {
|
|
47
45
|
autoRun: EF_INTERACTIVE,
|
|
48
46
|
args: () => [this.ownCurrentTimeMs, this.currentTimeMs],
|
|
49
|
-
task: async ([], { signal }) => {
|
|
47
|
+
task: async ([], { signal: _signal }) => {
|
|
50
48
|
let fullyUpdated = await this.updateComplete;
|
|
51
49
|
while (!fullyUpdated) {
|
|
52
50
|
fullyUpdated = await this.updateComplete;
|
|
@@ -81,7 +79,7 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
81
79
|
maybeLoadTimeFromLocalStorage() {
|
|
82
80
|
if (this.id) {
|
|
83
81
|
try {
|
|
84
|
-
return parseFloat(localStorage.getItem(this.storageKey) || "0");
|
|
82
|
+
return Number.parseFloat(localStorage.getItem(this.storageKey) || "0");
|
|
85
83
|
} catch (error) {
|
|
86
84
|
console.warn("Failed to load time from localStorage", error);
|
|
87
85
|
}
|
|
@@ -124,20 +122,22 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
124
122
|
switch (this.mode) {
|
|
125
123
|
case "fixed":
|
|
126
124
|
return super.durationMs || 0;
|
|
127
|
-
case "sequence":
|
|
125
|
+
case "sequence": {
|
|
128
126
|
let duration = 0;
|
|
129
|
-
this.childTemporals
|
|
127
|
+
for (const node of this.childTemporals) {
|
|
130
128
|
duration += node.durationMs;
|
|
131
|
-
}
|
|
129
|
+
}
|
|
132
130
|
return duration;
|
|
133
|
-
|
|
131
|
+
}
|
|
132
|
+
case "contain": {
|
|
134
133
|
let maxDuration = 0;
|
|
135
|
-
this.childTemporals
|
|
134
|
+
for (const node of this.childTemporals) {
|
|
136
135
|
if (node.hasOwnDuration) {
|
|
137
136
|
maxDuration = Math.max(maxDuration, node.durationMs);
|
|
138
137
|
}
|
|
139
|
-
}
|
|
138
|
+
}
|
|
140
139
|
return maxDuration;
|
|
140
|
+
}
|
|
141
141
|
default:
|
|
142
142
|
throw new Error(`Invalid time mode: ${this.mode}`);
|
|
143
143
|
}
|
|
@@ -155,13 +155,18 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
155
155
|
updated(changedProperties) {
|
|
156
156
|
super.updated(changedProperties);
|
|
157
157
|
if (changedProperties.has("currentTime") || changedProperties.has("ownCurrentTimeMs")) {
|
|
158
|
-
|
|
158
|
+
const timelineTimeMs = (this.rootTimegroup ?? this).currentTimeMs;
|
|
159
|
+
if (this.startTimeMs > timelineTimeMs || this.endTimeMs < timelineTimeMs) {
|
|
160
|
+
this.style.display = "none";
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.style.display = "";
|
|
159
164
|
const animations = this.getAnimations({ subtree: true });
|
|
160
165
|
this.style.setProperty(
|
|
161
166
|
"--ef-duration",
|
|
162
167
|
`${this.durationMs + this.crossoverEndMs + this.crossoverStartMs}ms`
|
|
163
168
|
);
|
|
164
|
-
|
|
169
|
+
for (const animation of animations) {
|
|
165
170
|
if (animation.playState === "running") {
|
|
166
171
|
animation.pause();
|
|
167
172
|
}
|
|
@@ -170,6 +175,12 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
170
175
|
return;
|
|
171
176
|
}
|
|
172
177
|
const target = effect.target;
|
|
178
|
+
if (!target) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (target.closest("ef-timegroup") !== this) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
173
184
|
if (isEFTemporal(target)) {
|
|
174
185
|
const timing = effect.getTiming();
|
|
175
186
|
const duration = Number(timing.duration) ?? 0;
|
|
@@ -197,7 +208,7 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
197
208
|
}
|
|
198
209
|
animation.currentTime = newTime;
|
|
199
210
|
}
|
|
200
|
-
}
|
|
211
|
+
}
|
|
201
212
|
}
|
|
202
213
|
}
|
|
203
214
|
shouldWrapWithWorkbench() {
|
|
@@ -234,10 +245,6 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
234
245
|
Math.round(48e3 * durationMs / 1e3),
|
|
235
246
|
48e3
|
|
236
247
|
);
|
|
237
|
-
console.log("RENDERING AUDIO");
|
|
238
|
-
console.log(
|
|
239
|
-
`renderAudio fromMs=${fromMs} toMs=${toMs} durationMs=${durationMs} ctxSize=${audioContext.length}`
|
|
240
|
-
);
|
|
241
248
|
await Promise.all(
|
|
242
249
|
deepGetMediaElements(this).map(async (mediaElement) => {
|
|
243
250
|
await mediaElement.trackFragmentIndexLoader.taskComplete;
|
|
@@ -245,7 +252,6 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
245
252
|
const mediaEndsAfterStart = mediaElement.endTimeMs >= fromMs;
|
|
246
253
|
const mediaOverlaps = mediaStartsBeforeEnd && mediaEndsAfterStart;
|
|
247
254
|
if (!mediaOverlaps || mediaElement.defaultAudioTrackId === void 0) {
|
|
248
|
-
console.log("Skipping audio element due to lack of overlap");
|
|
249
255
|
return;
|
|
250
256
|
}
|
|
251
257
|
const audio = await mediaElement.fetchAudioSpanningTime(fromMs, toMs);
|
|
@@ -256,22 +262,6 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
256
262
|
const ctxEndMs = Math.min(durationMs, mediaElement.endTimeMs - fromMs);
|
|
257
263
|
const ctxDurationMs = ctxEndMs - ctxStartMs;
|
|
258
264
|
const offset = Math.max(0, fromMs - mediaElement.startTimeMs) - audio.startMs;
|
|
259
|
-
console.log(
|
|
260
|
-
"AUDIO SPAN",
|
|
261
|
-
JSON.stringify({
|
|
262
|
-
fromMs,
|
|
263
|
-
toMs,
|
|
264
|
-
audio: {
|
|
265
|
-
startMs: audio.startMs,
|
|
266
|
-
endMs: audio.endMs
|
|
267
|
-
},
|
|
268
|
-
elementStart: mediaElement.startTimeMs,
|
|
269
|
-
elementEnd: mediaElement.endTimeMs,
|
|
270
|
-
ctxStart: ctxStartMs,
|
|
271
|
-
ctxEnd: ctxEndMs,
|
|
272
|
-
offset
|
|
273
|
-
})
|
|
274
|
-
);
|
|
275
265
|
const bufferSource = audioContext.createBufferSource();
|
|
276
266
|
bufferSource.buffer = await audioContext.decodeAudioData(
|
|
277
267
|
await audio.blob.arrayBuffer()
|
|
@@ -289,13 +279,13 @@ let EFTimegroup = class extends EFTemporal(LitElement) {
|
|
|
289
279
|
async loadMd5Sums() {
|
|
290
280
|
const efElements = this.efElements;
|
|
291
281
|
const loaderTasks = [];
|
|
292
|
-
|
|
282
|
+
for (const el of efElements) {
|
|
293
283
|
const md5SumLoader = el.md5SumLoader;
|
|
294
284
|
if (md5SumLoader instanceof Task) {
|
|
295
285
|
md5SumLoader.run();
|
|
296
286
|
loaderTasks.push(md5SumLoader.taskComplete);
|
|
297
287
|
}
|
|
298
|
-
}
|
|
288
|
+
}
|
|
299
289
|
await Promise.all(loaderTasks);
|
|
300
290
|
efElements.map((el) => {
|
|
301
291
|
if ("productionSrc" in el && el.productionSrc instanceof Function) {
|
|
@@ -332,15 +322,14 @@ __decorateClass([
|
|
|
332
322
|
converter: {
|
|
333
323
|
fromAttribute: (value) => {
|
|
334
324
|
if (value.endsWith("ms")) {
|
|
335
|
-
return parseFloat(value);
|
|
325
|
+
return Number.parseFloat(value);
|
|
336
326
|
}
|
|
337
327
|
if (value.endsWith("s")) {
|
|
338
|
-
return parseFloat(value) * 1e3;
|
|
339
|
-
} else {
|
|
340
|
-
throw new Error(
|
|
341
|
-
"`crossover` MUST be in milliseconds or seconds (10s, 10000ms)"
|
|
342
|
-
);
|
|
328
|
+
return Number.parseFloat(value) * 1e3;
|
|
343
329
|
}
|
|
330
|
+
throw new Error(
|
|
331
|
+
"`crossover` MUST be in milliseconds or seconds (10s, 10000ms)"
|
|
332
|
+
);
|
|
344
333
|
},
|
|
345
334
|
toAttribute: (value) => `${value}ms`
|
|
346
335
|
}
|
|
@@ -350,5 +339,6 @@ EFTimegroup = __decorateClass([
|
|
|
350
339
|
customElement("ef-timegroup")
|
|
351
340
|
], EFTimegroup);
|
|
352
341
|
export {
|
|
353
|
-
EFTimegroup
|
|
342
|
+
EFTimegroup,
|
|
343
|
+
shallowGetTimegroups
|
|
354
344
|
};
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
1
3
|
class EFTimeline extends HTMLElement {
|
|
2
4
|
get durationMs() {
|
|
3
5
|
let duration = 0;
|
|
4
|
-
this.childNodes
|
|
6
|
+
for (const node of this.childNodes) {
|
|
5
7
|
if ("durationMs" in node && typeof node.durationMs === "number") {
|
|
6
8
|
duration += node.durationMs;
|
|
7
9
|
}
|
|
8
|
-
}
|
|
10
|
+
}
|
|
9
11
|
return duration;
|
|
10
12
|
}
|
|
11
13
|
}
|
|
12
|
-
|
|
13
14
|
window.customElements.define("ef-timeline", EFTimeline);
|
|
15
|
+
exports.EFTimeline = EFTimeline;
|
package/dist/{elements/src/elements/EFTimeline.mjs → packages/elements/src/elements/EFTimeline.js}
RENAMED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
class EFTimeline extends HTMLElement {
|
|
2
2
|
get durationMs() {
|
|
3
3
|
let duration = 0;
|
|
4
|
-
this.childNodes
|
|
4
|
+
for (const node of this.childNodes) {
|
|
5
5
|
if ("durationMs" in node && typeof node.durationMs === "number") {
|
|
6
6
|
duration += node.durationMs;
|
|
7
7
|
}
|
|
8
|
-
}
|
|
8
|
+
}
|
|
9
9
|
return duration;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
window.customElements.define("ef-timeline", EFTimeline);
|
|
13
|
+
export {
|
|
14
|
+
EFTimeline
|
|
15
|
+
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const lit = require("lit");
|
|
4
|
+
const task = require("@lit/task");
|
|
5
|
+
const ref_js = require("lit/directives/ref.js");
|
|
6
|
+
const decorators_js = require("lit/decorators.js");
|
|
7
|
+
const EFMedia = require("./EFMedia.cjs");
|
|
8
|
+
const TWMixin = require("../gui/TWMixin.cjs");
|
|
9
|
+
var __defProp = Object.defineProperty;
|
|
10
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
|
+
var __typeError = (msg) => {
|
|
12
|
+
throw TypeError(msg);
|
|
13
|
+
};
|
|
14
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
15
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
16
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
17
|
+
if (decorator = decorators[i])
|
|
18
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
19
|
+
if (kind && result) __defProp(target, key, result);
|
|
20
|
+
return result;
|
|
21
|
+
};
|
|
22
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
23
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
24
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
25
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
26
|
+
var _decoderLock;
|
|
27
|
+
exports.EFVideo = class EFVideo extends TWMixin.TWMixin(EFMedia.EFMedia) {
|
|
28
|
+
constructor() {
|
|
29
|
+
super(...arguments);
|
|
30
|
+
this.canvasRef = ref_js.createRef();
|
|
31
|
+
__privateAdd(this, _decoderLock, false);
|
|
32
|
+
this.frameTask = new task.Task(this, {
|
|
33
|
+
args: () => [
|
|
34
|
+
this.trackFragmentIndexLoader.status,
|
|
35
|
+
this.initSegmentsLoader.status,
|
|
36
|
+
this.seekTask.status,
|
|
37
|
+
this.fetchSeekTask.status,
|
|
38
|
+
this.videoAssetTask.status,
|
|
39
|
+
this.paintTask.status
|
|
40
|
+
],
|
|
41
|
+
task: async () => {
|
|
42
|
+
await this.trackFragmentIndexLoader.taskComplete;
|
|
43
|
+
await this.initSegmentsLoader.taskComplete;
|
|
44
|
+
await this.seekTask.taskComplete;
|
|
45
|
+
await this.fetchSeekTask.taskComplete;
|
|
46
|
+
await this.videoAssetTask.taskComplete;
|
|
47
|
+
await this.paintTask.taskComplete;
|
|
48
|
+
this.rootTimegroup?.requestUpdate();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
this.paintTask = new task.Task(this, {
|
|
52
|
+
args: () => [this.videoAssetTask.value, this.desiredSeekTimeMs],
|
|
53
|
+
task: async ([videoAsset, seekToMs], {
|
|
54
|
+
signal: _signal
|
|
55
|
+
}) => {
|
|
56
|
+
if (!videoAsset) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (__privateGet(this, _decoderLock)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
__privateSet(this, _decoderLock, true);
|
|
64
|
+
const frame = await videoAsset.seekToTime(seekToMs / 1e3);
|
|
65
|
+
if (!this.canvasElement) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const ctx = this.canvasElement.getContext("2d");
|
|
69
|
+
if (!(frame && ctx)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.canvasElement.width = frame?.codedWidth;
|
|
73
|
+
this.canvasElement.height = frame?.codedHeight;
|
|
74
|
+
ctx.drawImage(
|
|
75
|
+
frame,
|
|
76
|
+
0,
|
|
77
|
+
0,
|
|
78
|
+
this.canvasElement.width,
|
|
79
|
+
this.canvasElement.height
|
|
80
|
+
);
|
|
81
|
+
return seekToMs;
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.trace("Unexpected error while seeking video", error);
|
|
84
|
+
} finally {
|
|
85
|
+
__privateSet(this, _decoderLock, false);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
render() {
|
|
91
|
+
return lit.html` <canvas
|
|
92
|
+
class="h-full w-full object-fill"
|
|
93
|
+
${ref_js.ref(this.canvasRef)}
|
|
94
|
+
></canvas>`;
|
|
95
|
+
}
|
|
96
|
+
get canvasElement() {
|
|
97
|
+
return this.canvasRef.value;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
_decoderLock = /* @__PURE__ */ new WeakMap();
|
|
101
|
+
exports.EFVideo.styles = [
|
|
102
|
+
lit.css`
|
|
103
|
+
:host {
|
|
104
|
+
display: block;
|
|
105
|
+
}
|
|
106
|
+
`
|
|
107
|
+
];
|
|
108
|
+
exports.EFVideo = __decorateClass([
|
|
109
|
+
decorators_js.customElement("ef-video")
|
|
110
|
+
], exports.EFVideo);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Task } from '@lit/task';
|
|
2
|
+
import { EFMedia } from './EFMedia';
|
|
3
|
+
|
|
4
|
+
declare const EFVideo_base: typeof EFMedia;
|
|
5
|
+
export declare class EFVideo extends EFVideo_base {
|
|
6
|
+
#private;
|
|
7
|
+
static styles: import('lit').CSSResult[];
|
|
8
|
+
canvasRef: import('lit-html/directives/ref').Ref<HTMLCanvasElement>;
|
|
9
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
10
|
+
get canvasElement(): HTMLCanvasElement | undefined;
|
|
11
|
+
frameTask: Task<readonly [import('@lit/task').TaskStatus, import('@lit/task').TaskStatus, import('@lit/task').TaskStatus, import('@lit/task').TaskStatus, import('@lit/task').TaskStatus, import('@lit/task').TaskStatus], void>;
|
|
12
|
+
paintTask: Task<readonly [import('../../../../lib/av/EncodedAsset').VideoAsset | undefined, number], number | undefined>;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
package/dist/{elements/src/elements/EFVideo.mjs → packages/elements/src/elements/EFVideo.js}
RENAMED
|
@@ -2,37 +2,25 @@ import { css, html } from "lit";
|
|
|
2
2
|
import { Task } from "@lit/task";
|
|
3
3
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
4
4
|
import { customElement } from "lit/decorators.js";
|
|
5
|
-
import { EFMedia } from "./EFMedia.
|
|
6
|
-
import { TWMixin } from "../gui/TWMixin.
|
|
5
|
+
import { EFMedia } from "./EFMedia.js";
|
|
6
|
+
import { TWMixin } from "../gui/TWMixin.js";
|
|
7
7
|
var __defProp = Object.defineProperty;
|
|
8
8
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __typeError = (msg) => {
|
|
10
|
+
throw TypeError(msg);
|
|
11
|
+
};
|
|
9
12
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
10
13
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
11
14
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12
15
|
if (decorator = decorators[i])
|
|
13
16
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14
|
-
if (kind && result)
|
|
15
|
-
__defProp(target, key, result);
|
|
17
|
+
if (kind && result) __defProp(target, key, result);
|
|
16
18
|
return result;
|
|
17
19
|
};
|
|
18
|
-
var __accessCheck = (obj, member, msg) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var __privateGet = (obj, member, getter) => {
|
|
23
|
-
__accessCheck(obj, member, "read from private field");
|
|
24
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
25
|
-
};
|
|
26
|
-
var __privateAdd = (obj, member, value) => {
|
|
27
|
-
if (member.has(obj))
|
|
28
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
29
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
30
|
-
};
|
|
31
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
32
|
-
__accessCheck(obj, member, "write to private field");
|
|
33
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
34
|
-
return value;
|
|
35
|
-
};
|
|
20
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
21
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
22
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
23
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
36
24
|
var _decoderLock;
|
|
37
25
|
let EFVideo = class extends TWMixin(EFMedia) {
|
|
38
26
|
constructor() {
|
|
@@ -49,14 +37,12 @@ let EFVideo = class extends TWMixin(EFMedia) {
|
|
|
49
37
|
this.paintTask.status
|
|
50
38
|
],
|
|
51
39
|
task: async () => {
|
|
52
|
-
console.log("EFVideo frameTask", this.ownCurrentTimeMs);
|
|
53
40
|
await this.trackFragmentIndexLoader.taskComplete;
|
|
54
41
|
await this.initSegmentsLoader.taskComplete;
|
|
55
42
|
await this.seekTask.taskComplete;
|
|
56
43
|
await this.fetchSeekTask.taskComplete;
|
|
57
44
|
await this.videoAssetTask.taskComplete;
|
|
58
45
|
await this.paintTask.taskComplete;
|
|
59
|
-
console.log("EFVideo frameTask complete", this.ownCurrentTimeMs);
|
|
60
46
|
this.rootTimegroup?.requestUpdate();
|
|
61
47
|
}
|
|
62
48
|
});
|
|
@@ -65,7 +51,6 @@ let EFVideo = class extends TWMixin(EFMedia) {
|
|
|
65
51
|
task: async ([videoAsset, seekToMs], {
|
|
66
52
|
signal: _signal
|
|
67
53
|
}) => {
|
|
68
|
-
console.log(`EFVideo paintTask decoderLock=${__privateGet(this, _decoderLock)}`);
|
|
69
54
|
if (!videoAsset) {
|
|
70
55
|
return;
|
|
71
56
|
}
|
|
@@ -75,13 +60,6 @@ let EFVideo = class extends TWMixin(EFMedia) {
|
|
|
75
60
|
try {
|
|
76
61
|
__privateSet(this, _decoderLock, true);
|
|
77
62
|
const frame = await videoAsset.seekToTime(seekToMs / 1e3);
|
|
78
|
-
console.log(
|
|
79
|
-
"Painting frame",
|
|
80
|
-
"seekToMs",
|
|
81
|
-
seekToMs,
|
|
82
|
-
"timestamp",
|
|
83
|
-
frame?.timestamp
|
|
84
|
-
);
|
|
85
63
|
if (!this.canvasElement) {
|
|
86
64
|
return;
|
|
87
65
|
}
|