@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,290 @@
1
+ import { CompositionModel } from "./model/CompositionModel.js";
2
+ import "./config/defaults.js";
3
+ import { loadConfig } from "./config/ConfigLoader.js";
4
+ import { Orchestrator } from "./orchestrator/Orchestrator.js";
5
+ import { PlaybackController } from "./controllers/PlaybackController.js";
6
+ import { PreRenderService } from "./controllers/PreRenderService.js";
7
+ import { PreviewHandleImpl } from "./controllers/PreviewHandle.js";
8
+ import { PluginManager } from "./plugins/PluginManager.js";
9
+ import { EventBus } from "./event/EventBus.js";
10
+ import { MeframeEvent } from "./event/events.js";
11
+ class Meframe {
12
+ /** Current state - managed internally via setState() */
13
+ state = "idle";
14
+ /** Configuration - immutable after construction */
15
+ config;
16
+ /** Composition model - managed via setCompositionTree() */
17
+ model = null;
18
+ /** Plugin manager for extensions */
19
+ pluginManager;
20
+ /** Event bus for subscribing to Meframe events */
21
+ events;
22
+ orchestrator;
23
+ eventBus;
24
+ playbackController = null;
25
+ preRenderService = null;
26
+ canvas;
27
+ constructor(config) {
28
+ this.config = config;
29
+ this.eventBus = new EventBus();
30
+ this.events = this.eventBus.asReadonly();
31
+ this.pluginManager = new PluginManager(this);
32
+ this.orchestrator = new Orchestrator({
33
+ workerBaseUrl: config.global?.workerBaseUrl || "/src/stages",
34
+ maxWorkers: config.maxWorkers,
35
+ cacheConfig: config.cache,
36
+ eventBus: this.eventBus
37
+ });
38
+ }
39
+ /**
40
+ * Create a new Meframe instance
41
+ */
42
+ static async create(config = {}) {
43
+ const resolvedConfig = await loadConfig({ override: config });
44
+ const instance = new Meframe(resolvedConfig);
45
+ await instance.initialize();
46
+ return instance;
47
+ }
48
+ /**
49
+ * Initialize the core engine
50
+ */
51
+ async initialize() {
52
+ this.setState("loading");
53
+ try {
54
+ await this.orchestrator.initialize();
55
+ const plugins = this.config.plugins;
56
+ if (plugins && Array.isArray(plugins)) {
57
+ for (const plugin of plugins) {
58
+ if (plugin && typeof plugin === "object" && "name" in plugin && "install" in plugin) {
59
+ this.pluginManager.register(plugin);
60
+ }
61
+ }
62
+ }
63
+ this.setState("idle");
64
+ } catch (error) {
65
+ this.setState("error");
66
+ throw error;
67
+ }
68
+ }
69
+ /**
70
+ * Set the composition model
71
+ */
72
+ async setCompositionModel(model) {
73
+ this.ensureNotDestroyed();
74
+ const compositionModel = model instanceof CompositionModel ? model : new CompositionModel(model);
75
+ await this.orchestrator.setCompositionModel(compositionModel);
76
+ this.model = compositionModel;
77
+ console.log("[Meframe] setCompositionModel: model", this.model);
78
+ this.setState("ready");
79
+ this.eventBus.emit(MeframeEvent.Ready, {
80
+ trackCount: model.tracks.length,
81
+ clipCount: model.tracks.reduce(
82
+ (acc, track) => acc + track.clips?.length || 0,
83
+ 0
84
+ ),
85
+ durationUs: model.durationUs
86
+ });
87
+ }
88
+ /**
89
+ * Apply a patch to the composition model
90
+ */
91
+ async applyPatch(patch) {
92
+ this.ensureNotDestroyed();
93
+ if (!this.model) {
94
+ throw new Error("No composition model set");
95
+ }
96
+ await this.orchestrator.applyPatch(patch);
97
+ this.model = this.orchestrator.compositionModel;
98
+ }
99
+ /**
100
+ * Start preview and return a handle for control
101
+ */
102
+ startPreview(options) {
103
+ this.ensureReady();
104
+ const canvas = options?.canvas || this.canvas;
105
+ if (!canvas) {
106
+ throw new Error("Canvas is required for preview");
107
+ }
108
+ this.canvas = canvas;
109
+ if (!this.playbackController) {
110
+ this.playbackController = new PlaybackController(this.orchestrator, this.eventBus, {
111
+ canvas,
112
+ startUs: options?.startUs
113
+ });
114
+ this.playbackController.setAudioSession(this.orchestrator.audioSession);
115
+ }
116
+ if (!this.preRenderService) {
117
+ this.preRenderService = new PreRenderService(this.orchestrator, this.events);
118
+ }
119
+ return new PreviewHandleImpl(this.playbackController, this.eventBus);
120
+ }
121
+ /**
122
+ * Export the composition
123
+ */
124
+ async export(options) {
125
+ this.ensureReady();
126
+ this.setState("exporting");
127
+ try {
128
+ const model = this.model;
129
+ if (!model) {
130
+ throw new Error("No composition model set");
131
+ }
132
+ const width = options.width || model.renderConfig?.width || 1920;
133
+ const height = options.height || model.renderConfig?.height || 1080;
134
+ const fps = options.fps || model.fps || 30;
135
+ const videoBitrate = options.videoBitrate || (options.quality === "highest" ? 1e7 : options.quality === "high" ? 5e6 : options.quality === "medium" ? 25e5 : 1e6);
136
+ const audioBitrate = options.audioBitrate || 128e3;
137
+ const exportConfig = {
138
+ width,
139
+ height,
140
+ fps,
141
+ videoBitrate,
142
+ audioBitrate,
143
+ videoCodec: options.videoCodec || "h264",
144
+ audioCodec: options.audioCodec || "aac",
145
+ container: options.format
146
+ };
147
+ const encodeWorker = await this.orchestrator.workers.get("encode");
148
+ const muxWorker = await this.orchestrator.workers.get("mux");
149
+ await encodeWorker.send("configure", exportConfig);
150
+ await muxWorker.send("configure", { container: options.format });
151
+ const { readable, writable } = new TransformStream();
152
+ const exportPromise = this.runExportPipeline(writable, exportConfig);
153
+ exportPromise.then(() => {
154
+ this.setState("ready");
155
+ const totalFrames = Math.ceil(model.durationUs / 1e6 * fps);
156
+ this.eventBus.emit(MeframeEvent.ExportComplete, {
157
+ size: width * height * totalFrames * 4,
158
+ // Approximate size
159
+ durationMs: model.durationUs / 1e3,
160
+ format: options.format
161
+ });
162
+ }).catch((error) => {
163
+ this.setState("error");
164
+ this.eventBus.emit(MeframeEvent.Error, {
165
+ source: "export",
166
+ error,
167
+ context: { format: options.format }
168
+ });
169
+ });
170
+ return readable;
171
+ } catch (error) {
172
+ this.setState("error");
173
+ throw error;
174
+ }
175
+ }
176
+ /**
177
+ * Run the export pipeline
178
+ */
179
+ async runExportPipeline(output, config) {
180
+ const model = this.model;
181
+ const totalFrames = Math.ceil(model.durationUs / 1e6 * config.fps);
182
+ let processedFrames = 0;
183
+ const frameTimeUs = 1e6 / config.fps;
184
+ for (let timeUs = 0; timeUs < model.durationUs; timeUs += frameTimeUs) {
185
+ const frameHandle = await this.orchestrator.renderFrame(timeUs);
186
+ if (frameHandle) {
187
+ const encodeWorker2 = await this.orchestrator.workers.get("encode");
188
+ await frameHandle.use(async (frame) => {
189
+ await encodeWorker2.send("encodeFrame", { frame, timeUs });
190
+ });
191
+ }
192
+ processedFrames++;
193
+ const progress = processedFrames / totalFrames;
194
+ this.eventBus.emit(MeframeEvent.ExportProgress, {
195
+ progress,
196
+ currentFrame: processedFrames,
197
+ totalFrames,
198
+ timeUs
199
+ });
200
+ }
201
+ const encodeWorker = await this.orchestrator.workers.get("encode");
202
+ const muxWorker = await this.orchestrator.workers.get("mux");
203
+ await encodeWorker.send("flush");
204
+ await muxWorker.send("flush");
205
+ const result = await muxWorker.send("getOutput");
206
+ const writer = output.getWriter();
207
+ await writer.write(result);
208
+ await writer.close();
209
+ }
210
+ /**
211
+ * Export to buffer (convenience method)
212
+ */
213
+ async exportToBuffer(options) {
214
+ const stream = await this.export(options);
215
+ const chunks = [];
216
+ const reader = stream.getReader();
217
+ let done = false;
218
+ while (!done) {
219
+ const result2 = await reader.read();
220
+ done = result2.done;
221
+ if (result2.value) {
222
+ chunks.push(result2.value);
223
+ }
224
+ }
225
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
226
+ const result = new Uint8Array(totalLength);
227
+ let offset = 0;
228
+ for (const chunk of chunks) {
229
+ result.set(chunk, offset);
230
+ offset += chunk.length;
231
+ }
232
+ return result.buffer;
233
+ }
234
+ /**
235
+ * Get current playback time
236
+ */
237
+ getCurrentTime() {
238
+ return this.playbackController?.currentTime || 0;
239
+ }
240
+ /**
241
+ * Clean up and destroy the instance
242
+ */
243
+ async dispose() {
244
+ if (this.state === "destroyed") return;
245
+ this.playbackController?.stop();
246
+ this.playbackController?.dispose();
247
+ this.playbackController = null;
248
+ this.preRenderService?.stop();
249
+ this.preRenderService = null;
250
+ await this.pluginManager.disposeAll();
251
+ await this.orchestrator.dispose();
252
+ this.eventBus.dispose();
253
+ this.setState("destroyed");
254
+ }
255
+ /**
256
+ * Set internal state
257
+ */
258
+ setState(state) {
259
+ const oldState = this.state;
260
+ this.state = state;
261
+ this.eventBus.emit("state:changed", {
262
+ oldState,
263
+ newState: state
264
+ });
265
+ }
266
+ /**
267
+ * Ensure the instance is not destroyed
268
+ */
269
+ ensureNotDestroyed() {
270
+ if (this.state === "destroyed") {
271
+ throw new Error("Core instance is destroyed");
272
+ }
273
+ }
274
+ /**
275
+ * Ensure the instance is ready
276
+ */
277
+ ensureReady() {
278
+ this.ensureNotDestroyed();
279
+ if (!this.model) {
280
+ throw new Error("No composition model set");
281
+ }
282
+ if (this.state === "loading" || this.state === "idle") {
283
+ throw new Error("Core is not ready");
284
+ }
285
+ }
286
+ }
287
+ export {
288
+ Meframe
289
+ };
290
+ //# sourceMappingURL=Meframe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Meframe.js","sources":["../src/Meframe.ts"],"sourcesContent":["/**\n * Meframe - Main entry point for the media processing framework\n */\n\nimport type { MeframeConfig, ResolvedConfig, MeframeState, ExportOptions } from './types';\nimport type { CompositionModelData, CompositionPatch, TimeUs } from './model/types';\nimport type { PreviewHandle } from './controllers/types';\nimport type { Plugin } from './plugins/types';\nimport { CompositionModel } from './model/CompositionModel';\nimport { loadConfig } from './config';\nimport { Orchestrator } from './orchestrator/Orchestrator';\nimport { PlaybackController } from './controllers/PlaybackController';\nimport { PreRenderService } from './controllers/PreRenderService';\nimport { PreviewHandleImpl } from './controllers/PreviewHandle';\nimport { PluginManager } from './plugins/PluginManager';\nimport { EventBus } from './event/EventBus';\nimport { MeframeEvent, type EventPayloadMap } from './event/events';\n// MuxWorker will be imported when needed for export\n\nexport class Meframe {\n /** Current state - managed internally via setState() */\n state: MeframeState = 'idle';\n /** Configuration - immutable after construction */\n readonly config: ResolvedConfig;\n /** Composition model - managed via setCompositionTree() */\n model: CompositionModel | null = null;\n /** Plugin manager for extensions */\n readonly pluginManager: PluginManager;\n /** Event bus for subscribing to Meframe events */\n readonly events: Pick<EventBus<EventPayloadMap>, 'on' | 'off' | 'once'>;\n\n private orchestrator: Orchestrator;\n private eventBus: EventBus<EventPayloadMap>;\n private playbackController: PlaybackController | null = null;\n private preRenderService: PreRenderService | null = null;\n private canvas?: HTMLCanvasElement | OffscreenCanvas;\n\n private constructor(config: ResolvedConfig) {\n this.config = config;\n this.eventBus = new EventBus<EventPayloadMap>();\n this.events = this.eventBus.asReadonly();\n this.pluginManager = new PluginManager(this);\n\n // Initialize orchestrator with configuration and shared eventBus\n this.orchestrator = new Orchestrator({\n workerBaseUrl: config.global?.workerBaseUrl || '/src/stages',\n maxWorkers: (config as any).maxWorkers,\n cacheConfig: config.cache as any,\n eventBus: this.eventBus,\n });\n }\n\n /**\n * Create a new Meframe instance\n */\n static async create(config: MeframeConfig = {}): Promise<Meframe> {\n // Load and resolve configuration using ConfigLoader\n const resolvedConfig = await loadConfig({ override: config });\n const instance = new Meframe(resolvedConfig);\n await instance.initialize();\n return instance;\n }\n\n /**\n * Initialize the core engine\n */\n private async initialize(): Promise<void> {\n this.setState('loading');\n\n try {\n // Initialize orchestrator (sets up workers and cache)\n await this.orchestrator.initialize();\n\n // Initialize plugins if provided\n const plugins = (this.config as any).plugins;\n if (plugins && Array.isArray(plugins)) {\n for (const plugin of plugins) {\n // Ensure plugin type matches the Plugin interface\n if (plugin && typeof plugin === 'object' && 'name' in plugin && 'install' in plugin) {\n this.pluginManager.register(plugin as Plugin);\n }\n }\n }\n\n this.setState('idle');\n } catch (error) {\n this.setState('error');\n throw error;\n }\n }\n\n /**\n * Set the composition model\n */\n async setCompositionModel(model: CompositionModel | CompositionModelData): Promise<void> {\n this.ensureNotDestroyed();\n\n // Convert plain object to CompositionModel instance if needed\n const compositionModel =\n model instanceof CompositionModel ? model : new CompositionModel(model);\n\n // Set the model in orchestrator\n await this.orchestrator.setCompositionModel(compositionModel);\n this.model = compositionModel;\n console.log('[Meframe] setCompositionModel: model', this.model);\n this.setState('ready');\n this.eventBus.emit(MeframeEvent.Ready, {\n trackCount: model.tracks.length,\n clipCount: model.tracks.reduce(\n (acc: number, track: any) => acc + track.clips?.length || 0,\n 0\n ),\n durationUs: model.durationUs,\n });\n }\n\n /**\n * Apply a patch to the composition model\n */\n async applyPatch(patch: CompositionPatch): Promise<void> {\n this.ensureNotDestroyed();\n\n if (!this.model) {\n throw new Error('No composition model set');\n }\n\n // Apply patch through orchestrator\n await this.orchestrator.applyPatch(patch);\n\n // Patch is applied to the model by orchestrator\n this.model = this.orchestrator.compositionModel!;\n }\n\n /**\n * Start preview and return a handle for control\n */\n startPreview(options?: {\n canvas?: HTMLCanvasElement | OffscreenCanvas;\n startUs?: TimeUs;\n }): PreviewHandle {\n this.ensureReady();\n\n // Use provided canvas or the one from config\n const canvas = options?.canvas || this.canvas;\n if (!canvas) {\n throw new Error('Canvas is required for preview');\n }\n\n // Store canvas for later use\n this.canvas = canvas;\n\n // Create playback controller\n if (!this.playbackController) {\n this.playbackController = new PlaybackController(this.orchestrator as any, this.eventBus, {\n canvas,\n startUs: options?.startUs,\n });\n this.playbackController.setAudioSession(this.orchestrator.audioSession);\n }\n\n // Start pre-render service for background caching\n if (!this.preRenderService) {\n this.preRenderService = new PreRenderService(this.orchestrator as any, this.events);\n // this.preRenderService.start();\n }\n\n // Return preview handle\n return new PreviewHandleImpl(this.playbackController, this.eventBus);\n }\n\n /**\n * Export the composition\n */\n async export(options: ExportOptions): Promise<ReadableStream<Uint8Array>> {\n this.ensureReady();\n this.setState('exporting');\n\n try {\n // Get composition model\n const model = this.model;\n if (!model) {\n throw new Error('No composition model set');\n }\n\n // Determine export parameters\n const width = options.width || (model as any).renderConfig?.width || 1920;\n const height = options.height || (model as any).renderConfig?.height || 1080;\n const fps = options.fps || model.fps || 30;\n const videoBitrate =\n options.videoBitrate ||\n (options.quality === 'highest'\n ? 10000000\n : options.quality === 'high'\n ? 5000000\n : options.quality === 'medium'\n ? 2500000\n : 1000000);\n const audioBitrate = options.audioBitrate || 128000;\n\n // Create export configuration\n const exportConfig = {\n width,\n height,\n fps,\n videoBitrate,\n audioBitrate,\n videoCodec: options.videoCodec || 'h264',\n audioCodec: options.audioCodec || 'aac',\n container: options.format,\n };\n\n // Get encode worker from orchestrator\n const encodeWorker = await this.orchestrator.workers.get('encode');\n const muxWorker = await this.orchestrator.workers.get('mux');\n\n // Configure workers for export\n await encodeWorker.send('configure', exportConfig);\n await muxWorker.send('configure', { container: options.format });\n\n // Create export stream\n const { readable, writable } = new TransformStream<Uint8Array>();\n\n // Start export process\n const exportPromise = this.runExportPipeline(writable, exportConfig);\n\n // Handle export completion\n exportPromise\n .then(() => {\n this.setState('ready');\n const totalFrames = Math.ceil((model.durationUs / 1000000) * fps);\n this.eventBus.emit(MeframeEvent.ExportComplete, {\n size: width * height * totalFrames * 4, // Approximate size\n durationMs: model.durationUs / 1000,\n format: options.format,\n });\n })\n .catch((error) => {\n this.setState('error');\n this.eventBus.emit(MeframeEvent.Error, {\n source: 'export',\n error: error as Error,\n context: { format: options.format },\n });\n });\n\n return readable;\n } catch (error) {\n this.setState('error');\n throw error;\n }\n }\n\n /**\n * Run the export pipeline\n */\n private async runExportPipeline(output: WritableStream<Uint8Array>, config: any): Promise<void> {\n const model = this.model!;\n const totalFrames = Math.ceil((model.durationUs / 1000000) * config.fps);\n let processedFrames = 0;\n\n // Process frames\n const frameTimeUs = 1000000 / config.fps;\n for (let timeUs = 0; timeUs < model.durationUs; timeUs += frameTimeUs) {\n // Render frame through orchestrator\n const frameHandle = await this.orchestrator.renderFrame(timeUs);\n\n // Skip if no frame (e.g., gap in timeline)\n if (frameHandle) {\n const encodeWorker = await this.orchestrator.workers.get('encode');\n await frameHandle.use(async (frame) => {\n await encodeWorker.send('encodeFrame', { frame, timeUs });\n });\n }\n\n // Update progress\n processedFrames++;\n const progress = processedFrames / totalFrames;\n this.eventBus.emit(MeframeEvent.ExportProgress, {\n progress,\n currentFrame: processedFrames,\n totalFrames,\n timeUs,\n });\n }\n\n // Flush encoder and muxer\n const encodeWorker = await this.orchestrator.workers.get('encode');\n const muxWorker = await this.orchestrator.workers.get('mux');\n\n await encodeWorker.send('flush');\n await muxWorker.send('flush');\n\n // Get final output from muxer\n const result = await muxWorker.send<void, Uint8Array>('getOutput');\n\n // Write to output stream\n const writer = output.getWriter();\n await writer.write(result);\n await writer.close();\n }\n\n /**\n * Export to buffer (convenience method)\n */\n async exportToBuffer(options: ExportOptions): Promise<ArrayBuffer> {\n const stream = await this.export(options);\n const chunks: Uint8Array[] = [];\n const reader = stream.getReader();\n\n let done = false;\n while (!done) {\n const result = await reader.read();\n done = result.done;\n if (result.value) {\n chunks.push(result.value);\n }\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n\n return result.buffer;\n }\n\n /**\n * Get current playback time\n */\n getCurrentTime(): number {\n return this.playbackController?.currentTime || 0;\n }\n\n /**\n * Clean up and destroy the instance\n */\n async dispose(): Promise<void> {\n if (this.state === 'destroyed') return;\n\n // Stop playback\n this.playbackController?.stop();\n this.playbackController?.dispose();\n this.playbackController = null;\n\n // Stop pre-render service\n this.preRenderService?.stop();\n this.preRenderService = null;\n\n // Cleanup plugins\n await this.pluginManager.disposeAll();\n\n // Dispose orchestrator (stops workers and clears cache)\n await this.orchestrator.dispose();\n\n // Clear event bus\n this.eventBus.dispose();\n\n this.setState('destroyed');\n }\n\n /**\n * Set internal state\n */\n private setState(state: MeframeState): void {\n const oldState = this.state;\n this.state = state;\n\n // Emit state change event\n // Use a generic event for now, can be added to MeframeEvent enum later\n this.eventBus.emit('state:changed' as any, {\n oldState,\n newState: state,\n });\n }\n\n /**\n * Ensure the instance is not destroyed\n */\n private ensureNotDestroyed(): void {\n if (this.state === 'destroyed') {\n throw new Error('Core instance is destroyed');\n }\n }\n\n /**\n * Ensure the instance is ready\n */\n private ensureReady(): void {\n this.ensureNotDestroyed();\n\n if (!this.model) {\n throw new Error('No composition model set');\n }\n\n if (this.state === 'loading' || this.state === 'idle') {\n throw new Error('Core is not ready');\n }\n }\n}\n"],"names":["encodeWorker","result"],"mappings":";;;;;;;;;;AAmBO,MAAM,QAAQ;AAAA;AAAA,EAEnB,QAAsB;AAAA;AAAA,EAEb;AAAA;AAAA,EAET,QAAiC;AAAA;AAAA,EAExB;AAAA;AAAA,EAEA;AAAA,EAED;AAAA,EACA;AAAA,EACA,qBAAgD;AAAA,EAChD,mBAA4C;AAAA,EAC5C;AAAA,EAEA,YAAY,QAAwB;AAC1C,SAAK,SAAS;AACd,SAAK,WAAW,IAAI,SAAA;AACpB,SAAK,SAAS,KAAK,SAAS,WAAA;AAC5B,SAAK,gBAAgB,IAAI,cAAc,IAAI;AAG3C,SAAK,eAAe,IAAI,aAAa;AAAA,MACnC,eAAe,OAAO,QAAQ,iBAAiB;AAAA,MAC/C,YAAa,OAAe;AAAA,MAC5B,aAAa,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,IAAA,CAChB;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,OAAO,SAAwB,IAAsB;AAEhE,UAAM,iBAAiB,MAAM,WAAW,EAAE,UAAU,QAAQ;AAC5D,UAAM,WAAW,IAAI,QAAQ,cAAc;AAC3C,UAAM,SAAS,WAAA;AACf,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAA4B;AACxC,SAAK,SAAS,SAAS;AAEvB,QAAI;AAEF,YAAM,KAAK,aAAa,WAAA;AAGxB,YAAM,UAAW,KAAK,OAAe;AACrC,UAAI,WAAW,MAAM,QAAQ,OAAO,GAAG;AACrC,mBAAW,UAAU,SAAS;AAE5B,cAAI,UAAU,OAAO,WAAW,YAAY,UAAU,UAAU,aAAa,QAAQ;AACnF,iBAAK,cAAc,SAAS,MAAgB;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AAEA,WAAK,SAAS,MAAM;AAAA,IACtB,SAAS,OAAO;AACd,WAAK,SAAS,OAAO;AACrB,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,OAA+D;AACvF,SAAK,mBAAA;AAGL,UAAM,mBACJ,iBAAiB,mBAAmB,QAAQ,IAAI,iBAAiB,KAAK;AAGxE,UAAM,KAAK,aAAa,oBAAoB,gBAAgB;AAC5D,SAAK,QAAQ;AACb,YAAQ,IAAI,wCAAwC,KAAK,KAAK;AAC9D,SAAK,SAAS,OAAO;AACrB,SAAK,SAAS,KAAK,aAAa,OAAO;AAAA,MACrC,YAAY,MAAM,OAAO;AAAA,MACzB,WAAW,MAAM,OAAO;AAAA,QACtB,CAAC,KAAa,UAAe,MAAM,MAAM,OAAO,UAAU;AAAA,QAC1D;AAAA,MAAA;AAAA,MAEF,YAAY,MAAM;AAAA,IAAA,CACnB;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,OAAwC;AACvD,SAAK,mBAAA;AAEL,QAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAGA,UAAM,KAAK,aAAa,WAAW,KAAK;AAGxC,SAAK,QAAQ,KAAK,aAAa;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,SAGK;AAChB,SAAK,YAAA;AAGL,UAAM,SAAS,SAAS,UAAU,KAAK;AACvC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAGA,SAAK,SAAS;AAGd,QAAI,CAAC,KAAK,oBAAoB;AAC5B,WAAK,qBAAqB,IAAI,mBAAmB,KAAK,cAAqB,KAAK,UAAU;AAAA,QACxF;AAAA,QACA,SAAS,SAAS;AAAA,MAAA,CACnB;AACD,WAAK,mBAAmB,gBAAgB,KAAK,aAAa,YAAY;AAAA,IACxE;AAGA,QAAI,CAAC,KAAK,kBAAkB;AAC1B,WAAK,mBAAmB,IAAI,iBAAiB,KAAK,cAAqB,KAAK,MAAM;AAAA,IAEpF;AAGA,WAAO,IAAI,kBAAkB,KAAK,oBAAoB,KAAK,QAAQ;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,SAA6D;AACxE,SAAK,YAAA;AACL,SAAK,SAAS,WAAW;AAEzB,QAAI;AAEF,YAAM,QAAQ,KAAK;AACnB,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AAGA,YAAM,QAAQ,QAAQ,SAAU,MAAc,cAAc,SAAS;AACrE,YAAM,SAAS,QAAQ,UAAW,MAAc,cAAc,UAAU;AACxE,YAAM,MAAM,QAAQ,OAAO,MAAM,OAAO;AACxC,YAAM,eACJ,QAAQ,iBACP,QAAQ,YAAY,YACjB,MACA,QAAQ,YAAY,SAClB,MACA,QAAQ,YAAY,WAClB,OACA;AACV,YAAM,eAAe,QAAQ,gBAAgB;AAG7C,YAAM,eAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,QAAQ,cAAc;AAAA,QAClC,YAAY,QAAQ,cAAc;AAAA,QAClC,WAAW,QAAQ;AAAA,MAAA;AAIrB,YAAM,eAAe,MAAM,KAAK,aAAa,QAAQ,IAAI,QAAQ;AACjE,YAAM,YAAY,MAAM,KAAK,aAAa,QAAQ,IAAI,KAAK;AAG3D,YAAM,aAAa,KAAK,aAAa,YAAY;AACjD,YAAM,UAAU,KAAK,aAAa,EAAE,WAAW,QAAQ,QAAQ;AAG/D,YAAM,EAAE,UAAU,SAAA,IAAa,IAAI,gBAAA;AAGnC,YAAM,gBAAgB,KAAK,kBAAkB,UAAU,YAAY;AAGnE,oBACG,KAAK,MAAM;AACV,aAAK,SAAS,OAAO;AACrB,cAAM,cAAc,KAAK,KAAM,MAAM,aAAa,MAAW,GAAG;AAChE,aAAK,SAAS,KAAK,aAAa,gBAAgB;AAAA,UAC9C,MAAM,QAAQ,SAAS,cAAc;AAAA;AAAA,UACrC,YAAY,MAAM,aAAa;AAAA,UAC/B,QAAQ,QAAQ;AAAA,QAAA,CACjB;AAAA,MACH,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,aAAK,SAAS,OAAO;AACrB,aAAK,SAAS,KAAK,aAAa,OAAO;AAAA,UACrC,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,EAAE,QAAQ,QAAQ,OAAA;AAAA,QAAO,CACnC;AAAA,MACH,CAAC;AAEH,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,SAAS,OAAO;AACrB,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,QAAoC,QAA4B;AAC9F,UAAM,QAAQ,KAAK;AACnB,UAAM,cAAc,KAAK,KAAM,MAAM,aAAa,MAAW,OAAO,GAAG;AACvE,QAAI,kBAAkB;AAGtB,UAAM,cAAc,MAAU,OAAO;AACrC,aAAS,SAAS,GAAG,SAAS,MAAM,YAAY,UAAU,aAAa;AAErE,YAAM,cAAc,MAAM,KAAK,aAAa,YAAY,MAAM;AAG9D,UAAI,aAAa;AACf,cAAMA,gBAAe,MAAM,KAAK,aAAa,QAAQ,IAAI,QAAQ;AACjE,cAAM,YAAY,IAAI,OAAO,UAAU;AACrC,gBAAMA,cAAa,KAAK,eAAe,EAAE,OAAO,QAAQ;AAAA,QAC1D,CAAC;AAAA,MACH;AAGA;AACA,YAAM,WAAW,kBAAkB;AACnC,WAAK,SAAS,KAAK,aAAa,gBAAgB;AAAA,QAC9C;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAGA,UAAM,eAAe,MAAM,KAAK,aAAa,QAAQ,IAAI,QAAQ;AACjE,UAAM,YAAY,MAAM,KAAK,aAAa,QAAQ,IAAI,KAAK;AAE3D,UAAM,aAAa,KAAK,OAAO;AAC/B,UAAM,UAAU,KAAK,OAAO;AAG5B,UAAM,SAAS,MAAM,UAAU,KAAuB,WAAW;AAGjE,UAAM,SAAS,OAAO,UAAA;AACtB,UAAM,OAAO,MAAM,MAAM;AACzB,UAAM,OAAO,MAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,SAA8C;AACjE,UAAM,SAAS,MAAM,KAAK,OAAO,OAAO;AACxC,UAAM,SAAuB,CAAA;AAC7B,UAAM,SAAS,OAAO,UAAA;AAEtB,QAAI,OAAO;AACX,WAAO,CAAC,MAAM;AACZ,YAAMC,UAAS,MAAM,OAAO,KAAA;AAC5B,aAAOA,QAAO;AACd,UAAIA,QAAO,OAAO;AAChB,eAAO,KAAKA,QAAO,KAAK;AAAA,MAC1B;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC;AACvE,UAAM,SAAS,IAAI,WAAW,WAAW;AACzC,QAAI,SAAS;AAEb,eAAW,SAAS,QAAQ;AAC1B,aAAO,IAAI,OAAO,MAAM;AACxB,gBAAU,MAAM;AAAA,IAClB;AAEA,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAyB;AACvB,WAAO,KAAK,oBAAoB,eAAe;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAyB;AAC7B,QAAI,KAAK,UAAU,YAAa;AAGhC,SAAK,oBAAoB,KAAA;AACzB,SAAK,oBAAoB,QAAA;AACzB,SAAK,qBAAqB;AAG1B,SAAK,kBAAkB,KAAA;AACvB,SAAK,mBAAmB;AAGxB,UAAM,KAAK,cAAc,WAAA;AAGzB,UAAM,KAAK,aAAa,QAAA;AAGxB,SAAK,SAAS,QAAA;AAEd,SAAK,SAAS,WAAW;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAS,OAA2B;AAC1C,UAAM,WAAW,KAAK;AACtB,SAAK,QAAQ;AAIb,SAAK,SAAS,KAAK,iBAAwB;AAAA,MACzC;AAAA,MACA,UAAU;AAAA,IAAA,CACX;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAA2B;AACjC,QAAI,KAAK,UAAU,aAAa;AAC9B,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAoB;AAC1B,SAAK,mBAAA;AAEL,QAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAEA,QAAI,KAAK,UAAU,aAAa,KAAK,UAAU,QAAQ;AACrD,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACrC;AAAA,EACF;AACF;"}
@@ -0,0 +1,5 @@
1
+ var mp4box_all = {};
2
+ export {
3
+ mp4box_all as __exports
4
+ };
5
+ //# sourceMappingURL=mp4box.all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp4box.all.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,25 @@
1
+ import { L2Cache } from './L2Cache';
2
+
3
+ interface BatchConfig {
4
+ batchSize?: number;
5
+ flushIntervalMs?: number;
6
+ }
7
+ /**
8
+ * Batch writer for optimizing L2 cache writes
9
+ * Accumulates chunks and writes them in batches to reduce I/O operations
10
+ */
11
+ export declare class BatchWriter {
12
+ private readonly l2Cache;
13
+ private readonly batchSize;
14
+ private readonly flushIntervalMs;
15
+ private batches;
16
+ private flushTimer;
17
+ constructor(l2Cache: L2Cache, config?: BatchConfig);
18
+ write(clipHash: string, chunk: EncodedVideoChunk | EncodedAudioChunk, track: 'video' | 'audio'): Promise<void>;
19
+ flush(): Promise<void>;
20
+ private flushBatch;
21
+ private scheduleFlush;
22
+ destroy(): void;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=BatchWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchWriter.d.ts","sourceRoot":"","sources":["../../src/cache/BatchWriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,OAAO,CAAC,OAAO,CAAmE;IAClF,OAAO,CAAC,UAAU,CAA8C;gBAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW;IAM5C,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,EAC5C,KAAK,EAAE,OAAO,GAAG,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IAmBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAgBd,UAAU;IAgBxB,OAAO,CAAC,aAAa;IASrB,OAAO,IAAI,IAAI;CAOhB"}
@@ -0,0 +1,115 @@
1
+ import { TimeUs } from '../model/types';
2
+ import { RcFrame, CompositionModel } from '../model';
3
+ import { GOP } from './types';
4
+ import { L2Cache } from './L2Cache';
5
+ import { EventBus } from '../event/EventBus';
6
+ import { EventPayloadMap } from '../event/events';
7
+
8
+ interface CacheManagerConfig {
9
+ l1: {
10
+ maxMemoryMB: number;
11
+ maxGOPs?: number;
12
+ gopIntervalUs?: number;
13
+ };
14
+ l2: {
15
+ maxSizeMB: number;
16
+ projectId: string;
17
+ };
18
+ }
19
+ interface WaitForFrameOptions {
20
+ signal?: AbortSignal;
21
+ timeoutMs?: number;
22
+ toleranceUs?: number;
23
+ }
24
+ export interface WaitForFrameResult {
25
+ frame: RcFrame | null;
26
+ source: 'l1' | 'wait';
27
+ timestampUs: TimeUs;
28
+ clipId: string;
29
+ }
30
+ /**
31
+ * Simplified CacheManager for 3-Clip strategy
32
+ *
33
+ * Core features:
34
+ * - L1 (VRAM) for composed VideoFrames
35
+ * - L2 (IndexedDB/OPFS) for encoded chunks
36
+ * - Clip-level cache management
37
+ */
38
+ export declare class CacheManager {
39
+ private readonly videoL1Cache;
40
+ private readonly audioL1Cache;
41
+ private readonly mixedAudioL1Cache;
42
+ readonly l2Cache: L2Cache;
43
+ private pendingFramePromises;
44
+ private frameWaiters;
45
+ private clipReadyWaiters;
46
+ private eventBus?;
47
+ constructor(config: CacheManagerConfig, eventBus?: EventBus<EventPayloadMap>);
48
+ init(): Promise<void>;
49
+ configure(_model: CompositionModel | null): void;
50
+ acceptComposedFrames(stream: ReadableStream<VideoFrame | {
51
+ frame: VideoFrame;
52
+ metadata?: any;
53
+ }>, params: {
54
+ clipId: string;
55
+ trackId: string;
56
+ fps: number;
57
+ onFrame: (info: {
58
+ clipId: string;
59
+ timeUs: TimeUs;
60
+ }) => void;
61
+ }): void;
62
+ acceptEncodedChunks(stream: ReadableStream<EncodedVideoChunk | EncodedAudioChunk>, clipId: string, track: 'video' | 'audio'): void;
63
+ acceptMixedAudio(stream: ReadableStream<AudioData>, metadata: {
64
+ sampleRate: number;
65
+ numberOfChannels: number;
66
+ }): void;
67
+ putClipAudioData(clipId: string, audioData: AudioData, clipStartUs: TimeUs, clipDurationUs: TimeUs): void;
68
+ getClipPCM(clipId: string, startUs: TimeUs, endUs: TimeUs): Float32Array[] | null;
69
+ hasClipPCM(clipId: string): boolean;
70
+ putMixedAudio(startUs: TimeUs, endUs: TimeUs, buffer: AudioBuffer): void;
71
+ getMixedAudio(startUs: TimeUs, endUs: TimeUs): AudioBuffer | null;
72
+ resetAudioCache(): void;
73
+ getFrame(timeUs: TimeUs, clipId: string): Promise<RcFrame | null>;
74
+ waitForFrame(timeUs: TimeUs, clipId: string, options?: WaitForFrameOptions): Promise<WaitForFrameResult>;
75
+ putGOP(gop: GOP): Promise<void>;
76
+ putEncodedChunks(clipHash: string, chunks: Array<EncodedVideoChunk | EncodedAudioChunk>, track: 'video' | 'audio'): Promise<void>;
77
+ invalidateRange(startUs: TimeUs, endUs: TimeUs, clipId?: string): void;
78
+ invalidateClip(clipId: string): Promise<void>;
79
+ /**
80
+ * Evict a clip from L1 cache
81
+ */
82
+ evictClip(clipId: string): void;
83
+ /**
84
+ * Check if a clip is cached in L1
85
+ */
86
+ isClipCached(clipId: string): boolean;
87
+ /**
88
+ * Wait for a clip to have minimum frames cached
89
+ * Used by PlaybackController for buffering state
90
+ */
91
+ waitForClipReady(clipId: string, options?: {
92
+ minFrameCount?: number;
93
+ timeoutMs?: number;
94
+ }): Promise<boolean>;
95
+ clear(): Promise<void>;
96
+ getMetadata(): {
97
+ l1: import('./l1/VideoL1Cache').L1CacheMetadata;
98
+ l2: {
99
+ maxSizeMB: number;
100
+ usedSizeMB: number;
101
+ entries: number;
102
+ hitRate: number;
103
+ };
104
+ };
105
+ private decodeFromL2;
106
+ private encodeToL2;
107
+ private notifyFrameWaiters;
108
+ private notifyClipReadyWaiters;
109
+ private cleanupWaiter;
110
+ private removeWaiter;
111
+ private matchesTimestamp;
112
+ private makeRequestKey;
113
+ }
114
+ export {};
115
+ //# sourceMappingURL=CacheManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../src/cache/CacheManager.ts"],"names":[],"mappings":"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"}