@editframe/elements 0.17.6-beta.0 → 0.18.7-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.
Files changed (211) hide show
  1. package/dist/EF_FRAMEGEN.js +1 -1
  2. package/dist/elements/EFAudio.d.ts +21 -2
  3. package/dist/elements/EFAudio.js +41 -11
  4. package/dist/elements/EFImage.d.ts +1 -0
  5. package/dist/elements/EFImage.js +11 -3
  6. package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +18 -0
  7. package/dist/elements/EFMedia/AssetIdMediaEngine.js +41 -0
  8. package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
  9. package/dist/elements/EFMedia/AssetMediaEngine.d.ts +45 -0
  10. package/dist/elements/EFMedia/AssetMediaEngine.js +135 -0
  11. package/dist/elements/EFMedia/BaseMediaEngine.d.ts +55 -0
  12. package/dist/elements/EFMedia/BaseMediaEngine.js +115 -0
  13. package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +43 -0
  14. package/dist/elements/EFMedia/BufferedSeekingInput.js +179 -0
  15. package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
  16. package/dist/elements/EFMedia/JitMediaEngine.d.ts +31 -0
  17. package/dist/elements/EFMedia/JitMediaEngine.js +81 -0
  18. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +9 -0
  19. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +16 -0
  20. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +48 -0
  21. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +3 -0
  22. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +141 -0
  23. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +9 -0
  24. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +4 -0
  25. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +16 -0
  26. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +9 -0
  27. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +3 -0
  28. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +30 -0
  29. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
  30. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +7 -0
  31. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +32 -0
  32. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +4 -0
  33. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +28 -0
  34. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +4 -0
  35. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +17 -0
  36. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +3 -0
  37. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +107 -0
  38. package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +7 -0
  39. package/dist/elements/EFMedia/shared/AudioSpanUtils.js +54 -0
  40. package/dist/elements/EFMedia/shared/BufferUtils.d.ts +70 -0
  41. package/dist/elements/EFMedia/shared/BufferUtils.js +89 -0
  42. package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +23 -0
  43. package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +28 -0
  44. package/dist/elements/EFMedia/shared/PrecisionUtils.js +29 -0
  45. package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +19 -0
  46. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +18 -0
  47. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +60 -0
  48. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.d.ts +9 -0
  49. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +16 -0
  50. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +46 -0
  51. package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.d.ts +9 -0
  52. package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.d.ts +4 -0
  53. package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.js +16 -0
  54. package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.d.ts +9 -0
  55. package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.d.ts +3 -0
  56. package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.js +27 -0
  57. package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.d.ts +7 -0
  58. package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.js +34 -0
  59. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.d.ts +9 -0
  60. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.d.ts +4 -0
  61. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.js +28 -0
  62. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.d.ts +9 -0
  63. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.d.ts +4 -0
  64. package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.js +17 -0
  65. package/dist/elements/EFMedia.browsertest.d.ts +1 -0
  66. package/dist/elements/EFMedia.d.ts +63 -111
  67. package/dist/elements/EFMedia.js +117 -1113
  68. package/dist/elements/EFTemporal.d.ts +1 -1
  69. package/dist/elements/EFTemporal.js +1 -1
  70. package/dist/elements/EFTimegroup.d.ts +11 -0
  71. package/dist/elements/EFTimegroup.js +83 -13
  72. package/dist/elements/EFVideo.d.ts +54 -32
  73. package/dist/elements/EFVideo.js +100 -207
  74. package/dist/elements/EFWaveform.js +2 -2
  75. package/dist/elements/SampleBuffer.d.ts +14 -0
  76. package/dist/elements/SampleBuffer.js +52 -0
  77. package/dist/getRenderInfo.js +2 -1
  78. package/dist/gui/ContextMixin.js +3 -2
  79. package/dist/gui/EFFilmstrip.d.ts +3 -3
  80. package/dist/gui/EFFilmstrip.js +1 -1
  81. package/dist/gui/EFFitScale.d.ts +2 -2
  82. package/dist/gui/TWMixin.js +1 -1
  83. package/dist/style.css +1 -1
  84. package/dist/transcoding/cache/CacheManager.d.ts +73 -0
  85. package/dist/transcoding/cache/RequestDeduplicator.d.ts +29 -0
  86. package/dist/transcoding/cache/RequestDeduplicator.js +53 -0
  87. package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +1 -0
  88. package/dist/transcoding/types/index.d.ts +242 -0
  89. package/dist/transcoding/utils/MediaUtils.d.ts +9 -0
  90. package/dist/transcoding/utils/UrlGenerator.d.ts +26 -0
  91. package/dist/transcoding/utils/UrlGenerator.js +45 -0
  92. package/dist/transcoding/utils/constants.d.ts +27 -0
  93. package/dist/utils/LRUCache.d.ts +34 -0
  94. package/dist/utils/LRUCache.js +115 -0
  95. package/package.json +3 -3
  96. package/src/elements/EFAudio.browsertest.ts +189 -49
  97. package/src/elements/EFAudio.ts +59 -13
  98. package/src/elements/EFImage.browsertest.ts +42 -0
  99. package/src/elements/EFImage.ts +23 -3
  100. package/src/elements/EFMedia/AssetIdMediaEngine.test.ts +222 -0
  101. package/src/elements/EFMedia/AssetIdMediaEngine.ts +70 -0
  102. package/src/elements/EFMedia/AssetMediaEngine.browsertest.ts +100 -0
  103. package/src/elements/EFMedia/AssetMediaEngine.ts +255 -0
  104. package/src/elements/EFMedia/BaseMediaEngine.test.ts +164 -0
  105. package/src/elements/EFMedia/BaseMediaEngine.ts +219 -0
  106. package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +481 -0
  107. package/src/elements/EFMedia/BufferedSeekingInput.ts +324 -0
  108. package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +165 -0
  109. package/src/elements/EFMedia/JitMediaEngine.ts +166 -0
  110. package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.ts +554 -0
  111. package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.ts +81 -0
  112. package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +250 -0
  113. package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.ts +59 -0
  114. package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts +23 -0
  115. package/src/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.ts +55 -0
  116. package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +43 -0
  117. package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +199 -0
  118. package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +64 -0
  119. package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +45 -0
  120. package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +24 -0
  121. package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +183 -0
  122. package/src/elements/EFMedia/shared/AudioSpanUtils.ts +128 -0
  123. package/src/elements/EFMedia/shared/BufferUtils.ts +310 -0
  124. package/src/elements/EFMedia/shared/MediaTaskUtils.ts +44 -0
  125. package/src/elements/EFMedia/shared/PrecisionUtils.ts +46 -0
  126. package/src/elements/EFMedia/shared/RenditionHelpers.browsertest.ts +247 -0
  127. package/src/elements/EFMedia/shared/RenditionHelpers.ts +79 -0
  128. package/src/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.ts +128 -0
  129. package/src/elements/EFMedia/tasks/makeMediaEngineTask.test.ts +233 -0
  130. package/src/elements/EFMedia/tasks/makeMediaEngineTask.ts +89 -0
  131. package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.ts +555 -0
  132. package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.ts +79 -0
  133. package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.ts +59 -0
  134. package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.ts +23 -0
  135. package/src/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.ts +55 -0
  136. package/src/elements/EFMedia/videoTasks/makeVideoInputTask.ts +45 -0
  137. package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +68 -0
  138. package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.ts +57 -0
  139. package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.ts +43 -0
  140. package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.ts +56 -0
  141. package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.ts +24 -0
  142. package/src/elements/EFMedia.browsertest.ts +706 -273
  143. package/src/elements/EFMedia.ts +136 -1769
  144. package/src/elements/EFTemporal.ts +3 -4
  145. package/src/elements/EFTimegroup.browsertest.ts +6 -3
  146. package/src/elements/EFTimegroup.ts +147 -21
  147. package/src/elements/EFVideo.browsertest.ts +980 -169
  148. package/src/elements/EFVideo.ts +113 -458
  149. package/src/elements/EFWaveform.ts +1 -1
  150. package/src/elements/MediaController.ts +2 -12
  151. package/src/elements/SampleBuffer.ts +95 -0
  152. package/src/gui/ContextMixin.ts +3 -6
  153. package/src/transcoding/cache/CacheManager.ts +208 -0
  154. package/src/transcoding/cache/RequestDeduplicator.test.ts +170 -0
  155. package/src/transcoding/cache/RequestDeduplicator.ts +65 -0
  156. package/src/transcoding/types/index.ts +269 -0
  157. package/src/transcoding/utils/MediaUtils.ts +63 -0
  158. package/src/transcoding/utils/UrlGenerator.ts +68 -0
  159. package/src/transcoding/utils/constants.ts +36 -0
  160. package/src/utils/LRUCache.ts +153 -0
  161. package/test/EFVideo.framegen.browsertest.ts +39 -30
  162. package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/data.bin +0 -0
  163. package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/metadata.json +21 -0
  164. package/test/__cache__/GET__api_v1_transcode_audio_1_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__9ed2d25c675aa6bb6ff5b3ae23887c71/data.bin +0 -0
  165. package/test/__cache__/GET__api_v1_transcode_audio_1_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__9ed2d25c675aa6bb6ff5b3ae23887c71/metadata.json +22 -0
  166. package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/data.bin +0 -0
  167. package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/metadata.json +21 -0
  168. package/test/__cache__/GET__api_v1_transcode_audio_2_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__d5a3309a2bf756dd6e304807eb402f56/data.bin +0 -0
  169. package/test/__cache__/GET__api_v1_transcode_audio_2_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__d5a3309a2bf756dd6e304807eb402f56/metadata.json +22 -0
  170. package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/data.bin +0 -0
  171. package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/metadata.json +21 -0
  172. package/test/__cache__/GET__api_v1_transcode_audio_3_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__773254bb671e3466fca8677139fb239e/data.bin +0 -0
  173. package/test/__cache__/GET__api_v1_transcode_audio_3_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__773254bb671e3466fca8677139fb239e/metadata.json +22 -0
  174. package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/data.bin +0 -0
  175. package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/metadata.json +21 -0
  176. package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/data.bin +0 -0
  177. package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/metadata.json +21 -0
  178. package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/data.bin +0 -0
  179. package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/metadata.json +21 -0
  180. package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/data.bin +0 -0
  181. package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/metadata.json +21 -0
  182. package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/data.bin +0 -0
  183. package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/metadata.json +21 -0
  184. package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/data.bin +0 -0
  185. package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/metadata.json +21 -0
  186. package/test/__cache__/GET__api_v1_transcode_high_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a6fb05a22b18d850f7f2950bbcdbdeed/data.bin +0 -0
  187. package/test/__cache__/GET__api_v1_transcode_high_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a6fb05a22b18d850f7f2950bbcdbdeed/metadata.json +21 -0
  188. package/test/__cache__/GET__api_v1_transcode_high_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a50058c7c3602e90879fe3428ed891f4/data.bin +0 -0
  189. package/test/__cache__/GET__api_v1_transcode_high_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a50058c7c3602e90879fe3428ed891f4/metadata.json +21 -0
  190. package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/data.bin +0 -0
  191. package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/metadata.json +21 -0
  192. package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/data.bin +1 -0
  193. package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/metadata.json +19 -0
  194. package/test/createJitTestClips.ts +320 -188
  195. package/test/recordReplayProxyPlugin.js +352 -0
  196. package/test/useAssetMSW.ts +1 -1
  197. package/test/useMSW.ts +35 -22
  198. package/types.json +1 -1
  199. package/dist/JitTranscodingClient.d.ts +0 -167
  200. package/dist/JitTranscodingClient.js +0 -373
  201. package/dist/ScrubTrackManager.d.ts +0 -96
  202. package/dist/ScrubTrackManager.js +0 -216
  203. package/dist/elements/printTaskStatus.js +0 -11
  204. package/src/elements/__screenshots__/EFMedia.browsertest.ts/EFMedia-JIT-audio-playback-audioBufferTask-should-work-in-JIT-mode-without-URL-errors-1.png +0 -0
  205. package/test/EFVideo.frame-tasks.browsertest.ts +0 -524
  206. /package/dist/{DecoderResetFrequency.test.d.ts → elements/EFMedia/AssetIdMediaEngine.test.d.ts} +0 -0
  207. /package/dist/{DecoderResetRecovery.test.d.ts → elements/EFMedia/BaseMediaEngine.test.d.ts} +0 -0
  208. /package/dist/{JitTranscodingClient.browsertest.d.ts → elements/EFMedia/BufferedSeekingInput.browsertest.d.ts} +0 -0
  209. /package/dist/{JitTranscodingClient.test.d.ts → elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts} +0 -0
  210. /package/dist/{ScrubTrackIntegration.test.d.ts → elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts} +0 -0
  211. /package/dist/{SegmentSwitchLoading.test.d.ts → elements/EFMedia/tasks/makeMediaEngineTask.test.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
+ import { Task } from '@lit/task';
1
2
  import { LitElement, ReactiveController } from 'lit';
2
3
  import { EFTimegroup } from './EFTimegroup.js';
3
- import { Task } from '@lit/task';
4
4
  export declare const timegroupContext: {
5
5
  __context__: EFTimegroup;
6
6
  };
@@ -190,7 +190,7 @@ const EFTemporal = (superClass) => {
190
190
  }
191
191
  const previous = siblingTemorals?.[(ownIndex ?? 0) - 1];
192
192
  if (!previous) {
193
- console.log("Previous temporal element not found", {
193
+ console.error("Previous temporal element not found", {
194
194
  ownIndex,
195
195
  siblingTemorals
196
196
  });
@@ -6,6 +6,8 @@ export declare class EFTimegroup extends EFTimegroup_base {
6
6
  #private;
7
7
  static styles: import('lit').CSSResult;
8
8
  _timeGroupContext: this;
9
+ private isFrameUpdateInProgress;
10
+ private queuedTimeUpdate;
9
11
  mode: "fit" | "fixed" | "sequence" | "contain";
10
12
  overlapMs: number;
11
13
  fit: "none" | "contain" | "cover";
@@ -13,6 +15,10 @@ export declare class EFTimegroup extends EFTimegroup_base {
13
15
  get currentTime(): number;
14
16
  get currentTimeMs(): number;
15
17
  set currentTimeMs(ms: number);
18
+ /**
19
+ * Determines if this is a root timegroup (no parent timegroups)
20
+ */
21
+ get isRootTimegroup(): boolean;
16
22
  render(): import('lit-html').TemplateResult<1>;
17
23
  maybeLoadTimeFromLocalStorage(): number;
18
24
  connectedCallback(): void;
@@ -47,6 +53,11 @@ export declare class EFTimegroup extends EFTimegroup_base {
47
53
  wrapWithWorkbench(): void;
48
54
  get efElements(): Element[];
49
55
  renderAudio(fromMs: number, toMs: number): Promise<AudioBuffer>;
56
+ /**
57
+ * TEMPORARY TEST METHOD: Renders audio and immediately plays it back
58
+ * Usage: timegroup.testPlayAudio(0, 5000) // Play first 5 seconds
59
+ */
60
+ testPlayAudio(fromMs: number, toMs: number): Promise<void>;
50
61
  loadMd5Sums(): Promise<void>;
51
62
  frameTask: Task<readonly [number, number], void>;
52
63
  }
@@ -25,6 +25,8 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
25
25
  constructor(..._args) {
26
26
  super(..._args);
27
27
  this._timeGroupContext = this;
28
+ this.isFrameUpdateInProgress = false;
29
+ this.queuedTimeUpdate = null;
28
30
  this.mode = "contain";
29
31
  this.overlapMs = 0;
30
32
  this.fit = "none";
@@ -52,13 +54,15 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
52
54
  #currentTime = 0;
53
55
  #resizeObserver;
54
56
  set currentTime(time) {
55
- this.#currentTime = Math.max(0, Math.min(time, this.durationMs / 1e3));
56
- try {
57
- if (this.id) {
58
- if (this.isConnected) localStorage.setItem(this.storageKey, time.toString());
59
- }
60
- } catch (error) {
61
- log("Failed to save time to localStorage", error);
57
+ const newTime = Math.max(0, Math.min(time, this.durationMs / 1e3));
58
+ if (this.isRootTimegroup && this.isFrameUpdateInProgress) {
59
+ this.queuedTimeUpdate = newTime;
60
+ return;
61
+ }
62
+ if (this.isRootTimegroup) this.#executeTimeUpdate(newTime);
63
+ else {
64
+ this.#currentTime = newTime;
65
+ this.#saveTimeToLocalStorage(newTime);
62
66
  }
63
67
  }
64
68
  get currentTime() {
@@ -70,6 +74,42 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
70
74
  set currentTimeMs(ms) {
71
75
  this.currentTime = ms / 1e3;
72
76
  }
77
+ /**
78
+ * Determines if this is a root timegroup (no parent timegroups)
79
+ */
80
+ get isRootTimegroup() {
81
+ return this.closest("ef-timegroup") === this;
82
+ }
83
+ /**
84
+ * Executes time update with frame locking for root timegroups
85
+ */
86
+ async #executeTimeUpdate(time) {
87
+ this.isFrameUpdateInProgress = true;
88
+ this.#currentTime = time;
89
+ try {
90
+ this.#saveTimeToLocalStorage(time);
91
+ await this.waitForFrameTasks();
92
+ } catch (error) {
93
+ console.error("⚠️ [TIME_UPDATE_ERROR] Error during frame update:", error);
94
+ } finally {
95
+ this.isFrameUpdateInProgress = false;
96
+ if (this.queuedTimeUpdate !== null && this.queuedTimeUpdate !== time) {
97
+ const nextTime = this.queuedTimeUpdate;
98
+ this.queuedTimeUpdate = null;
99
+ setTimeout(() => this.#executeTimeUpdate(nextTime), 0);
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Saves time to localStorage (extracted for reuse)
105
+ */
106
+ #saveTimeToLocalStorage(time) {
107
+ try {
108
+ if (this.id && this.isConnected) localStorage.setItem(this.storageKey, time.toString());
109
+ } catch (error) {
110
+ log("Failed to save time to localStorage", error);
111
+ }
112
+ }
73
113
  render() {
74
114
  return html`<slot></slot> `;
75
115
  }
@@ -162,7 +202,7 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
162
202
  async waitForMediaDurations() {
163
203
  await this.updateComplete;
164
204
  const mediaElements = deepGetMediaElements(this);
165
- await Promise.all(mediaElements.map((m) => m.fragmentIndexTask.taskComplete));
205
+ await Promise.all(mediaElements.map((m) => m.mediaEngineTask.taskComplete));
166
206
  flushStartTimeMsCache();
167
207
  this.requestUpdate("currentTime");
168
208
  await this.updateComplete;
@@ -213,12 +253,17 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
213
253
  }
214
254
  async #addAudioToContext(audioContext, fromMs, toMs) {
215
255
  await this.waitForMediaDurations();
256
+ const abortController = new AbortController();
216
257
  await Promise.all(deepGetMediaElements(this).map(async (mediaElement) => {
258
+ if (mediaElement.mute) return;
217
259
  const mediaStartsBeforeEnd = mediaElement.startTimeMs <= toMs;
218
260
  const mediaEndsAfterStart = mediaElement.endTimeMs >= fromMs;
219
261
  const mediaOverlaps = mediaStartsBeforeEnd && mediaEndsAfterStart;
220
- if (!mediaOverlaps || mediaElement.defaultAudioTrackId === void 0) return;
221
- const audio = await mediaElement.fetchAudioSpanningTime(fromMs, toMs);
262
+ if (!mediaOverlaps) return;
263
+ const mediaLocalFromMs = Math.max(0, fromMs - mediaElement.startTimeMs);
264
+ const mediaLocalToMs = Math.min(mediaElement.endTimeMs - mediaElement.startTimeMs, toMs - mediaElement.startTimeMs);
265
+ if (mediaLocalFromMs >= mediaLocalToMs) return;
266
+ const audio = await mediaElement.fetchAudioSpanningTime(mediaLocalFromMs, mediaLocalToMs, abortController.signal);
222
267
  if (!audio) throw new Error("Failed to fetch audio");
223
268
  const bufferSource = audioContext.createBufferSource();
224
269
  bufferSource.buffer = await audioContext.decodeAudioData(await audio.blob.arrayBuffer());
@@ -226,13 +271,20 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
226
271
  const ctxStartMs = Math.max(0, mediaElement.startTimeMs - fromMs);
227
272
  const ctxEndMs = mediaElement.endTimeMs - fromMs;
228
273
  const ctxDurationMs = ctxEndMs - ctxStartMs;
229
- const offset = Math.max(0, fromMs - mediaElement.startTimeMs) - audio.startMs;
230
- bufferSource.start(ctxStartMs / 1e3, offset / 1e3, ctxDurationMs / 1e3);
274
+ const requestedOffsetInMedia = mediaLocalFromMs;
275
+ const actualOffsetInBuffer = requestedOffsetInMedia - audio.startMs;
276
+ const safeOffset = Math.max(0, actualOffsetInBuffer);
277
+ if (safeOffset !== actualOffsetInBuffer) {}
278
+ bufferSource.start(ctxStartMs / 1e3, safeOffset / 1e3, ctxDurationMs / 1e3);
231
279
  }));
232
280
  }
233
281
  async renderAudio(fromMs, toMs) {
234
282
  const durationMs = toMs - fromMs;
235
- const contextSize = Math.round(48e3 * durationMs / 1e3);
283
+ const duration = durationMs / 1e3;
284
+ const exactSamples = 48e3 * duration;
285
+ const aacFrames = exactSamples / 1024;
286
+ const alignedFrames = Math.round(aacFrames);
287
+ const contextSize = alignedFrames * 1024;
236
288
  if (contextSize <= 0) throw new Error(`Duration must be greater than 0 when rendering audio. ${contextSize}ms`);
237
289
  let audioContext;
238
290
  try {
@@ -244,6 +296,24 @@ let EFTimegroup = class EFTimegroup$1 extends EFTemporal(LitElement) {
244
296
  const renderedBuffer = await audioContext.startRendering();
245
297
  return renderedBuffer;
246
298
  }
299
+ /**
300
+ * TEMPORARY TEST METHOD: Renders audio and immediately plays it back
301
+ * Usage: timegroup.testPlayAudio(0, 5000) // Play first 5 seconds
302
+ */
303
+ async testPlayAudio(fromMs, toMs) {
304
+ const renderedBuffer = await this.renderAudio(fromMs, toMs);
305
+ const playbackContext = new AudioContext();
306
+ const bufferSource = playbackContext.createBufferSource();
307
+ bufferSource.buffer = renderedBuffer;
308
+ bufferSource.connect(playbackContext.destination);
309
+ bufferSource.start(0);
310
+ return new Promise((resolve) => {
311
+ bufferSource.onended = () => {
312
+ playbackContext.close();
313
+ resolve();
314
+ };
315
+ });
316
+ }
247
317
  async loadMd5Sums() {
248
318
  const efElements = this.efElements;
249
319
  const loaderTasks = [];
@@ -1,7 +1,5 @@
1
- import { VideoAsset } from '../../../assets/src/EncodedAsset.ts';
2
1
  import { Task } from '@lit/task';
3
2
  import { PropertyValueMap } from 'lit';
4
- import { CacheStats, ScrubTrackManager } from '../ScrubTrackManager.js';
5
3
  import { EFMedia } from './EFMedia.js';
6
4
  declare global {
7
5
  var EF_FRAMEGEN: import("../EF_FRAMEGEN.js").EFFramegen;
@@ -13,17 +11,30 @@ interface LoadingState {
13
11
  }
14
12
  declare const EFVideo_base: typeof EFMedia;
15
13
  export declare class EFVideo extends EFVideo_base {
16
- #private;
14
+ static get observedAttributes(): string[];
17
15
  static styles: import('lit').CSSResult[];
18
- canvasRef: import('lit-html/directives/ref.js').Ref<HTMLCanvasElement>;
16
+ canvasRef: import('lit-html/directives/ref').Ref<HTMLCanvasElement>;
19
17
  /**
20
- * Scrub track manager for fast timeline navigation
18
+ * Duration in milliseconds for video buffering ahead of current time
19
+ * @domAttribute "video-buffer-duration"
21
20
  */
22
- scrubTrackManager?: ScrubTrackManager;
21
+ videoBufferDurationMs: number;
23
22
  /**
24
- * Track last seek time for fast seeking detection
23
+ * Maximum number of concurrent video segment fetches for buffering
24
+ * @domAttribute "max-video-buffer-fetches"
25
25
  */
26
- private lastSeekTimeMs;
26
+ maxVideoBufferFetches: number;
27
+ /**
28
+ * Enable/disable video buffering system
29
+ * @domAttribute "enable-video-buffering"
30
+ */
31
+ enableVideoBuffering: boolean;
32
+ videoSegmentIdTask: Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number], number | undefined>;
33
+ videoInitSegmentFetchTask: Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined], ArrayBuffer>;
34
+ videoSegmentFetchTask: Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number | undefined], ArrayBuffer>;
35
+ videoInputTask: import('./EFMedia/shared/MediaTaskUtils.ts').InputTask;
36
+ videoSeekTask: Task<readonly [number, import('./EFMedia/BufferedSeekingInput.ts').BufferedSeekingInput | undefined], import('mediabunny').VideoSample | undefined>;
37
+ videoBufferTask: Task<readonly [number], import('./EFMedia/videoTasks/makeVideoBufferTask.ts').VideoBufferState>;
27
38
  /**
28
39
  * Delayed loading state manager for user feedback
29
40
  */
@@ -40,23 +51,7 @@ export declare class EFVideo extends EFVideo_base {
40
51
  render(): import('lit-html').TemplateResult<1>;
41
52
  get canvasElement(): HTMLCanvasElement | undefined;
42
53
  frameTask: Task<readonly [number], void>;
43
- get frameTaskStatus(): {
44
- desiredSeekTimeMs: number;
45
- fragmentIndexTask: string;
46
- seekTask: string;
47
- mediaSegmentsTask: string;
48
- assetSegmentLoader: string;
49
- assetSegmentKeysTask: string;
50
- assetInitSegmentsTask: string;
51
- videoAssetTask: string;
52
- paintTask: string;
53
- frameTask: string;
54
- };
55
54
  protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
56
- /**
57
- * Initialize scrub track manager if needed
58
- */
59
- private initializeScrubTrackManager;
60
55
  /**
61
56
  * Start a delayed loading operation for testing
62
57
  */
@@ -71,12 +66,7 @@ export declare class EFVideo extends EFVideo_base {
71
66
  * Set loading state for user feedback
72
67
  */
73
68
  private setLoadingState;
74
- videoAssetTask: Task<readonly ["asset" | "jit-transcode", Record<string, File> | null | undefined], VideoAsset | undefined>;
75
- paintTask: Task<readonly [number], number | undefined>;
76
- /**
77
- * Render normal video using existing logic
78
- */
79
- private renderNormalVideo;
69
+ paintTask: Task<readonly [number], void>;
80
70
  /**
81
71
  * Display a video frame on the canvas
82
72
  */
@@ -90,9 +80,41 @@ export declare class EFVideo extends EFVideo_base {
90
80
  */
91
81
  private isFrameRenderingActive;
92
82
  /**
93
- * Get scrub track performance statistics
83
+ * Effective mode - always returns "asset" for EFVideo
84
+ */
85
+ get effectiveMode(): string;
86
+ /**
87
+ * Legacy getter for asset index loader (maps to mediaEngine task)
88
+ */
89
+ get assetIndexLoader(): Task<readonly [string, string | null], import('../transcoding/types/index.ts').MediaEngine>;
90
+ /**
91
+ * Legacy getter for fragment index task (maps to videoSegmentIdTask)
92
+ */
93
+ get fragmentIndexTask(): Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number], number | undefined>;
94
+ /**
95
+ * Legacy getter for seek task (maps to videoSeekTask)
96
+ */
97
+ get seekTask(): Task<readonly [number, import('./EFMedia/BufferedSeekingInput.ts').BufferedSeekingInput | undefined], import('mediabunny').VideoSample | undefined>;
98
+ /**
99
+ * Legacy getter for media segments task (maps to videoSegmentFetchTask)
100
+ */
101
+ get mediaSegmentsTask(): Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number | undefined], ArrayBuffer>;
102
+ /**
103
+ * Legacy getter for asset segment keys task (maps to videoSegmentIdTask)
104
+ */
105
+ get assetSegmentKeysTask(): Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number], number | undefined>;
106
+ /**
107
+ * Legacy getter for asset init segments task (maps to videoInitSegmentFetchTask)
108
+ */
109
+ get assetInitSegmentsTask(): Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined], ArrayBuffer>;
110
+ /**
111
+ * Legacy getter for asset segment loader (maps to videoSegmentFetchTask)
112
+ */
113
+ get assetSegmentLoader(): Task<readonly [import('../transcoding/types/index.ts').MediaEngine | undefined, number | undefined], ArrayBuffer>;
114
+ /**
115
+ * Legacy getter for video asset task (maps to videoBufferTask)
94
116
  */
95
- getScrubTrackStats(): CacheStats | null;
117
+ get videoAssetTask(): Task<readonly [number], import('./EFMedia/videoTasks/makeVideoBufferTask.ts').VideoBufferState>;
96
118
  /**
97
119
  * Clean up resources when component is disconnected
98
120
  */