@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.
Files changed (109) hide show
  1. package/dist/lib/av/EncodedAsset.cjs +561 -0
  2. package/dist/{editor/util/EncodedAsset/EncodedAsset.mjs → lib/av/EncodedAsset.js} +40 -33
  3. package/dist/lib/av/MP4File.cjs +182 -0
  4. package/dist/{editor/util/MP4File.mjs → lib/av/MP4File.js} +55 -51
  5. package/dist/lib/av/msToTimeCode.cjs +15 -0
  6. package/dist/lib/util/awaitMicrotask.cjs +8 -0
  7. package/dist/lib/util/memoize.cjs +14 -0
  8. package/dist/{util/memoize.mjs → lib/util/memoize.js} +1 -2
  9. package/dist/packages/elements/src/EF_FRAMEGEN.cjs +197 -0
  10. package/dist/packages/elements/src/EF_FRAMEGEN.d.ts +45 -0
  11. package/dist/packages/elements/src/EF_FRAMEGEN.js +197 -0
  12. package/dist/packages/elements/src/EF_INTERACTIVE.cjs +4 -0
  13. package/dist/packages/elements/src/EF_INTERACTIVE.d.ts +1 -0
  14. package/dist/packages/elements/src/elements/CrossUpdateController.cjs +16 -0
  15. package/dist/packages/elements/src/elements/CrossUpdateController.d.ts +9 -0
  16. package/dist/packages/elements/src/elements/EFAudio.cjs +53 -0
  17. package/dist/packages/elements/src/elements/EFAudio.d.ts +10 -0
  18. package/dist/{elements/src/elements/EFAudio.mjs → packages/elements/src/elements/EFAudio.js} +2 -5
  19. package/dist/packages/elements/src/elements/EFCaptions.cjs +171 -0
  20. package/dist/packages/elements/src/elements/EFCaptions.d.ts +39 -0
  21. package/dist/{elements/src/elements/EFCaptions.mjs → packages/elements/src/elements/EFCaptions.js} +18 -20
  22. package/dist/packages/elements/src/elements/EFImage.cjs +79 -0
  23. package/dist/packages/elements/src/elements/EFImage.d.ts +14 -0
  24. package/dist/{elements/src/elements/EFImage.mjs → packages/elements/src/elements/EFImage.js} +8 -7
  25. package/dist/packages/elements/src/elements/EFMedia.cjs +334 -0
  26. package/dist/packages/elements/src/elements/EFMedia.d.ts +61 -0
  27. package/dist/{elements/src/elements/EFMedia.mjs → packages/elements/src/elements/EFMedia.js} +40 -38
  28. package/dist/packages/elements/src/elements/EFSourceMixin.cjs +55 -0
  29. package/dist/packages/elements/src/elements/EFSourceMixin.d.ts +12 -0
  30. package/dist/{elements/src/elements/EFSourceMixin.mjs → packages/elements/src/elements/EFSourceMixin.js} +6 -8
  31. package/dist/packages/elements/src/elements/EFTemporal.cjs +198 -0
  32. package/dist/packages/elements/src/elements/EFTemporal.d.ts +36 -0
  33. package/dist/{elements/src/elements/EFTemporal.mjs → packages/elements/src/elements/EFTemporal.js} +6 -22
  34. package/dist/packages/elements/src/elements/EFTimegroup.browsertest.d.ts +12 -0
  35. package/{src/elements/EFTimegroup.ts → dist/packages/elements/src/elements/EFTimegroup.cjs} +162 -213
  36. package/dist/packages/elements/src/elements/EFTimegroup.d.ts +39 -0
  37. package/dist/{elements/src/elements/EFTimegroup.mjs → packages/elements/src/elements/EFTimegroup.js} +55 -65
  38. package/{src/elements/EFTimeline.ts → dist/packages/elements/src/elements/EFTimeline.cjs} +5 -3
  39. package/dist/packages/elements/src/elements/EFTimeline.d.ts +3 -0
  40. package/dist/{elements/src/elements/EFTimeline.mjs → packages/elements/src/elements/EFTimeline.js} +5 -2
  41. package/dist/packages/elements/src/elements/EFVideo.cjs +110 -0
  42. package/dist/packages/elements/src/elements/EFVideo.d.ts +14 -0
  43. package/dist/{elements/src/elements/EFVideo.mjs → packages/elements/src/elements/EFVideo.js} +10 -32
  44. package/dist/packages/elements/src/elements/EFWaveform.cjs +235 -0
  45. package/dist/packages/elements/src/elements/EFWaveform.d.ts +28 -0
  46. package/dist/{elements/src/elements/EFWaveform.mjs → packages/elements/src/elements/EFWaveform.js} +15 -16
  47. package/dist/packages/elements/src/elements/FetchMixin.cjs +28 -0
  48. package/dist/packages/elements/src/elements/FetchMixin.d.ts +8 -0
  49. package/dist/{elements/src/elements/FetchMixin.mjs → packages/elements/src/elements/FetchMixin.js} +5 -7
  50. package/dist/packages/elements/src/elements/TimegroupController.cjs +20 -0
  51. package/dist/packages/elements/src/elements/TimegroupController.d.ts +14 -0
  52. package/dist/packages/elements/src/elements/durationConverter.cjs +8 -0
  53. package/dist/packages/elements/src/elements/durationConverter.d.ts +4 -0
  54. package/dist/{elements/src/elements/durationConverter.mjs → packages/elements/src/elements/durationConverter.js} +1 -1
  55. package/dist/packages/elements/src/elements/parseTimeToMs.cjs +12 -0
  56. package/dist/packages/elements/src/elements/parseTimeToMs.d.ts +1 -0
  57. package/dist/packages/elements/src/elements/parseTimeToMs.js +12 -0
  58. package/dist/packages/elements/src/elements/util.cjs +11 -0
  59. package/dist/packages/elements/src/elements/util.d.ts +4 -0
  60. package/dist/{elements/src/elements/util.mjs → packages/elements/src/elements/util.js} +1 -1
  61. package/dist/packages/elements/src/gui/EFFilmstrip.cjs +675 -0
  62. package/dist/packages/elements/src/gui/EFFilmstrip.d.ts +138 -0
  63. package/dist/{elements/src/gui/EFFilmstrip.mjs → packages/elements/src/gui/EFFilmstrip.js} +57 -55
  64. package/dist/packages/elements/src/gui/EFWorkbench.cjs +199 -0
  65. package/dist/packages/elements/src/gui/EFWorkbench.d.ts +44 -0
  66. package/dist/{elements/src/gui/EFWorkbench.mjs → packages/elements/src/gui/EFWorkbench.js} +27 -49
  67. package/{src/gui/TWMixin.ts → dist/packages/elements/src/gui/TWMixin.cjs} +11 -10
  68. package/dist/packages/elements/src/gui/TWMixin.css.cjs +3 -0
  69. package/dist/packages/elements/src/gui/TWMixin.css.js +4 -0
  70. package/dist/packages/elements/src/gui/TWMixin.d.ts +3 -0
  71. package/dist/{elements/src/gui/TWMixin.mjs → packages/elements/src/gui/TWMixin.js} +4 -3
  72. package/dist/packages/elements/src/index.cjs +47 -0
  73. package/dist/packages/elements/src/index.d.ts +10 -0
  74. package/dist/packages/elements/src/index.js +23 -0
  75. package/dist/style.css +13 -4
  76. package/package.json +23 -4
  77. package/dist/elements/src/EF_FRAMEGEN.mjs +0 -130
  78. package/dist/elements/src/elements/parseTimeToMs.mjs +0 -13
  79. package/dist/elements/src/elements.mjs +0 -12
  80. package/dist/elements/src/gui/TWMixin.css.mjs +0 -4
  81. package/dist/util/awaitAnimationFrame.mjs +0 -11
  82. package/docker-compose.yaml +0 -17
  83. package/src/EF_FRAMEGEN.ts +0 -208
  84. package/src/EF_INTERACTIVE.ts +0 -2
  85. package/src/elements/CrossUpdateController.ts +0 -18
  86. package/src/elements/EFAudio.ts +0 -42
  87. package/src/elements/EFCaptions.ts +0 -202
  88. package/src/elements/EFImage.ts +0 -70
  89. package/src/elements/EFMedia.ts +0 -395
  90. package/src/elements/EFSourceMixin.ts +0 -57
  91. package/src/elements/EFTemporal.ts +0 -246
  92. package/src/elements/EFTimegroup.browsertest.ts +0 -360
  93. package/src/elements/EFVideo.ts +0 -114
  94. package/src/elements/EFWaveform.ts +0 -407
  95. package/src/elements/FetchMixin.ts +0 -18
  96. package/src/elements/TimegroupController.ts +0 -25
  97. package/src/elements/buildLitFixture.ts +0 -13
  98. package/src/elements/durationConverter.ts +0 -6
  99. package/src/elements/parseTimeToMs.ts +0 -10
  100. package/src/elements/util.ts +0 -24
  101. package/src/gui/EFFilmstrip.ts +0 -702
  102. package/src/gui/EFWorkbench.ts +0 -242
  103. package/src/gui/TWMixin.css +0 -3
  104. package/src/util.d.ts +0 -1
  105. /package/dist/{editor/msToTimeCode.mjs → lib/av/msToTimeCode.js} +0 -0
  106. /package/dist/{util/awaitMicrotask.mjs → lib/util/awaitMicrotask.js} +0 -0
  107. /package/dist/{elements/src/EF_INTERACTIVE.mjs → packages/elements/src/EF_INTERACTIVE.js} +0 -0
  108. /package/dist/{elements/src/elements/CrossUpdateController.mjs → packages/elements/src/elements/CrossUpdateController.js} +0 -0
  109. /package/dist/{elements/src/elements/TimegroupController.mjs → packages/elements/src/elements/TimegroupController.js} +0 -0
