@meframe/core 0.0.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 (352) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +22 -0
  3. package/README.md +396 -0
  4. package/dist/Meframe.d.ts +82 -0
  5. package/dist/Meframe.d.ts.map +1 -0
  6. package/dist/Meframe.js +290 -0
  7. package/dist/Meframe.js.map +1 -0
  8. package/dist/_virtual/mp4box.all.js +5 -0
  9. package/dist/_virtual/mp4box.all.js.map +1 -0
  10. package/dist/cache/BatchWriter.d.ts +25 -0
  11. package/dist/cache/BatchWriter.d.ts.map +1 -0
  12. package/dist/cache/CacheManager.d.ts +115 -0
  13. package/dist/cache/CacheManager.d.ts.map +1 -0
  14. package/dist/cache/CacheManager.js +388 -0
  15. package/dist/cache/CacheManager.js.map +1 -0
  16. package/dist/cache/CacheStatsDecorator.d.ts +27 -0
  17. package/dist/cache/CacheStatsDecorator.d.ts.map +1 -0
  18. package/dist/cache/L2Cache.d.ts +39 -0
  19. package/dist/cache/L2Cache.d.ts.map +1 -0
  20. package/dist/cache/L2Cache.js +282 -0
  21. package/dist/cache/L2Cache.js.map +1 -0
  22. package/dist/cache/index.d.ts +7 -0
  23. package/dist/cache/index.d.ts.map +1 -0
  24. package/dist/cache/l1/AudioL1Cache.d.ts +30 -0
  25. package/dist/cache/l1/AudioL1Cache.d.ts.map +1 -0
  26. package/dist/cache/l1/AudioL1Cache.js +306 -0
  27. package/dist/cache/l1/AudioL1Cache.js.map +1 -0
  28. package/dist/cache/l1/MixedAudioL1Cache.d.ts +13 -0
  29. package/dist/cache/l1/MixedAudioL1Cache.d.ts.map +1 -0
  30. package/dist/cache/l1/MixedAudioL1Cache.js +52 -0
  31. package/dist/cache/l1/MixedAudioL1Cache.js.map +1 -0
  32. package/dist/cache/l1/VideoL1Cache.d.ts +69 -0
  33. package/dist/cache/l1/VideoL1Cache.d.ts.map +1 -0
  34. package/dist/cache/l1/VideoL1Cache.js +318 -0
  35. package/dist/cache/l1/VideoL1Cache.js.map +1 -0
  36. package/dist/cache/l1/gop-utils.d.ts +10 -0
  37. package/dist/cache/l1/gop-utils.d.ts.map +1 -0
  38. package/dist/cache/l1/gop-utils.js +78 -0
  39. package/dist/cache/l1/gop-utils.js.map +1 -0
  40. package/dist/cache/l1/index.d.ts +4 -0
  41. package/dist/cache/l1/index.d.ts.map +1 -0
  42. package/dist/cache/l1/types.d.ts +17 -0
  43. package/dist/cache/l1/types.d.ts.map +1 -0
  44. package/dist/cache/types.d.ts +93 -0
  45. package/dist/cache/types.d.ts.map +1 -0
  46. package/dist/config/ConfigLoader.d.ts +69 -0
  47. package/dist/config/ConfigLoader.d.ts.map +1 -0
  48. package/dist/config/ConfigLoader.js +133 -0
  49. package/dist/config/ConfigLoader.js.map +1 -0
  50. package/dist/config/defaults.d.ts +125 -0
  51. package/dist/config/defaults.d.ts.map +1 -0
  52. package/dist/config/defaults.js +191 -0
  53. package/dist/config/defaults.js.map +1 -0
  54. package/dist/config/index.d.ts +6 -0
  55. package/dist/config/index.d.ts.map +1 -0
  56. package/dist/config/presets.d.ts +32 -0
  57. package/dist/config/presets.d.ts.map +1 -0
  58. package/dist/config/presets.js +11 -0
  59. package/dist/config/presets.js.map +1 -0
  60. package/dist/config/types.d.ts +199 -0
  61. package/dist/config/types.d.ts.map +1 -0
  62. package/dist/config/validation.d.ts +19 -0
  63. package/dist/config/validation.d.ts.map +1 -0
  64. package/dist/config/validation.js +232 -0
  65. package/dist/config/validation.js.map +1 -0
  66. package/dist/controllers/PlaybackController.d.ts +55 -0
  67. package/dist/controllers/PlaybackController.d.ts.map +1 -0
  68. package/dist/controllers/PlaybackController.js +369 -0
  69. package/dist/controllers/PlaybackController.js.map +1 -0
  70. package/dist/controllers/PreRenderService.d.ts +34 -0
  71. package/dist/controllers/PreRenderService.d.ts.map +1 -0
  72. package/dist/controllers/PreRenderService.js +83 -0
  73. package/dist/controllers/PreRenderService.js.map +1 -0
  74. package/dist/controllers/PreRenderTaskQueue.d.ts +21 -0
  75. package/dist/controllers/PreRenderTaskQueue.d.ts.map +1 -0
  76. package/dist/controllers/PreviewHandle.d.ts +23 -0
  77. package/dist/controllers/PreviewHandle.d.ts.map +1 -0
  78. package/dist/controllers/PreviewHandle.js +39 -0
  79. package/dist/controllers/PreviewHandle.js.map +1 -0
  80. package/dist/controllers/index.d.ts +8 -0
  81. package/dist/controllers/index.d.ts.map +1 -0
  82. package/dist/controllers/types.d.ts +102 -0
  83. package/dist/controllers/types.d.ts.map +1 -0
  84. package/dist/event/EventBus.d.ts +42 -0
  85. package/dist/event/EventBus.d.ts.map +1 -0
  86. package/dist/event/EventBus.js +94 -0
  87. package/dist/event/EventBus.js.map +1 -0
  88. package/dist/event/events.d.ts +371 -0
  89. package/dist/event/events.d.ts.map +1 -0
  90. package/dist/event/events.js +71 -0
  91. package/dist/event/events.js.map +1 -0
  92. package/dist/event/index.d.ts +4 -0
  93. package/dist/event/index.d.ts.map +1 -0
  94. package/dist/index.d.ts +14 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +15 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/model/CompositionModel.d.ts +48 -0
  99. package/dist/model/CompositionModel.d.ts.map +1 -0
  100. package/dist/model/CompositionModel.js +197 -0
  101. package/dist/model/CompositionModel.js.map +1 -0
  102. package/dist/model/RcFrame.d.ts +34 -0
  103. package/dist/model/RcFrame.d.ts.map +1 -0
  104. package/dist/model/RcFrame.js +97 -0
  105. package/dist/model/RcFrame.js.map +1 -0
  106. package/dist/model/dirty-range.d.ts +5 -0
  107. package/dist/model/dirty-range.d.ts.map +1 -0
  108. package/dist/model/dirty-range.js +220 -0
  109. package/dist/model/dirty-range.js.map +1 -0
  110. package/dist/model/index.d.ts +7 -0
  111. package/dist/model/index.d.ts.map +1 -0
  112. package/dist/model/patch.d.ts +5 -0
  113. package/dist/model/patch.d.ts.map +1 -0
  114. package/dist/model/patch.js +250 -0
  115. package/dist/model/patch.js.map +1 -0
  116. package/dist/model/types.d.ts +135 -0
  117. package/dist/model/types.d.ts.map +1 -0
  118. package/dist/model/types.js +5 -0
  119. package/dist/model/types.js.map +1 -0
  120. package/dist/model/validation.d.ts +15 -0
  121. package/dist/model/validation.d.ts.map +1 -0
  122. package/dist/model/validation.js +74 -0
  123. package/dist/model/validation.js.map +1 -0
  124. package/dist/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js +7046 -0
  125. package/dist/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js.map +1 -0
  126. package/dist/orchestrator/ClipSessionManager.d.ts +75 -0
  127. package/dist/orchestrator/ClipSessionManager.d.ts.map +1 -0
  128. package/dist/orchestrator/ClipSessionManager.js +160 -0
  129. package/dist/orchestrator/ClipSessionManager.js.map +1 -0
  130. package/dist/orchestrator/CompositionPlanner.d.ts +55 -0
  131. package/dist/orchestrator/CompositionPlanner.d.ts.map +1 -0
  132. package/dist/orchestrator/CompositionPlanner.js +411 -0
  133. package/dist/orchestrator/CompositionPlanner.js.map +1 -0
  134. package/dist/orchestrator/Orchestrator.d.ts +59 -0
  135. package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
  136. package/dist/orchestrator/Orchestrator.js +390 -0
  137. package/dist/orchestrator/Orchestrator.js.map +1 -0
  138. package/dist/orchestrator/VideoClipSession.d.ts +64 -0
  139. package/dist/orchestrator/VideoClipSession.d.ts.map +1 -0
  140. package/dist/orchestrator/VideoClipSession.js +309 -0
  141. package/dist/orchestrator/VideoClipSession.js.map +1 -0
  142. package/dist/orchestrator/index.d.ts +5 -0
  143. package/dist/orchestrator/index.d.ts.map +1 -0
  144. package/dist/orchestrator/types.d.ts +64 -0
  145. package/dist/orchestrator/types.d.ts.map +1 -0
  146. package/dist/plugins/BackpressureMonitor.d.ts +33 -0
  147. package/dist/plugins/BackpressureMonitor.d.ts.map +1 -0
  148. package/dist/plugins/BackpressureMonitor.js +62 -0
  149. package/dist/plugins/BackpressureMonitor.js.map +1 -0
  150. package/dist/plugins/PluginManager.d.ts +37 -0
  151. package/dist/plugins/PluginManager.d.ts.map +1 -0
  152. package/dist/plugins/PluginManager.js +66 -0
  153. package/dist/plugins/PluginManager.js.map +1 -0
  154. package/dist/plugins/types.d.ts +60 -0
  155. package/dist/plugins/types.d.ts.map +1 -0
  156. package/dist/stages/compose/AudioDucker.d.ts +59 -0
  157. package/dist/stages/compose/AudioDucker.d.ts.map +1 -0
  158. package/dist/stages/compose/AudioDucker.js +161 -0
  159. package/dist/stages/compose/AudioDucker.js.map +1 -0
  160. package/dist/stages/compose/AudioMixer.d.ts +29 -0
  161. package/dist/stages/compose/AudioMixer.d.ts.map +1 -0
  162. package/dist/stages/compose/AudioMixer.js +373 -0
  163. package/dist/stages/compose/AudioMixer.js.map +1 -0
  164. package/dist/stages/compose/FilterProcessor.d.ts +41 -0
  165. package/dist/stages/compose/FilterProcessor.d.ts.map +1 -0
  166. package/dist/stages/compose/FilterProcessor.js +226 -0
  167. package/dist/stages/compose/FilterProcessor.js.map +1 -0
  168. package/dist/stages/compose/GlobalAudioSession.d.ts +38 -0
  169. package/dist/stages/compose/GlobalAudioSession.d.ts.map +1 -0
  170. package/dist/stages/compose/GlobalAudioSession.js +122 -0
  171. package/dist/stages/compose/GlobalAudioSession.js.map +1 -0
  172. package/dist/stages/compose/LayerRenderer.d.ts +30 -0
  173. package/dist/stages/compose/LayerRenderer.d.ts.map +1 -0
  174. package/dist/stages/compose/LayerRenderer.js +215 -0
  175. package/dist/stages/compose/LayerRenderer.js.map +1 -0
  176. package/dist/stages/compose/OfflineAudioMixer.d.ts +14 -0
  177. package/dist/stages/compose/OfflineAudioMixer.d.ts.map +1 -0
  178. package/dist/stages/compose/OfflineAudioMixer.js +68 -0
  179. package/dist/stages/compose/OfflineAudioMixer.js.map +1 -0
  180. package/dist/stages/compose/TransitionProcessor.d.ts +30 -0
  181. package/dist/stages/compose/TransitionProcessor.d.ts.map +1 -0
  182. package/dist/stages/compose/TransitionProcessor.js +189 -0
  183. package/dist/stages/compose/TransitionProcessor.js.map +1 -0
  184. package/dist/stages/compose/VideoComposer.d.ts +30 -0
  185. package/dist/stages/compose/VideoComposer.d.ts.map +1 -0
  186. package/dist/stages/compose/VideoComposer.js +186 -0
  187. package/dist/stages/compose/VideoComposer.js.map +1 -0
  188. package/dist/stages/compose/audio-compose.worker.d.ts +79 -0
  189. package/dist/stages/compose/audio-compose.worker.d.ts.map +1 -0
  190. package/dist/stages/compose/audio-compose.worker.js +541 -0
  191. package/dist/stages/compose/audio-compose.worker.js.map +1 -0
  192. package/dist/stages/compose/instructions.d.ts +95 -0
  193. package/dist/stages/compose/instructions.d.ts.map +1 -0
  194. package/dist/stages/compose/types.d.ts +245 -0
  195. package/dist/stages/compose/types.d.ts.map +1 -0
  196. package/dist/stages/compose/video-compose.worker.d.ts +60 -0
  197. package/dist/stages/compose/video-compose.worker.d.ts.map +1 -0
  198. package/dist/stages/compose/video-compose.worker.js +369 -0
  199. package/dist/stages/compose/video-compose.worker.js.map +1 -0
  200. package/dist/stages/decode/AudioChunkDecoder.d.ts +41 -0
  201. package/dist/stages/decode/AudioChunkDecoder.d.ts.map +1 -0
  202. package/dist/stages/decode/AudioChunkDecoder.js +83 -0
  203. package/dist/stages/decode/AudioChunkDecoder.js.map +1 -0
  204. package/dist/stages/decode/BaseDecoder.d.ts +35 -0
  205. package/dist/stages/decode/BaseDecoder.d.ts.map +1 -0
  206. package/dist/stages/decode/BaseDecoder.js +130 -0
  207. package/dist/stages/decode/BaseDecoder.js.map +1 -0
  208. package/dist/stages/decode/VideoChunkDecoder.d.ts +54 -0
  209. package/dist/stages/decode/VideoChunkDecoder.d.ts.map +1 -0
  210. package/dist/stages/decode/VideoChunkDecoder.js +209 -0
  211. package/dist/stages/decode/VideoChunkDecoder.js.map +1 -0
  212. package/dist/stages/decode/decode.worker.d.ts +70 -0
  213. package/dist/stages/decode/decode.worker.d.ts.map +1 -0
  214. package/dist/stages/decode/decode.worker.js +436 -0
  215. package/dist/stages/decode/decode.worker.js.map +1 -0
  216. package/dist/stages/decode/index.d.ts +5 -0
  217. package/dist/stages/decode/index.d.ts.map +1 -0
  218. package/dist/stages/decode/types.d.ts +108 -0
  219. package/dist/stages/decode/types.d.ts.map +1 -0
  220. package/dist/stages/demux/MP3FrameParser.d.ts +33 -0
  221. package/dist/stages/demux/MP3FrameParser.d.ts.map +1 -0
  222. package/dist/stages/demux/MP3FrameParser.js +186 -0
  223. package/dist/stages/demux/MP3FrameParser.js.map +1 -0
  224. package/dist/stages/demux/MP4Demuxer.d.ts +45 -0
  225. package/dist/stages/demux/MP4Demuxer.d.ts.map +1 -0
  226. package/dist/stages/demux/MP4Demuxer.js +227 -0
  227. package/dist/stages/demux/MP4Demuxer.js.map +1 -0
  228. package/dist/stages/demux/aac-esds-extractor.d.ts +7 -0
  229. package/dist/stages/demux/aac-esds-extractor.d.ts.map +1 -0
  230. package/dist/stages/demux/audio-demux.worker.d.ts +51 -0
  231. package/dist/stages/demux/audio-demux.worker.d.ts.map +1 -0
  232. package/dist/stages/demux/audio-demux.worker.js +312 -0
  233. package/dist/stages/demux/audio-demux.worker.js.map +1 -0
  234. package/dist/stages/demux/types.d.ts +77 -0
  235. package/dist/stages/demux/types.d.ts.map +1 -0
  236. package/dist/stages/demux/video-demux.worker.d.ts +48 -0
  237. package/dist/stages/demux/video-demux.worker.d.ts.map +1 -0
  238. package/dist/stages/demux/video-demux.worker.js +173 -0
  239. package/dist/stages/demux/video-demux.worker.js.map +1 -0
  240. package/dist/stages/encode/AudioChunkEncoder.d.ts +21 -0
  241. package/dist/stages/encode/AudioChunkEncoder.d.ts.map +1 -0
  242. package/dist/stages/encode/AudioChunkEncoder.js +37 -0
  243. package/dist/stages/encode/AudioChunkEncoder.js.map +1 -0
  244. package/dist/stages/encode/BaseEncoder.d.ts +44 -0
  245. package/dist/stages/encode/BaseEncoder.d.ts.map +1 -0
  246. package/dist/stages/encode/BaseEncoder.js +164 -0
  247. package/dist/stages/encode/BaseEncoder.js.map +1 -0
  248. package/dist/stages/encode/EncoderPool.d.ts +28 -0
  249. package/dist/stages/encode/EncoderPool.d.ts.map +1 -0
  250. package/dist/stages/encode/VideoChunkEncoder.d.ts +26 -0
  251. package/dist/stages/encode/VideoChunkEncoder.d.ts.map +1 -0
  252. package/dist/stages/encode/VideoChunkEncoder.js +50 -0
  253. package/dist/stages/encode/VideoChunkEncoder.js.map +1 -0
  254. package/dist/stages/encode/encode.worker.d.ts +3 -0
  255. package/dist/stages/encode/encode.worker.d.ts.map +1 -0
  256. package/dist/stages/encode/encode.worker.js +318 -0
  257. package/dist/stages/encode/encode.worker.js.map +1 -0
  258. package/dist/stages/encode/index.d.ts +6 -0
  259. package/dist/stages/encode/index.d.ts.map +1 -0
  260. package/dist/stages/encode/types.d.ts +127 -0
  261. package/dist/stages/encode/types.d.ts.map +1 -0
  262. package/dist/stages/load/EventHandlers.d.ts +35 -0
  263. package/dist/stages/load/EventHandlers.d.ts.map +1 -0
  264. package/dist/stages/load/EventHandlers.js +65 -0
  265. package/dist/stages/load/EventHandlers.js.map +1 -0
  266. package/dist/stages/load/ResourceLoader.d.ts +36 -0
  267. package/dist/stages/load/ResourceLoader.d.ts.map +1 -0
  268. package/dist/stages/load/ResourceLoader.js +184 -0
  269. package/dist/stages/load/ResourceLoader.js.map +1 -0
  270. package/dist/stages/load/StreamFactory.d.ts +42 -0
  271. package/dist/stages/load/StreamFactory.d.ts.map +1 -0
  272. package/dist/stages/load/StreamFactory.js +201 -0
  273. package/dist/stages/load/StreamFactory.js.map +1 -0
  274. package/dist/stages/load/TaskManager.d.ts +50 -0
  275. package/dist/stages/load/TaskManager.d.ts.map +1 -0
  276. package/dist/stages/load/TaskManager.js +103 -0
  277. package/dist/stages/load/TaskManager.js.map +1 -0
  278. package/dist/stages/load/WindowByteRangeResolver.d.ts +47 -0
  279. package/dist/stages/load/WindowByteRangeResolver.d.ts.map +1 -0
  280. package/dist/stages/load/WindowByteRangeResolver.js +270 -0
  281. package/dist/stages/load/WindowByteRangeResolver.js.map +1 -0
  282. package/dist/stages/load/index.d.ts +11 -0
  283. package/dist/stages/load/index.d.ts.map +1 -0
  284. package/dist/stages/load/types.d.ts +177 -0
  285. package/dist/stages/load/types.d.ts.map +1 -0
  286. package/dist/stages/mux/MP4Muxer.d.ts +44 -0
  287. package/dist/stages/mux/MP4Muxer.d.ts.map +1 -0
  288. package/dist/stages/mux/MP4Muxer.js +262 -0
  289. package/dist/stages/mux/MP4Muxer.js.map +1 -0
  290. package/dist/stages/mux/OPFSWriter.d.ts +46 -0
  291. package/dist/stages/mux/OPFSWriter.d.ts.map +1 -0
  292. package/dist/stages/mux/index.d.ts +5 -0
  293. package/dist/stages/mux/index.d.ts.map +1 -0
  294. package/dist/stages/mux/mux.worker.d.ts +65 -0
  295. package/dist/stages/mux/mux.worker.d.ts.map +1 -0
  296. package/dist/stages/mux/mux.worker.js +219 -0
  297. package/dist/stages/mux/mux.worker.js.map +1 -0
  298. package/dist/stages/mux/types.d.ts +95 -0
  299. package/dist/stages/mux/types.d.ts.map +1 -0
  300. package/dist/stages/mux/utils.d.ts +32 -0
  301. package/dist/stages/mux/utils.d.ts.map +1 -0
  302. package/dist/stages/mux/utils.js +34 -0
  303. package/dist/stages/mux/utils.js.map +1 -0
  304. package/dist/types.d.ts +25 -0
  305. package/dist/types.d.ts.map +1 -0
  306. package/dist/utils/BackpressureAdapter.d.ts +26 -0
  307. package/dist/utils/BackpressureAdapter.d.ts.map +1 -0
  308. package/dist/utils/binary-search.d.ts +33 -0
  309. package/dist/utils/binary-search.d.ts.map +1 -0
  310. package/dist/utils/binary-search.js +62 -0
  311. package/dist/utils/binary-search.js.map +1 -0
  312. package/dist/utils/canvas-utils.d.ts +96 -0
  313. package/dist/utils/canvas-utils.d.ts.map +1 -0
  314. package/dist/utils/canvas-utils.js +58 -0
  315. package/dist/utils/canvas-utils.js.map +1 -0
  316. package/dist/utils/object-utils.d.ts +34 -0
  317. package/dist/utils/object-utils.d.ts.map +1 -0
  318. package/dist/utils/object-utils.js +22 -0
  319. package/dist/utils/object-utils.js.map +1 -0
  320. package/dist/utils/time-utils.d.ts +10 -0
  321. package/dist/utils/time-utils.d.ts.map +1 -0
  322. package/dist/utils/time-utils.js +60 -0
  323. package/dist/utils/time-utils.js.map +1 -0
  324. package/dist/worker/BaseWorker.d.ts +44 -0
  325. package/dist/worker/BaseWorker.d.ts.map +1 -0
  326. package/dist/worker/BaseWorker.js +98 -0
  327. package/dist/worker/BaseWorker.js.map +1 -0
  328. package/dist/worker/WorkerChannel.d.ts +105 -0
  329. package/dist/worker/WorkerChannel.d.ts.map +1 -0
  330. package/dist/worker/WorkerChannel.js +355 -0
  331. package/dist/worker/WorkerChannel.js.map +1 -0
  332. package/dist/worker/WorkerPool.d.ts +52 -0
  333. package/dist/worker/WorkerPool.d.ts.map +1 -0
  334. package/dist/worker/WorkerPool.js +124 -0
  335. package/dist/worker/WorkerPool.js.map +1 -0
  336. package/dist/worker/index.d.ts +11 -0
  337. package/dist/worker/index.d.ts.map +1 -0
  338. package/dist/worker/transferable-helper.d.ts +89 -0
  339. package/dist/worker/transferable-helper.d.ts.map +1 -0
  340. package/dist/worker/transferable-helper.js +44 -0
  341. package/dist/worker/transferable-helper.js.map +1 -0
  342. package/dist/worker/types.d.ts +179 -0
  343. package/dist/worker/types.d.ts.map +1 -0
  344. package/dist/worker/types.js +50 -0
  345. package/dist/worker/types.js.map +1 -0
  346. package/dist/worker/worker-event-whitelist.d.ts +23 -0
  347. package/dist/worker/worker-event-whitelist.d.ts.map +1 -0
  348. package/dist/worker/worker-retry.d.ts +36 -0
  349. package/dist/worker/worker-retry.d.ts.map +1 -0
  350. package/dist/worker/worker-retry.js +55 -0
  351. package/dist/worker/worker-retry.js.map +1 -0
  352. package/package.json +105 -0
