@editframe/elements 0.18.20-beta.0 → 0.18.22-beta.0
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/elements/EFAudio.d.ts +1 -12
- package/dist/elements/EFAudio.js +3 -18
- package/dist/elements/EFMedia/AssetMediaEngine.d.ts +1 -1
- package/dist/elements/EFMedia/AssetMediaEngine.js +3 -3
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +15 -9
- package/dist/elements/EFMedia/BufferedSeekingInput.js +76 -78
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +12 -10
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +2 -18
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +12 -10
- package/dist/elements/EFTemporal.d.ts +0 -1
- package/dist/elements/EFTemporal.js +4 -8
- package/dist/elements/EFTimegroup.d.ts +4 -4
- package/dist/elements/EFTimegroup.js +52 -60
- package/dist/elements/EFVideo.d.ts +1 -32
- package/dist/elements/EFVideo.js +13 -51
- package/dist/elements/SampleBuffer.js +1 -1
- package/dist/gui/ContextMixin.browsertest.d.ts +1 -1
- package/dist/gui/ContextMixin.js +1 -1
- package/package.json +2 -2
- package/src/elements/EFAudio.browsertest.ts +0 -3
- package/src/elements/EFAudio.ts +3 -22
- package/src/elements/EFMedia/AssetMediaEngine.browsertest.ts +39 -1
- package/src/elements/EFMedia/AssetMediaEngine.ts +5 -4
- package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +90 -185
- package/src/elements/EFMedia/BufferedSeekingInput.ts +119 -130
- package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +21 -21
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +10 -5
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +33 -34
- package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +22 -20
- package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +0 -3
- package/src/elements/EFMedia.browsertest.ts +72 -60
- package/src/elements/EFTemporal.ts +5 -15
- package/src/elements/EFTimegroup.browsertest.ts +9 -4
- package/src/elements/EFTimegroup.ts +79 -95
- package/src/elements/EFVideo.browsertest.ts +172 -160
- package/src/elements/EFVideo.ts +17 -73
- package/src/elements/SampleBuffer.ts +1 -2
- package/src/gui/ContextMixin.browsertest.ts +5 -2
- package/src/gui/ContextMixin.ts +7 -0
- package/test/EFVideo.framegen.browsertest.ts +0 -54
- package/types.json +1 -1
|
@@ -53,7 +53,6 @@ export class SampleBuffer {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
find(desiredSeekTimeMs: number): MediaSample | undefined {
|
|
56
|
-
// Take snapshot to avoid concurrent modification during iteration
|
|
57
56
|
const currentBuffer = [...this.buffer];
|
|
58
57
|
|
|
59
58
|
if (currentBuffer.length === 0) return undefined;
|
|
@@ -70,7 +69,7 @@ export class SampleBuffer {
|
|
|
70
69
|
const sampleEndMs = roundToMilliseconds(sampleStartMs + sampleDurationMs);
|
|
71
70
|
|
|
72
71
|
// Check if the desired time falls within this sample's time span [start, end], inclusive of end
|
|
73
|
-
if (targetTimeMs >= sampleStartMs && targetTimeMs
|
|
72
|
+
if (targetTimeMs >= sampleStartMs && targetTimeMs < sampleEndMs) {
|
|
74
73
|
return sample;
|
|
75
74
|
}
|
|
76
75
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement } from "lit";
|
|
1
|
+
import { html, LitElement } from "lit";
|
|
2
2
|
import { customElement } from "lit/decorators/custom-element.js";
|
|
3
3
|
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@ class TestContext extends ContextMixin(LitElement) {}
|
|
|
13
13
|
@customElement("test-context-reactivity")
|
|
14
14
|
class TestContextElement extends ContextMixin(LitElement) {
|
|
15
15
|
render() {
|
|
16
|
-
return
|
|
16
|
+
return html`<slot></slot>`;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -631,6 +631,9 @@ describe("ContextMixin", () => {
|
|
|
631
631
|
await timegroup.updateComplete;
|
|
632
632
|
await newChild.updateComplete;
|
|
633
633
|
|
|
634
|
+
// Wait for next animation frame to ensure temporal cache is cleared
|
|
635
|
+
await new Promise((resolve) => requestAnimationFrame(resolve));
|
|
636
|
+
|
|
634
637
|
// Duration should now be 15s (the max of all children)
|
|
635
638
|
expect(element.targetTimegroup?.durationMs).toBe(15000);
|
|
636
639
|
|
package/src/gui/ContextMixin.ts
CHANGED
|
@@ -250,6 +250,13 @@ export function ContextMixin<T extends Constructor<LitElement>>(superClass: T) {
|
|
|
250
250
|
if (newTimegroup !== this.targetTimegroup) {
|
|
251
251
|
this.targetTimegroup = newTimegroup;
|
|
252
252
|
shouldUpdate = true;
|
|
253
|
+
} else if (
|
|
254
|
+
mutation.target instanceof Element &&
|
|
255
|
+
(mutation.target.tagName === "EF-TIMEGROUP" ||
|
|
256
|
+
mutation.target.closest("ef-timegroup"))
|
|
257
|
+
) {
|
|
258
|
+
// Handle childList changes within existing timegroups
|
|
259
|
+
shouldUpdate = true;
|
|
253
260
|
}
|
|
254
261
|
} else if (mutation.type === "attributes") {
|
|
255
262
|
// Watch for attribute changes that might affect duration
|
|
@@ -50,40 +50,10 @@ describe("EFVideo Frame Generation", () => {
|
|
|
50
50
|
expect(video.durationMs).toBe(0);
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
test("effective mode is 'asset' if mode is not specified", async ({
|
|
54
|
-
expect,
|
|
55
|
-
}) => {
|
|
56
|
-
expect(video.effectiveMode).toBe("asset");
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
test("assetIndexLoader is pending", async ({ expect }) => {
|
|
60
|
-
expect(video.assetIndexLoader.status).toEqual(TaskStatus.PENDING);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
test("assetSegmentKeysTask is pending", ({ expect }) => {
|
|
64
|
-
expect(video.assetSegmentKeysTask.status).toEqual(TaskStatus.PENDING);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test("assetInitSegmentsTask is pending", ({ expect }) => {
|
|
68
|
-
expect(video.assetInitSegmentsTask.status).toEqual(TaskStatus.PENDING);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
test("assetSegmentLoader is pending", ({ expect }) => {
|
|
72
|
-
expect(video.assetSegmentLoader.status).toEqual(TaskStatus.PENDING);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
53
|
test("fragmentIndexTask is pending", ({ expect }) => {
|
|
76
54
|
expect(video.fragmentIndexTask.status).toEqual(TaskStatus.PENDING);
|
|
77
55
|
});
|
|
78
56
|
|
|
79
|
-
test("mediaSegmentsTask is pending", ({ expect }) => {
|
|
80
|
-
expect(video.mediaSegmentsTask.status).toEqual(TaskStatus.PENDING);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test("seekTask is pending", ({ expect }) => {
|
|
84
|
-
expect(video.seekTask.status).toEqual(TaskStatus.PENDING);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
57
|
// Note: Timing-dependent tests disabled due to seek range issues
|
|
88
58
|
// The test asset data starts at 80ms but component initializes at 0ms
|
|
89
59
|
// These tests validate task completion after data loading but fail on seek timing
|
|
@@ -96,32 +66,8 @@ describe("EFVideo Frame Generation", () => {
|
|
|
96
66
|
expect(video.durationMs).toBeCloseTo(10_085, 0);
|
|
97
67
|
});
|
|
98
68
|
|
|
99
|
-
test("assetIndexLoader is fulfilled", ({ expect }) => {
|
|
100
|
-
expect(video.assetIndexLoader.status).toEqual(TaskStatus.COMPLETE);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
test("assetSegmentKeysTask is fulfilled", ({ expect }) => {
|
|
104
|
-
expect(video.assetSegmentKeysTask.status).toEqual(TaskStatus.COMPLETE);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
test("assetInitSegmentsTask is fulfilled", ({ expect }) => {
|
|
108
|
-
expect(video.assetInitSegmentsTask.status).toEqual(TaskStatus.COMPLETE);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
test("assetSegmentLoader is fulfilled", ({ expect }) => {
|
|
112
|
-
expect(video.assetSegmentLoader.status).toEqual(TaskStatus.COMPLETE);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
69
|
test("fragmentIndexTask is fulfilled", ({ expect }) => {
|
|
116
70
|
expect(video.fragmentIndexTask.status).toEqual(TaskStatus.COMPLETE);
|
|
117
71
|
});
|
|
118
|
-
|
|
119
|
-
test("mediaSegmentsTask is fulfilled", ({ expect }) => {
|
|
120
|
-
expect(video.mediaSegmentsTask.status).toEqual(TaskStatus.COMPLETE);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
test("seekTask is fulfilled", ({ expect }) => {
|
|
124
|
-
expect(video.seekTask.status).toEqual(TaskStatus.COMPLETE);
|
|
125
|
-
});
|
|
126
72
|
});
|
|
127
73
|
});
|