@@ -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.mjs";
5
- import { TimegroupController } from "./TimegroupController.mjs";
6
- import { EF_INTERACTIVE } from "../EF_INTERACTIVE.mjs";
7
- import { deepGetMediaElements } from "./EFMedia.mjs";
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
- if (!member.has(obj))
22
- throw TypeError("Cannot " + msg);
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.forEach((node) => {
127
+ for (const node of this.childTemporals) {
130
128
  duration += node.durationMs;
131
- });
129
+ }
132
130
  return duration;
133
- case "contain":
131
+ }
132
+ case "contain": {
134
133
  let maxDuration = 0;
135
- this.childTemporals.forEach((node) => {
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
- console.log("Updating animations to time", this.ownCurrentTimeMs);
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
- animations.forEach((animation) => {
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
- efElements.forEach((el) => {
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.forEach((node) => {
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;
@@ -0,0 +1,3 @@
1
+ export declare class EFTimeline extends HTMLElement {
2
+ get durationMs(): number;
3
+ }
@@ -1,12 +1,15 @@
1
1
  class EFTimeline extends HTMLElement {
2
2
  get durationMs() {
3
3
  let duration = 0;
4
- this.childNodes.forEach((node) => {
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 {};
@@ -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.mjs";
6
- import { TWMixin } from "../gui/TWMixin.mjs";
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
- if (!member.has(obj))
20
- throw TypeError("Cannot " + msg);
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
  }