@@ -0,0 +1,75 @@
1
+ import { VideoClipSession } from './VideoClipSession';
2
+ import { CompositionModel } from '../model';
3
+ import { TimeUs } from '../model/types';
4
+ import { ClipUpdateResult } from './CompositionPlanner';
5
+ import { CacheManager } from '../cache/CacheManager';
6
+
7
+ export interface ClipSessionFactory {
8
+ createSession(clipId: string): Promise<VideoClipSession>;
9
+ }
10
+ export type ClipSessionState = 'idle' | 'activating' | 'active' | 'failed';
11
+ /**
12
+ * ClipSessionManager manages VideoClipSession instances using 3-Clip strategy
13
+ *
14
+ * At any time, maintains:
15
+ * - Current clip (being played)
16
+ * - Previous clip (for backward seek)
17
+ * - Next clip (for forward playback)
18
+ */
19
+ export declare class ClipSessionManager {
20
+ private entries;
21
+ private activeSet;
22
+ private inflightCount;
23
+ private readonly maxConcurrent;
24
+ private readonly factory;
25
+ private readonly model;
26
+ private readonly cacheManager;
27
+ constructor(config: {
28
+ maxConcurrent?: number;
29
+ factory: ClipSessionFactory;
30
+ model: () => CompositionModel | null;
31
+ cacheManager: CacheManager;
32
+ });
33
+ /**
34
+ * Ensure clips are active (Prev, Current, Next)
35
+ * Deactivates clips outside the set
36
+ */
37
+ ensureClips(timeUs: TimeUs): Promise<void>;
38
+ handlePlannerUpdate(clipId: string, update: ClipUpdateResult): Promise<void>;
39
+ /**
40
+ * Get session for a clip
41
+ */
42
+ getSession(clipId: string): VideoClipSession | undefined;
43
+ /**
44
+ * Check if a clip is active
45
+ */
46
+ isClipActive(clipId: string): boolean;
47
+ /**
48
+ * Get clip state
49
+ */
50
+ getClipState(clipId: string): ClipSessionState;
51
+ /**
52
+ * Get metrics for monitoring
53
+ */
54
+ getMetrics(): {
55
+ idle: number;
56
+ activating: number;
57
+ active: number;
58
+ failed: number;
59
+ total: number;
60
+ inflight: number;
61
+ activeSessions: number;
62
+ };
63
+ /**
64
+ * Clear all sessions
65
+ */
66
+ clear(): Promise<void>;
67
+ /**
68
+ * Dispose and cleanup
69
+ */
70
+ dispose(): Promise<void>;
71
+ private enqueueActivation;
72
+ private activateClip;
73
+ private deactivateClip;
74
+ }
75
+ //# sourceMappingURL=ClipSessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClipSessionManager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/ClipSessionManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1D;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAW3E;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,MAAM,EAAE;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,kBAAkB,CAAC;QAC5B,KAAK,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC;QACrC,YAAY,EAAE,YAAY,CAAC;KAC5B;IAOD;;;OAGG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B1C,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIxD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKrC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAI9C;;OAEG;IACH,UAAU;;;;;;;;;IAcV;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAIhB,iBAAiB;YAiCjB,YAAY;YA4BZ,cAAc;CAe7B"}
@@ -0,0 +1,160 @@
1
+ class ClipSessionManager {
2
+ entries = /* @__PURE__ */ new Map();
3
+ activeSet = /* @__PURE__ */ new Set();
4
+ inflightCount = 0;
5
+ maxConcurrent;
6
+ factory;
7
+ model;
8
+ cacheManager;
9
+ constructor(config) {
10
+ this.maxConcurrent = config.maxConcurrent ?? 3;
11
+ this.factory = config.factory;
12
+ this.model = config.model;
13
+ this.cacheManager = config.cacheManager;
14
+ }
15
+ /**
16
+ * Ensure clips are active (Prev, Current, Next)
17
+ * Deactivates clips outside the set
18
+ */
19
+ async ensureClips(timeUs) {
20
+ const model = this.model();
21
+ if (!model) return;
22
+ const clipIds = model.getClipsToCacheAtTime(timeUs);
23
+ const targetSet = new Set(clipIds);
24
+ for (const [clipId, entry] of this.entries) {
25
+ if (!targetSet.has(clipId) && entry.state === "active") {
26
+ await this.deactivateClip(clipId);
27
+ }
28
+ }
29
+ this.activeSet = targetSet;
30
+ const toActivate = [];
31
+ for (const clipId of clipIds) {
32
+ const entry = this.entries.get(clipId);
33
+ if (!entry || entry.state === "idle" || entry.state === "failed") {
34
+ toActivate.push(clipId);
35
+ }
36
+ }
37
+ for (const clipId of toActivate) {
38
+ await this.enqueueActivation(clipId);
39
+ }
40
+ }
41
+ async handlePlannerUpdate(clipId, update) {
42
+ const session = this.getSession(clipId);
43
+ if (!session) return;
44
+ await session.handlePlannerUpdate(update);
45
+ }
46
+ /**
47
+ * Get session for a clip
48
+ */
49
+ getSession(clipId) {
50
+ return this.entries.get(clipId)?.session;
51
+ }
52
+ /**
53
+ * Check if a clip is active
54
+ */
55
+ isClipActive(clipId) {
56
+ const entry = this.entries.get(clipId);
57
+ return entry?.state === "active" || false;
58
+ }
59
+ /**
60
+ * Get clip state
61
+ */
62
+ getClipState(clipId) {
63
+ return this.entries.get(clipId)?.state ?? "idle";
64
+ }
65
+ /**
66
+ * Get metrics for monitoring
67
+ */
68
+ getMetrics() {
69
+ const states = { idle: 0, activating: 0, active: 0, failed: 0 };
70
+ for (const entry of this.entries.values()) {
71
+ states[entry.state]++;
72
+ }
73
+ return {
74
+ total: this.entries.size,
75
+ inflight: this.inflightCount,
76
+ activeSessions: this.activeSet.size,
77
+ ...states
78
+ };
79
+ }
80
+ /**
81
+ * Clear all sessions
82
+ */
83
+ async clear() {
84
+ for (const clipId of this.entries.keys()) {
85
+ await this.deactivateClip(clipId);
86
+ }
87
+ this.entries.clear();
88
+ this.activeSet.clear();
89
+ }
90
+ /**
91
+ * Dispose and cleanup
92
+ */
93
+ async dispose() {
94
+ await this.clear();
95
+ }
96
+ async enqueueActivation(clipId) {
97
+ let entry = this.entries.get(clipId);
98
+ if (!entry) {
99
+ entry = {
100
+ clipId,
101
+ state: "idle",
102
+ lastAccess: Date.now(),
103
+ retryCount: 0
104
+ };
105
+ this.entries.set(clipId, entry);
106
+ }
107
+ if (entry.state === "activating" || entry.state === "active") {
108
+ return entry.activationPromise;
109
+ }
110
+ while (this.inflightCount >= this.maxConcurrent) {
111
+ await new Promise((resolve) => setTimeout(resolve, 50));
112
+ }
113
+ entry.state = "activating";
114
+ entry.lastAccess = Date.now();
115
+ this.inflightCount++;
116
+ const activationPromise = this.activateClip(entry);
117
+ entry.activationPromise = activationPromise;
118
+ return activationPromise;
119
+ }
120
+ async activateClip(entry) {
121
+ try {
122
+ const session = await this.factory.createSession(entry.clipId);
123
+ await session.activate();
124
+ entry.session = session;
125
+ entry.state = "active";
126
+ entry.retryCount = 0;
127
+ } catch (error) {
128
+ console.error(`[ClipSessionManager] Failed to activate clip ${entry.clipId}:`, error);
129
+ entry.state = "failed";
130
+ entry.retryCount++;
131
+ if (entry.retryCount < 3) {
132
+ const delay = Math.min(1e3 * Math.pow(2, entry.retryCount), 5e3);
133
+ setTimeout(() => {
134
+ if (this.activeSet.has(entry.clipId)) {
135
+ entry.state = "idle";
136
+ void this.enqueueActivation(entry.clipId);
137
+ }
138
+ }, delay);
139
+ }
140
+ } finally {
141
+ this.inflightCount--;
142
+ entry.activationPromise = void 0;
143
+ }
144
+ }
145
+ async deactivateClip(clipId) {
146
+ const entry = this.entries.get(clipId);
147
+ if (!entry) return;
148
+ if (entry.session) {
149
+ await entry.session.dispose();
150
+ entry.session = void 0;
151
+ }
152
+ this.cacheManager.evictClip(clipId);
153
+ entry.state = "idle";
154
+ this.entries.delete(clipId);
155
+ }
156
+ }
157
+ export {
158
+ ClipSessionManager
159
+ };
160
+ //# sourceMappingURL=ClipSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClipSessionManager.js","sources":["../../src/orchestrator/ClipSessionManager.ts"],"sourcesContent":["/**\n * ClipSessionManager: Manages VideoClipSession lifecycle with 3-Clip strategy\n *\n * Responsibilities:\n * - Maintains Prev/Current/Next clip sessions\n * - Controls concurrent clip activation (max 2)\n * - Evicts clips outside the active window\n */\n\nimport type { VideoClipSession } from './VideoClipSession';\nimport type { CompositionModel } from '../model';\nimport type { TimeUs } from '../model/types';\nimport { ClipUpdateResult } from './CompositionPlanner';\n\nimport type { CacheManager } from '../cache/CacheManager';\n\nexport interface ClipSessionFactory {\n createSession(clipId: string): Promise<VideoClipSession>;\n}\n\nexport type ClipSessionState = 'idle' | 'activating' | 'active' | 'failed';\n\ninterface SessionEntry {\n clipId: string;\n session?: VideoClipSession;\n state: ClipSessionState;\n activationPromise?: Promise<void>;\n lastAccess: number;\n retryCount: number;\n}\n\n/**\n * ClipSessionManager manages VideoClipSession instances using 3-Clip strategy\n *\n * At any time, maintains:\n * - Current clip (being played)\n * - Previous clip (for backward seek)\n * - Next clip (for forward playback)\n */\nexport class ClipSessionManager {\n private entries = new Map<string, SessionEntry>();\n private activeSet = new Set<string>();\n private inflightCount = 0;\n private readonly maxConcurrent: number;\n private readonly factory: ClipSessionFactory;\n private readonly model: () => CompositionModel | null;\n private readonly cacheManager: CacheManager;\n\n constructor(config: {\n maxConcurrent?: number;\n factory: ClipSessionFactory;\n model: () => CompositionModel | null;\n cacheManager: CacheManager;\n }) {\n this.maxConcurrent = config.maxConcurrent ?? 3;\n this.factory = config.factory;\n this.model = config.model;\n this.cacheManager = config.cacheManager;\n }\n\n /**\n * Ensure clips are active (Prev, Current, Next)\n * Deactivates clips outside the set\n */\n async ensureClips(timeUs: TimeUs): Promise<void> {\n const model = this.model();\n if (!model) return;\n\n const clipIds = model.getClipsToCacheAtTime(timeUs);\n const targetSet = new Set(clipIds);\n\n // Deactivate clips not in target set\n for (const [clipId, entry] of this.entries) {\n if (!targetSet.has(clipId) && entry.state === 'active') {\n await this.deactivateClip(clipId);\n }\n }\n\n // Update active set\n this.activeSet = targetSet;\n\n // Activate missing clips\n const toActivate: string[] = [];\n for (const clipId of clipIds) {\n const entry = this.entries.get(clipId);\n if (!entry || entry.state === 'idle' || entry.state === 'failed') {\n toActivate.push(clipId);\n }\n }\n // Start activation with concurrency control\n for (const clipId of toActivate) {\n await this.enqueueActivation(clipId);\n }\n }\n\n async handlePlannerUpdate(clipId: string, update: ClipUpdateResult): Promise<void> {\n const session = this.getSession(clipId);\n if (!session) return;\n await session.handlePlannerUpdate(update);\n }\n\n /**\n * Get session for a clip\n */\n getSession(clipId: string): VideoClipSession | undefined {\n return this.entries.get(clipId)?.session;\n }\n\n /**\n * Check if a clip is active\n */\n isClipActive(clipId: string): boolean {\n const entry = this.entries.get(clipId);\n return entry?.state === 'active' || false;\n }\n\n /**\n * Get clip state\n */\n getClipState(clipId: string): ClipSessionState {\n return this.entries.get(clipId)?.state ?? 'idle';\n }\n\n /**\n * Get metrics for monitoring\n */\n getMetrics() {\n const states = { idle: 0, activating: 0, active: 0, failed: 0 };\n for (const entry of this.entries.values()) {\n states[entry.state]++;\n }\n\n return {\n total: this.entries.size,\n inflight: this.inflightCount,\n activeSessions: this.activeSet.size,\n ...states,\n };\n }\n\n /**\n * Clear all sessions\n */\n async clear(): Promise<void> {\n for (const clipId of this.entries.keys()) {\n await this.deactivateClip(clipId);\n }\n this.entries.clear();\n this.activeSet.clear();\n }\n\n /**\n * Dispose and cleanup\n */\n async dispose(): Promise<void> {\n await this.clear();\n }\n\n private async enqueueActivation(clipId: string): Promise<void> {\n let entry = this.entries.get(clipId);\n\n if (!entry) {\n entry = {\n clipId,\n state: 'idle',\n lastAccess: Date.now(),\n retryCount: 0,\n };\n this.entries.set(clipId, entry);\n }\n\n // Skip if already activating or active\n if (entry.state === 'activating' || entry.state === 'active') {\n return entry.activationPromise;\n }\n\n // Wait if max concurrent reached\n while (this.inflightCount >= this.maxConcurrent) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n entry.state = 'activating';\n entry.lastAccess = Date.now();\n this.inflightCount++;\n\n const activationPromise = this.activateClip(entry);\n entry.activationPromise = activationPromise;\n\n return activationPromise;\n }\n\n private async activateClip(entry: SessionEntry): Promise<void> {\n try {\n const session = await this.factory.createSession(entry.clipId);\n await session.activate();\n entry.session = session;\n entry.state = 'active';\n entry.retryCount = 0;\n } catch (error) {\n console.error(`[ClipSessionManager] Failed to activate clip ${entry.clipId}:`, error);\n entry.state = 'failed';\n entry.retryCount++;\n\n // Retry with exponential backoff (max 3 retries)\n if (entry.retryCount < 3) {\n const delay = Math.min(1000 * Math.pow(2, entry.retryCount), 5000);\n setTimeout(() => {\n if (this.activeSet.has(entry.clipId)) {\n entry.state = 'idle';\n void this.enqueueActivation(entry.clipId);\n }\n }, delay);\n }\n } finally {\n this.inflightCount--;\n entry.activationPromise = undefined;\n }\n }\n\n private async deactivateClip(clipId: string): Promise<void> {\n const entry = this.entries.get(clipId);\n if (!entry) return;\n\n if (entry.session) {\n await entry.session.dispose();\n entry.session = undefined;\n }\n\n // Evict clip from L1 cache to free memory\n this.cacheManager.evictClip(clipId);\n\n entry.state = 'idle';\n this.entries.delete(clipId);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { CompositionModel, CompositionPatch, DirtyRange, Clip } from '../model';
2
+ import { ClipInstructionSet } from '../stages/compose/instructions';
3
+
4
+ export type ClipUpdateType = 'instructionOnly' | 'pipelineChange' | 'remove';
5
+ export interface ClipUpdateResult {
6
+ clipId: string;
7
+ trackId: string;
8
+ revision: number;
9
+ type: ClipUpdateType;
10
+ dirtyRanges: DirtyRange[];
11
+ instructions?: ClipInstructionSet;
12
+ }
13
+ interface ClipPlanResourceRefs {
14
+ pending: Set<string>;
15
+ ready: Set<string>;
16
+ }
17
+ interface ClipPlan {
18
+ clipId: string;
19
+ trackId: string;
20
+ revision: number;
21
+ instructions: ClipInstructionSet;
22
+ resources: ClipPlanResourceRefs;
23
+ }
24
+ export declare class CompositionPlanner {
25
+ private model;
26
+ private readonly clipPlans;
27
+ setModel(model: CompositionModel): void;
28
+ getInstructions(clipId: string): ClipInstructionSet | null;
29
+ releaseClip(clipId: string): void;
30
+ refreshClip(clipId: string, reason?: string): ClipUpdateResult | null;
31
+ applyPatch(_patch: CompositionPatch, ranges: DirtyRange[]): ClipUpdateResult[];
32
+ buildClipPlan(clip: Clip, options?: {
33
+ cache?: boolean;
34
+ }): ClipPlan;
35
+ private determineUpdateType;
36
+ private createInstructionSet;
37
+ private buildBaseConfig;
38
+ private buildLayerPlans;
39
+ private createBaseVideoLayer;
40
+ private attachmentToLayerPlan;
41
+ private resolveAttachmentLayerType;
42
+ private buildAttachmentPayload;
43
+ private resolveAttachmentResourceState;
44
+ private registerResourceUsage;
45
+ private getResourceState;
46
+ private computeInstructionStatus;
47
+ private buildTransitionPlans;
48
+ private transitionToPlan;
49
+ private isClipOverlappingRange;
50
+ private getStringField;
51
+ private getNumberField;
52
+ private needsPlanRefresh;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=CompositionPlanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompositionPlanner.d.ts","sourceRoot":"","sources":["../../src/orchestrator/CompositionPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,IAAI,EAKL,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACV,kBAAkB,EAQnB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAcD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAKvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAwB1D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAyB,GAAG,gBAAgB,GAAG,IAAI;IAiCvF,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE;IA6C9E,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,QAAQ;IAqBlE,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,8BAA8B;IAetC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;CAmBzB"}