@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.
- package/CHANGELOG.md +42 -0
- package/LICENSE +22 -0
- package/README.md +396 -0
- package/dist/Meframe.d.ts +82 -0
- package/dist/Meframe.d.ts.map +1 -0
- package/dist/Meframe.js +290 -0
- package/dist/Meframe.js.map +1 -0
- package/dist/_virtual/mp4box.all.js +5 -0
- package/dist/_virtual/mp4box.all.js.map +1 -0
- package/dist/cache/BatchWriter.d.ts +25 -0
- package/dist/cache/BatchWriter.d.ts.map +1 -0
- package/dist/cache/CacheManager.d.ts +115 -0
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +388 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/cache/CacheStatsDecorator.d.ts +27 -0
- package/dist/cache/CacheStatsDecorator.d.ts.map +1 -0
- package/dist/cache/L2Cache.d.ts +39 -0
- package/dist/cache/L2Cache.d.ts.map +1 -0
- package/dist/cache/L2Cache.js +282 -0
- package/dist/cache/L2Cache.js.map +1 -0
- package/dist/cache/index.d.ts +7 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/l1/AudioL1Cache.d.ts +30 -0
- package/dist/cache/l1/AudioL1Cache.d.ts.map +1 -0
- package/dist/cache/l1/AudioL1Cache.js +306 -0
- package/dist/cache/l1/AudioL1Cache.js.map +1 -0
- package/dist/cache/l1/MixedAudioL1Cache.d.ts +13 -0
- package/dist/cache/l1/MixedAudioL1Cache.d.ts.map +1 -0
- package/dist/cache/l1/MixedAudioL1Cache.js +52 -0
- package/dist/cache/l1/MixedAudioL1Cache.js.map +1 -0
- package/dist/cache/l1/VideoL1Cache.d.ts +69 -0
- package/dist/cache/l1/VideoL1Cache.d.ts.map +1 -0
- package/dist/cache/l1/VideoL1Cache.js +318 -0
- package/dist/cache/l1/VideoL1Cache.js.map +1 -0
- package/dist/cache/l1/gop-utils.d.ts +10 -0
- package/dist/cache/l1/gop-utils.d.ts.map +1 -0
- package/dist/cache/l1/gop-utils.js +78 -0
- package/dist/cache/l1/gop-utils.js.map +1 -0
- package/dist/cache/l1/index.d.ts +4 -0
- package/dist/cache/l1/index.d.ts.map +1 -0
- package/dist/cache/l1/types.d.ts +17 -0
- package/dist/cache/l1/types.d.ts.map +1 -0
- package/dist/cache/types.d.ts +93 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/config/ConfigLoader.d.ts +69 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +133 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/defaults.d.ts +125 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +191 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/presets.d.ts +32 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +11 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/types.d.ts +199 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/validation.d.ts +19 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +232 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/controllers/PlaybackController.d.ts +55 -0
- package/dist/controllers/PlaybackController.d.ts.map +1 -0
- package/dist/controllers/PlaybackController.js +369 -0
- package/dist/controllers/PlaybackController.js.map +1 -0
- package/dist/controllers/PreRenderService.d.ts +34 -0
- package/dist/controllers/PreRenderService.d.ts.map +1 -0
- package/dist/controllers/PreRenderService.js +83 -0
- package/dist/controllers/PreRenderService.js.map +1 -0
- package/dist/controllers/PreRenderTaskQueue.d.ts +21 -0
- package/dist/controllers/PreRenderTaskQueue.d.ts.map +1 -0
- package/dist/controllers/PreviewHandle.d.ts +23 -0
- package/dist/controllers/PreviewHandle.d.ts.map +1 -0
- package/dist/controllers/PreviewHandle.js +39 -0
- package/dist/controllers/PreviewHandle.js.map +1 -0
- package/dist/controllers/index.d.ts +8 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/types.d.ts +102 -0
- package/dist/controllers/types.d.ts.map +1 -0
- package/dist/event/EventBus.d.ts +42 -0
- package/dist/event/EventBus.d.ts.map +1 -0
- package/dist/event/EventBus.js +94 -0
- package/dist/event/EventBus.js.map +1 -0
- package/dist/event/events.d.ts +371 -0
- package/dist/event/events.d.ts.map +1 -0
- package/dist/event/events.js +71 -0
- package/dist/event/events.js.map +1 -0
- package/dist/event/index.d.ts +4 -0
- package/dist/event/index.d.ts.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/model/CompositionModel.d.ts +48 -0
- package/dist/model/CompositionModel.d.ts.map +1 -0
- package/dist/model/CompositionModel.js +197 -0
- package/dist/model/CompositionModel.js.map +1 -0
- package/dist/model/RcFrame.d.ts +34 -0
- package/dist/model/RcFrame.d.ts.map +1 -0
- package/dist/model/RcFrame.js +97 -0
- package/dist/model/RcFrame.js.map +1 -0
- package/dist/model/dirty-range.d.ts +5 -0
- package/dist/model/dirty-range.d.ts.map +1 -0
- package/dist/model/dirty-range.js +220 -0
- package/dist/model/dirty-range.js.map +1 -0
- package/dist/model/index.d.ts +7 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/patch.d.ts +5 -0
- package/dist/model/patch.d.ts.map +1 -0
- package/dist/model/patch.js +250 -0
- package/dist/model/patch.js.map +1 -0
- package/dist/model/types.d.ts +135 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +5 -0
- package/dist/model/types.js.map +1 -0
- package/dist/model/validation.d.ts +15 -0
- package/dist/model/validation.d.ts.map +1 -0
- package/dist/model/validation.js +74 -0
- package/dist/model/validation.js.map +1 -0
- package/dist/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js +7046 -0
- package/dist/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js.map +1 -0
- package/dist/orchestrator/ClipSessionManager.d.ts +75 -0
- package/dist/orchestrator/ClipSessionManager.d.ts.map +1 -0
- package/dist/orchestrator/ClipSessionManager.js +160 -0
- package/dist/orchestrator/ClipSessionManager.js.map +1 -0
- package/dist/orchestrator/CompositionPlanner.d.ts +55 -0
- package/dist/orchestrator/CompositionPlanner.d.ts.map +1 -0
- package/dist/orchestrator/CompositionPlanner.js +411 -0
- package/dist/orchestrator/CompositionPlanner.js.map +1 -0
- package/dist/orchestrator/Orchestrator.d.ts +59 -0
- package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/Orchestrator.js +390 -0
- package/dist/orchestrator/Orchestrator.js.map +1 -0
- package/dist/orchestrator/VideoClipSession.d.ts +64 -0
- package/dist/orchestrator/VideoClipSession.d.ts.map +1 -0
- package/dist/orchestrator/VideoClipSession.js +309 -0
- package/dist/orchestrator/VideoClipSession.js.map +1 -0
- package/dist/orchestrator/index.d.ts +5 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/types.d.ts +64 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/plugins/BackpressureMonitor.d.ts +33 -0
- package/dist/plugins/BackpressureMonitor.d.ts.map +1 -0
- package/dist/plugins/BackpressureMonitor.js +62 -0
- package/dist/plugins/BackpressureMonitor.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +37 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +66 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/types.d.ts +60 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/stages/compose/AudioDucker.d.ts +59 -0
- package/dist/stages/compose/AudioDucker.d.ts.map +1 -0
- package/dist/stages/compose/AudioDucker.js +161 -0
- package/dist/stages/compose/AudioDucker.js.map +1 -0
- package/dist/stages/compose/AudioMixer.d.ts +29 -0
- package/dist/stages/compose/AudioMixer.d.ts.map +1 -0
- package/dist/stages/compose/AudioMixer.js +373 -0
- package/dist/stages/compose/AudioMixer.js.map +1 -0
- package/dist/stages/compose/FilterProcessor.d.ts +41 -0
- package/dist/stages/compose/FilterProcessor.d.ts.map +1 -0
- package/dist/stages/compose/FilterProcessor.js +226 -0
- package/dist/stages/compose/FilterProcessor.js.map +1 -0
- package/dist/stages/compose/GlobalAudioSession.d.ts +38 -0
- package/dist/stages/compose/GlobalAudioSession.d.ts.map +1 -0
- package/dist/stages/compose/GlobalAudioSession.js +122 -0
- package/dist/stages/compose/GlobalAudioSession.js.map +1 -0
- package/dist/stages/compose/LayerRenderer.d.ts +30 -0
- package/dist/stages/compose/LayerRenderer.d.ts.map +1 -0
- package/dist/stages/compose/LayerRenderer.js +215 -0
- package/dist/stages/compose/LayerRenderer.js.map +1 -0
- package/dist/stages/compose/OfflineAudioMixer.d.ts +14 -0
- package/dist/stages/compose/OfflineAudioMixer.d.ts.map +1 -0
- package/dist/stages/compose/OfflineAudioMixer.js +68 -0
- package/dist/stages/compose/OfflineAudioMixer.js.map +1 -0
- package/dist/stages/compose/TransitionProcessor.d.ts +30 -0
- package/dist/stages/compose/TransitionProcessor.d.ts.map +1 -0
- package/dist/stages/compose/TransitionProcessor.js +189 -0
- package/dist/stages/compose/TransitionProcessor.js.map +1 -0
- package/dist/stages/compose/VideoComposer.d.ts +30 -0
- package/dist/stages/compose/VideoComposer.d.ts.map +1 -0
- package/dist/stages/compose/VideoComposer.js +186 -0
- package/dist/stages/compose/VideoComposer.js.map +1 -0
- package/dist/stages/compose/audio-compose.worker.d.ts +79 -0
- package/dist/stages/compose/audio-compose.worker.d.ts.map +1 -0
- package/dist/stages/compose/audio-compose.worker.js +541 -0
- package/dist/stages/compose/audio-compose.worker.js.map +1 -0
- package/dist/stages/compose/instructions.d.ts +95 -0
- package/dist/stages/compose/instructions.d.ts.map +1 -0
- package/dist/stages/compose/types.d.ts +245 -0
- package/dist/stages/compose/types.d.ts.map +1 -0
- package/dist/stages/compose/video-compose.worker.d.ts +60 -0
- package/dist/stages/compose/video-compose.worker.d.ts.map +1 -0
- package/dist/stages/compose/video-compose.worker.js +369 -0
- package/dist/stages/compose/video-compose.worker.js.map +1 -0
- package/dist/stages/decode/AudioChunkDecoder.d.ts +41 -0
- package/dist/stages/decode/AudioChunkDecoder.d.ts.map +1 -0
- package/dist/stages/decode/AudioChunkDecoder.js +83 -0
- package/dist/stages/decode/AudioChunkDecoder.js.map +1 -0
- package/dist/stages/decode/BaseDecoder.d.ts +35 -0
- package/dist/stages/decode/BaseDecoder.d.ts.map +1 -0
- package/dist/stages/decode/BaseDecoder.js +130 -0
- package/dist/stages/decode/BaseDecoder.js.map +1 -0
- package/dist/stages/decode/VideoChunkDecoder.d.ts +54 -0
- package/dist/stages/decode/VideoChunkDecoder.d.ts.map +1 -0
- package/dist/stages/decode/VideoChunkDecoder.js +209 -0
- package/dist/stages/decode/VideoChunkDecoder.js.map +1 -0
- package/dist/stages/decode/decode.worker.d.ts +70 -0
- package/dist/stages/decode/decode.worker.d.ts.map +1 -0
- package/dist/stages/decode/decode.worker.js +436 -0
- package/dist/stages/decode/decode.worker.js.map +1 -0
- package/dist/stages/decode/index.d.ts +5 -0
- package/dist/stages/decode/index.d.ts.map +1 -0
- package/dist/stages/decode/types.d.ts +108 -0
- package/dist/stages/decode/types.d.ts.map +1 -0
- package/dist/stages/demux/MP3FrameParser.d.ts +33 -0
- package/dist/stages/demux/MP3FrameParser.d.ts.map +1 -0
- package/dist/stages/demux/MP3FrameParser.js +186 -0
- package/dist/stages/demux/MP3FrameParser.js.map +1 -0
- package/dist/stages/demux/MP4Demuxer.d.ts +45 -0
- package/dist/stages/demux/MP4Demuxer.d.ts.map +1 -0
- package/dist/stages/demux/MP4Demuxer.js +227 -0
- package/dist/stages/demux/MP4Demuxer.js.map +1 -0
- package/dist/stages/demux/aac-esds-extractor.d.ts +7 -0
- package/dist/stages/demux/aac-esds-extractor.d.ts.map +1 -0
- package/dist/stages/demux/audio-demux.worker.d.ts +51 -0
- package/dist/stages/demux/audio-demux.worker.d.ts.map +1 -0
- package/dist/stages/demux/audio-demux.worker.js +312 -0
- package/dist/stages/demux/audio-demux.worker.js.map +1 -0
- package/dist/stages/demux/types.d.ts +77 -0
- package/dist/stages/demux/types.d.ts.map +1 -0
- package/dist/stages/demux/video-demux.worker.d.ts +48 -0
- package/dist/stages/demux/video-demux.worker.d.ts.map +1 -0
- package/dist/stages/demux/video-demux.worker.js +173 -0
- package/dist/stages/demux/video-demux.worker.js.map +1 -0
- package/dist/stages/encode/AudioChunkEncoder.d.ts +21 -0
- package/dist/stages/encode/AudioChunkEncoder.d.ts.map +1 -0
- package/dist/stages/encode/AudioChunkEncoder.js +37 -0
- package/dist/stages/encode/AudioChunkEncoder.js.map +1 -0
- package/dist/stages/encode/BaseEncoder.d.ts +44 -0
- package/dist/stages/encode/BaseEncoder.d.ts.map +1 -0
- package/dist/stages/encode/BaseEncoder.js +164 -0
- package/dist/stages/encode/BaseEncoder.js.map +1 -0
- package/dist/stages/encode/EncoderPool.d.ts +28 -0
- package/dist/stages/encode/EncoderPool.d.ts.map +1 -0
- package/dist/stages/encode/VideoChunkEncoder.d.ts +26 -0
- package/dist/stages/encode/VideoChunkEncoder.d.ts.map +1 -0
- package/dist/stages/encode/VideoChunkEncoder.js +50 -0
- package/dist/stages/encode/VideoChunkEncoder.js.map +1 -0
- package/dist/stages/encode/encode.worker.d.ts +3 -0
- package/dist/stages/encode/encode.worker.d.ts.map +1 -0
- package/dist/stages/encode/encode.worker.js +318 -0
- package/dist/stages/encode/encode.worker.js.map +1 -0
- package/dist/stages/encode/index.d.ts +6 -0
- package/dist/stages/encode/index.d.ts.map +1 -0
- package/dist/stages/encode/types.d.ts +127 -0
- package/dist/stages/encode/types.d.ts.map +1 -0
- package/dist/stages/load/EventHandlers.d.ts +35 -0
- package/dist/stages/load/EventHandlers.d.ts.map +1 -0
- package/dist/stages/load/EventHandlers.js +65 -0
- package/dist/stages/load/EventHandlers.js.map +1 -0
- package/dist/stages/load/ResourceLoader.d.ts +36 -0
- package/dist/stages/load/ResourceLoader.d.ts.map +1 -0
- package/dist/stages/load/ResourceLoader.js +184 -0
- package/dist/stages/load/ResourceLoader.js.map +1 -0
- package/dist/stages/load/StreamFactory.d.ts +42 -0
- package/dist/stages/load/StreamFactory.d.ts.map +1 -0
- package/dist/stages/load/StreamFactory.js +201 -0
- package/dist/stages/load/StreamFactory.js.map +1 -0
- package/dist/stages/load/TaskManager.d.ts +50 -0
- package/dist/stages/load/TaskManager.d.ts.map +1 -0
- package/dist/stages/load/TaskManager.js +103 -0
- package/dist/stages/load/TaskManager.js.map +1 -0
- package/dist/stages/load/WindowByteRangeResolver.d.ts +47 -0
- package/dist/stages/load/WindowByteRangeResolver.d.ts.map +1 -0
- package/dist/stages/load/WindowByteRangeResolver.js +270 -0
- package/dist/stages/load/WindowByteRangeResolver.js.map +1 -0
- package/dist/stages/load/index.d.ts +11 -0
- package/dist/stages/load/index.d.ts.map +1 -0
- package/dist/stages/load/types.d.ts +177 -0
- package/dist/stages/load/types.d.ts.map +1 -0
- package/dist/stages/mux/MP4Muxer.d.ts +44 -0
- package/dist/stages/mux/MP4Muxer.d.ts.map +1 -0
- package/dist/stages/mux/MP4Muxer.js +262 -0
- package/dist/stages/mux/MP4Muxer.js.map +1 -0
- package/dist/stages/mux/OPFSWriter.d.ts +46 -0
- package/dist/stages/mux/OPFSWriter.d.ts.map +1 -0
- package/dist/stages/mux/index.d.ts +5 -0
- package/dist/stages/mux/index.d.ts.map +1 -0
- package/dist/stages/mux/mux.worker.d.ts +65 -0
- package/dist/stages/mux/mux.worker.d.ts.map +1 -0
- package/dist/stages/mux/mux.worker.js +219 -0
- package/dist/stages/mux/mux.worker.js.map +1 -0
- package/dist/stages/mux/types.d.ts +95 -0
- package/dist/stages/mux/types.d.ts.map +1 -0
- package/dist/stages/mux/utils.d.ts +32 -0
- package/dist/stages/mux/utils.d.ts.map +1 -0
- package/dist/stages/mux/utils.js +34 -0
- package/dist/stages/mux/utils.js.map +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/BackpressureAdapter.d.ts +26 -0
- package/dist/utils/BackpressureAdapter.d.ts.map +1 -0
- package/dist/utils/binary-search.d.ts +33 -0
- package/dist/utils/binary-search.d.ts.map +1 -0
- package/dist/utils/binary-search.js +62 -0
- package/dist/utils/binary-search.js.map +1 -0
- package/dist/utils/canvas-utils.d.ts +96 -0
- package/dist/utils/canvas-utils.d.ts.map +1 -0
- package/dist/utils/canvas-utils.js +58 -0
- package/dist/utils/canvas-utils.js.map +1 -0
- package/dist/utils/object-utils.d.ts +34 -0
- package/dist/utils/object-utils.d.ts.map +1 -0
- package/dist/utils/object-utils.js +22 -0
- package/dist/utils/object-utils.js.map +1 -0
- package/dist/utils/time-utils.d.ts +10 -0
- package/dist/utils/time-utils.d.ts.map +1 -0
- package/dist/utils/time-utils.js +60 -0
- package/dist/utils/time-utils.js.map +1 -0
- package/dist/worker/BaseWorker.d.ts +44 -0
- package/dist/worker/BaseWorker.d.ts.map +1 -0
- package/dist/worker/BaseWorker.js +98 -0
- package/dist/worker/BaseWorker.js.map +1 -0
- package/dist/worker/WorkerChannel.d.ts +105 -0
- package/dist/worker/WorkerChannel.d.ts.map +1 -0
- package/dist/worker/WorkerChannel.js +355 -0
- package/dist/worker/WorkerChannel.js.map +1 -0
- package/dist/worker/WorkerPool.d.ts +52 -0
- package/dist/worker/WorkerPool.d.ts.map +1 -0
- package/dist/worker/WorkerPool.js +124 -0
- package/dist/worker/WorkerPool.js.map +1 -0
- package/dist/worker/index.d.ts +11 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/transferable-helper.d.ts +89 -0
- package/dist/worker/transferable-helper.d.ts.map +1 -0
- package/dist/worker/transferable-helper.js +44 -0
- package/dist/worker/transferable-helper.js.map +1 -0
- package/dist/worker/types.d.ts +179 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +50 -0
- package/dist/worker/types.js.map +1 -0
- package/dist/worker/worker-event-whitelist.d.ts +23 -0
- package/dist/worker/worker-event-whitelist.d.ts.map +1 -0
- package/dist/worker/worker-retry.d.ts +36 -0
- package/dist/worker/worker-retry.d.ts.map +1 -0
- package/dist/worker/worker-retry.js +55 -0
- package/dist/worker/worker-retry.js.map +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cache/l1/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TimeUs } from '../../model/types';
|
|
2
|
+
|
|
3
|
+
export interface L1Config {
|
|
4
|
+
maxMemoryMB: number;
|
|
5
|
+
maxGOPs?: number;
|
|
6
|
+
gopIntervalUs?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AudioSlot {
|
|
9
|
+
timestampUs: TimeUs;
|
|
10
|
+
durationUs: TimeUs;
|
|
11
|
+
planes: Float32Array[];
|
|
12
|
+
}
|
|
13
|
+
export interface AudioMetadata {
|
|
14
|
+
sampleRate: number;
|
|
15
|
+
numberOfChannels: number;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/l1/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { RcFrame } from '../model';
|
|
2
|
+
import { TimeUs } from '../model/types';
|
|
3
|
+
|
|
4
|
+
export interface CacheConfig {
|
|
5
|
+
/** Maximum L1 cache size in bytes */
|
|
6
|
+
maxL1Size: number;
|
|
7
|
+
/** Maximum L2 cache size in bytes */
|
|
8
|
+
maxL2Size: number;
|
|
9
|
+
/** Cache eviction policy */
|
|
10
|
+
evictionPolicy: 'lru' | 'lfu' | 'fifo';
|
|
11
|
+
/** Prefetch window in microseconds */
|
|
12
|
+
prefetchWindowUs: TimeUs;
|
|
13
|
+
/** Retention window in microseconds */
|
|
14
|
+
retentionWindowUs: TimeUs;
|
|
15
|
+
}
|
|
16
|
+
export interface CacheStats {
|
|
17
|
+
/** L1 cache statistics */
|
|
18
|
+
l1: {
|
|
19
|
+
size: number;
|
|
20
|
+
maxSize: number;
|
|
21
|
+
hitRate: number;
|
|
22
|
+
missRate: number;
|
|
23
|
+
evictions: number;
|
|
24
|
+
entries: number;
|
|
25
|
+
};
|
|
26
|
+
/** L2 cache statistics */
|
|
27
|
+
l2: {
|
|
28
|
+
size: number;
|
|
29
|
+
maxSize: number;
|
|
30
|
+
hitRate: number;
|
|
31
|
+
missRate: number;
|
|
32
|
+
evictions: number;
|
|
33
|
+
entries: number;
|
|
34
|
+
};
|
|
35
|
+
/** Overall statistics */
|
|
36
|
+
total: {
|
|
37
|
+
hits: number;
|
|
38
|
+
misses: number;
|
|
39
|
+
hitRate: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface CacheEntry<T> {
|
|
43
|
+
/** Entry key */
|
|
44
|
+
key: string;
|
|
45
|
+
/** Cached data */
|
|
46
|
+
data: T;
|
|
47
|
+
/** Size in bytes */
|
|
48
|
+
size: number;
|
|
49
|
+
/** Creation timestamp */
|
|
50
|
+
createdAt: number;
|
|
51
|
+
/** Last access timestamp */
|
|
52
|
+
lastAccessedAt: number;
|
|
53
|
+
/** Access count */
|
|
54
|
+
accessCount: number;
|
|
55
|
+
/** Pin tokens referencing this entry (window aware retention). @better-ai.mdc retain window */
|
|
56
|
+
pinnedBy?: Set<string>;
|
|
57
|
+
}
|
|
58
|
+
export interface GOP {
|
|
59
|
+
/** GOP index */
|
|
60
|
+
index: number;
|
|
61
|
+
/** Start time in microseconds */
|
|
62
|
+
startUs: TimeUs;
|
|
63
|
+
/** Duration in microseconds */
|
|
64
|
+
durationUs: TimeUs;
|
|
65
|
+
/** Video frames in this GOP */
|
|
66
|
+
frames: RcFrame[];
|
|
67
|
+
/** Whether this GOP starts with a keyframe */
|
|
68
|
+
isKeyframe: boolean;
|
|
69
|
+
/** Clip ID for clip-aware caching */
|
|
70
|
+
clipId: string;
|
|
71
|
+
}
|
|
72
|
+
export interface ClipMetadata {
|
|
73
|
+
/** Clip identifier */
|
|
74
|
+
id: string;
|
|
75
|
+
/** Clip hash for cache key */
|
|
76
|
+
hash: string;
|
|
77
|
+
/** Start time in composition */
|
|
78
|
+
startUs: TimeUs;
|
|
79
|
+
/** Duration */
|
|
80
|
+
durationUs: TimeUs;
|
|
81
|
+
/** Number of chunks */
|
|
82
|
+
chunkCount: number;
|
|
83
|
+
/** Total size in bytes */
|
|
84
|
+
totalBytes: number;
|
|
85
|
+
/** Codec configuration */
|
|
86
|
+
codecConfig?: {
|
|
87
|
+
codec: string;
|
|
88
|
+
width?: number;
|
|
89
|
+
height?: number;
|
|
90
|
+
bitrate?: number;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cache/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,cAAc,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAEvC,sCAAsC;IACtC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,EAAE,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,0BAA0B;IAC1B,EAAE,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,yBAAyB;IACzB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;IAEZ,kBAAkB;IAClB,IAAI,EAAE,CAAC,CAAC;IAER,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IAEvB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,GAAG;IAClB,gBAAgB;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,MAAM,EAAE,OAAO,EAAE,CAAC;IAElB,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;IAEpB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IAEX,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAEhB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IAEnB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IAEnB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IAEnB,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { MeframeConfig, ResolvedConfig, ConfigLoaderOptions } from './types';
|
|
2
|
+
import { TUNING_PRESETS } from './defaults';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Configuration loader for Meframe
|
|
6
|
+
* Handles loading, validation, and resolution of configuration
|
|
7
|
+
*/
|
|
8
|
+
export declare class ConfigLoader {
|
|
9
|
+
private static instance;
|
|
10
|
+
private config;
|
|
11
|
+
private userConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Get singleton instance
|
|
14
|
+
*/
|
|
15
|
+
static getInstance(): ConfigLoader;
|
|
16
|
+
/**
|
|
17
|
+
* Load and resolve configuration
|
|
18
|
+
* In build time, this would be handled by Vite/Rollup virtual module plugin
|
|
19
|
+
* At runtime, we use defaults or provided overrides
|
|
20
|
+
*/
|
|
21
|
+
load(options?: ConfigLoaderOptions): Promise<ResolvedConfig>;
|
|
22
|
+
/**
|
|
23
|
+
* Get current resolved configuration
|
|
24
|
+
*/
|
|
25
|
+
getConfig(): ResolvedConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Apply a tuning preset
|
|
28
|
+
*/
|
|
29
|
+
applyPreset(presetName: keyof typeof TUNING_PRESETS): ResolvedConfig;
|
|
30
|
+
/**
|
|
31
|
+
* Update configuration at runtime
|
|
32
|
+
*/
|
|
33
|
+
update(partial: MeframeConfig): ResolvedConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Reset to defaults
|
|
36
|
+
*/
|
|
37
|
+
reset(): ResolvedConfig;
|
|
38
|
+
/**
|
|
39
|
+
* Clear singleton instance (mainly for testing)
|
|
40
|
+
*/
|
|
41
|
+
static clearInstance(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve configuration by merging with defaults
|
|
44
|
+
* Each stage resolves its own configuration section
|
|
45
|
+
*/
|
|
46
|
+
private resolveConfig;
|
|
47
|
+
/**
|
|
48
|
+
* Load configuration from virtual module
|
|
49
|
+
* This would be injected by Vite/Rollup at build time
|
|
50
|
+
*/
|
|
51
|
+
private loadFromVirtualModule;
|
|
52
|
+
/**
|
|
53
|
+
* Load configuration from file path (for testing)
|
|
54
|
+
*/
|
|
55
|
+
private loadFromPath;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Convenience function to get the global config loader
|
|
59
|
+
*/
|
|
60
|
+
export declare function getConfigLoader(): ConfigLoader;
|
|
61
|
+
/**
|
|
62
|
+
* Convenience function to load configuration
|
|
63
|
+
*/
|
|
64
|
+
export declare function loadConfig(options?: ConfigLoaderOptions): Promise<ResolvedConfig>;
|
|
65
|
+
/**
|
|
66
|
+
* Convenience function to get current configuration
|
|
67
|
+
*/
|
|
68
|
+
export declare function getConfig(): ResolvedConfig;
|
|
69
|
+
//# sourceMappingURL=ConfigLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5D;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IACpD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAA8B;IAEhD;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;;;OAIG;IACG,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgCtE;;OAEG;IACH,SAAS,IAAI,cAAc;IAQ3B;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,OAAO,cAAc,GAAG,cAAc;IAOpE;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc;IAkB9C;;OAEG;IACH,KAAK,IAAI,cAAc;IAMvB;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IASrB;;;OAGG;YACW,qBAAqB;IAenC;;OAEG;YACW,YAAY;CAM3B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAEvF;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAE1C"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG, TUNING_PRESETS } from "./defaults.js";
|
|
2
|
+
import { validateConfig } from "./validation.js";
|
|
3
|
+
import { deepMerge } from "../utils/object-utils.js";
|
|
4
|
+
class ConfigLoader {
|
|
5
|
+
static instance = null;
|
|
6
|
+
config = null;
|
|
7
|
+
userConfig = null;
|
|
8
|
+
/**
|
|
9
|
+
* Get singleton instance
|
|
10
|
+
*/
|
|
11
|
+
static getInstance() {
|
|
12
|
+
if (!ConfigLoader.instance) {
|
|
13
|
+
ConfigLoader.instance = new ConfigLoader();
|
|
14
|
+
}
|
|
15
|
+
return ConfigLoader.instance;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Load and resolve configuration
|
|
19
|
+
* In build time, this would be handled by Vite/Rollup virtual module plugin
|
|
20
|
+
* At runtime, we use defaults or provided overrides
|
|
21
|
+
*/
|
|
22
|
+
async load(options = {}) {
|
|
23
|
+
if (options.override) {
|
|
24
|
+
this.userConfig = options.override;
|
|
25
|
+
} else if (options.configPath) {
|
|
26
|
+
this.userConfig = await this.loadFromPath(options.configPath);
|
|
27
|
+
} else {
|
|
28
|
+
this.userConfig = await this.loadFromVirtualModule();
|
|
29
|
+
}
|
|
30
|
+
if (this.userConfig) {
|
|
31
|
+
const validation = validateConfig(this.userConfig);
|
|
32
|
+
if (!validation.valid) {
|
|
33
|
+
console.warn("[ConfigLoader] Configuration validation warnings:", validation.warnings);
|
|
34
|
+
if (validation.errors.length > 0) {
|
|
35
|
+
throw new Error(`Configuration validation failed: ${validation.errors.join(", ")}`);
|
|
36
|
+
}
|
|
37
|
+
} else if (validation.warnings.length > 0) {
|
|
38
|
+
console.warn("[ConfigLoader] Configuration warnings:", validation.warnings);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
this.config = this.resolveConfig(this.userConfig);
|
|
42
|
+
return this.config;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get current resolved configuration
|
|
46
|
+
*/
|
|
47
|
+
getConfig() {
|
|
48
|
+
if (!this.config) {
|
|
49
|
+
return DEFAULT_CONFIG;
|
|
50
|
+
}
|
|
51
|
+
return this.config;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Apply a tuning preset
|
|
55
|
+
*/
|
|
56
|
+
applyPreset(presetName) {
|
|
57
|
+
const preset = TUNING_PRESETS[presetName];
|
|
58
|
+
this.userConfig = preset;
|
|
59
|
+
this.config = this.resolveConfig(preset);
|
|
60
|
+
return this.config;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Update configuration at runtime
|
|
64
|
+
*/
|
|
65
|
+
update(partial) {
|
|
66
|
+
this.userConfig = deepMerge(this.userConfig || {}, partial);
|
|
67
|
+
const validation = validateConfig(this.userConfig);
|
|
68
|
+
if (!validation.valid) {
|
|
69
|
+
console.warn("[ConfigLoader] Configuration validation warnings:", validation.warnings);
|
|
70
|
+
if (validation.errors.length > 0) {
|
|
71
|
+
throw new Error(`Configuration validation failed: ${validation.errors.join(", ")}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.config = this.resolveConfig(this.userConfig);
|
|
75
|
+
return this.config;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reset to defaults
|
|
79
|
+
*/
|
|
80
|
+
reset() {
|
|
81
|
+
this.userConfig = null;
|
|
82
|
+
this.config = DEFAULT_CONFIG;
|
|
83
|
+
return this.config;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clear singleton instance (mainly for testing)
|
|
87
|
+
*/
|
|
88
|
+
static clearInstance() {
|
|
89
|
+
ConfigLoader.instance = null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve configuration by merging with defaults
|
|
93
|
+
* Each stage resolves its own configuration section
|
|
94
|
+
*/
|
|
95
|
+
resolveConfig(userConfig) {
|
|
96
|
+
if (!userConfig) {
|
|
97
|
+
return DEFAULT_CONFIG;
|
|
98
|
+
}
|
|
99
|
+
return deepMerge(DEFAULT_CONFIG, userConfig);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Load configuration from virtual module
|
|
103
|
+
* This would be injected by Vite/Rollup at build time
|
|
104
|
+
*/
|
|
105
|
+
async loadFromVirtualModule() {
|
|
106
|
+
if (typeof window !== "undefined" && window.__MEFRAME_CONFIG__) {
|
|
107
|
+
return window.__MEFRAME_CONFIG__;
|
|
108
|
+
}
|
|
109
|
+
if (typeof global !== "undefined" && global.__MEFRAME_CONFIG__) {
|
|
110
|
+
return global.__MEFRAME_CONFIG__;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Load configuration from file path (for testing)
|
|
116
|
+
*/
|
|
117
|
+
async loadFromPath(path) {
|
|
118
|
+
console.warn(`[ConfigLoader] Loading from path '${path}' not implemented in runtime`);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function getConfigLoader() {
|
|
123
|
+
return ConfigLoader.getInstance();
|
|
124
|
+
}
|
|
125
|
+
async function loadConfig(options) {
|
|
126
|
+
return getConfigLoader().load(options);
|
|
127
|
+
}
|
|
128
|
+
export {
|
|
129
|
+
ConfigLoader,
|
|
130
|
+
getConfigLoader,
|
|
131
|
+
loadConfig
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=ConfigLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.js","sources":["../../src/config/ConfigLoader.ts"],"sourcesContent":["import type { MeframeConfig, ResolvedConfig, ConfigLoaderOptions } from './types';\nimport { DEFAULT_CONFIG, TUNING_PRESETS } from './defaults';\nimport { validateConfig } from './validation';\nimport { deepMerge } from '../utils/object-utils';\n\n/**\n * Configuration loader for Meframe\n * Handles loading, validation, and resolution of configuration\n */\nexport class ConfigLoader {\n private static instance: ConfigLoader | null = null;\n private config: ResolvedConfig | null = null;\n private userConfig: MeframeConfig | null = null;\n\n /**\n * Get singleton instance\n */\n static getInstance(): ConfigLoader {\n if (!ConfigLoader.instance) {\n ConfigLoader.instance = new ConfigLoader();\n }\n return ConfigLoader.instance;\n }\n\n /**\n * Load and resolve configuration\n * In build time, this would be handled by Vite/Rollup virtual module plugin\n * At runtime, we use defaults or provided overrides\n */\n async load(options: ConfigLoaderOptions = {}): Promise<ResolvedConfig> {\n // If override is provided, use it directly\n if (options.override) {\n this.userConfig = options.override;\n } else if (options.configPath) {\n // In a real implementation, this would load from the virtual module\n // For now, we'll just use the path as a hint for testing\n this.userConfig = await this.loadFromPath(options.configPath);\n } else {\n // Try to load from virtual module (injected at build time)\n this.userConfig = await this.loadFromVirtualModule();\n }\n\n // Validate user configuration\n if (this.userConfig) {\n const validation = validateConfig(this.userConfig);\n if (!validation.valid) {\n console.warn('[ConfigLoader] Configuration validation warnings:', validation.warnings);\n if (validation.errors.length > 0) {\n throw new Error(`Configuration validation failed: ${validation.errors.join(', ')}`);\n }\n } else if (validation.warnings.length > 0) {\n console.warn('[ConfigLoader] Configuration warnings:', validation.warnings);\n }\n }\n\n // Resolve configuration\n this.config = this.resolveConfig(this.userConfig);\n\n return this.config;\n }\n\n /**\n * Get current resolved configuration\n */\n getConfig(): ResolvedConfig {\n if (!this.config) {\n // Return defaults if not loaded yet\n return DEFAULT_CONFIG;\n }\n return this.config;\n }\n\n /**\n * Apply a tuning preset\n */\n applyPreset(presetName: keyof typeof TUNING_PRESETS): ResolvedConfig {\n const preset = TUNING_PRESETS[presetName];\n this.userConfig = preset;\n this.config = this.resolveConfig(preset);\n return this.config;\n }\n\n /**\n * Update configuration at runtime\n */\n update(partial: MeframeConfig): ResolvedConfig {\n // Merge with existing user config\n this.userConfig = deepMerge(this.userConfig || {}, partial) as MeframeConfig;\n\n // Validate\n const validation = validateConfig(this.userConfig);\n if (!validation.valid) {\n console.warn('[ConfigLoader] Configuration validation warnings:', validation.warnings);\n if (validation.errors.length > 0) {\n throw new Error(`Configuration validation failed: ${validation.errors.join(', ')}`);\n }\n }\n\n // Resolve and update\n this.config = this.resolveConfig(this.userConfig);\n return this.config;\n }\n\n /**\n * Reset to defaults\n */\n reset(): ResolvedConfig {\n this.userConfig = null;\n this.config = DEFAULT_CONFIG;\n return this.config;\n }\n\n /**\n * Clear singleton instance (mainly for testing)\n */\n static clearInstance(): void {\n ConfigLoader.instance = null;\n }\n\n /**\n * Resolve configuration by merging with defaults\n * Each stage resolves its own configuration section\n */\n private resolveConfig(userConfig: MeframeConfig | null): ResolvedConfig {\n if (!userConfig) {\n return DEFAULT_CONFIG;\n }\n\n // Use improved deepMerge that handles type differences\n return deepMerge<ResolvedConfig>(DEFAULT_CONFIG, userConfig);\n }\n\n /**\n * Load configuration from virtual module\n * This would be injected by Vite/Rollup at build time\n */\n private async loadFromVirtualModule(): Promise<MeframeConfig | null> {\n // Check if virtual module is available\n if (typeof window !== 'undefined' && (window as any).__MEFRAME_CONFIG__) {\n return (window as any).__MEFRAME_CONFIG__;\n }\n\n // In Node.js environment, check global\n if (typeof global !== 'undefined' && (global as any).__MEFRAME_CONFIG__) {\n return (global as any).__MEFRAME_CONFIG__;\n }\n\n // No user configuration found, will use defaults\n return null;\n }\n\n /**\n * Load configuration from file path (for testing)\n */\n private async loadFromPath(path: string): Promise<MeframeConfig | null> {\n // In a real implementation, this would use dynamic import\n // For now, return null and rely on overrides for testing\n console.warn(`[ConfigLoader] Loading from path '${path}' not implemented in runtime`);\n return null;\n }\n}\n\n/**\n * Convenience function to get the global config loader\n */\nexport function getConfigLoader(): ConfigLoader {\n return ConfigLoader.getInstance();\n}\n\n/**\n * Convenience function to load configuration\n */\nexport async function loadConfig(options?: ConfigLoaderOptions): Promise<ResolvedConfig> {\n return getConfigLoader().load(options);\n}\n\n/**\n * Convenience function to get current configuration\n */\nexport function getConfig(): ResolvedConfig {\n return getConfigLoader().getConfig();\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { ResolvedConfig } from './types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Default configuration values based on mobile 1080p30 memory budget
|
|
5
|
+
*
|
|
6
|
+
* Note: Canvas dimensions are fixed for the entire project.
|
|
7
|
+
* All video clips will be scaled/fitted to this resolution.
|
|
8
|
+
* Choose based on your primary content type:
|
|
9
|
+
* - 720×1280: Mobile vertical video
|
|
10
|
+
* - 1080×1920: HD vertical video (TikTok, Instagram Reels) ← default
|
|
11
|
+
* - 1920×1080: HD horizontal video (YouTube)
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_CONFIG: ResolvedConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Tuning presets for common scenarios
|
|
16
|
+
*/
|
|
17
|
+
export declare const TUNING_PRESETS: {
|
|
18
|
+
/**
|
|
19
|
+
* Low-latency live streaming
|
|
20
|
+
* Minimize buffering for real-time playback
|
|
21
|
+
*/
|
|
22
|
+
readonly lowLatency: {
|
|
23
|
+
readonly global: {
|
|
24
|
+
readonly logLevel: "info";
|
|
25
|
+
};
|
|
26
|
+
readonly load: {
|
|
27
|
+
readonly backpressure: {
|
|
28
|
+
readonly highWaterMark: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
readonly demux: {
|
|
32
|
+
readonly backpressure: {
|
|
33
|
+
readonly highWaterMark: 3;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
readonly decode: {
|
|
37
|
+
readonly video: {
|
|
38
|
+
readonly backpressure: {
|
|
39
|
+
readonly highWaterMark: 2;
|
|
40
|
+
readonly decodeQueueThreshold: 4;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
readonly audio: {
|
|
44
|
+
readonly backpressure: {
|
|
45
|
+
readonly highWaterMark: 10;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* 4K60 playback/export
|
|
52
|
+
* Larger buffers for high bitrate content
|
|
53
|
+
*/
|
|
54
|
+
readonly highQuality: {
|
|
55
|
+
readonly global: {
|
|
56
|
+
readonly logLevel: "info";
|
|
57
|
+
};
|
|
58
|
+
readonly load: {
|
|
59
|
+
readonly backpressure: {
|
|
60
|
+
readonly highWaterMark: number;
|
|
61
|
+
};
|
|
62
|
+
readonly retry: {
|
|
63
|
+
readonly maxAttempts: 3;
|
|
64
|
+
readonly baseDelayMs: 500;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
readonly demux: {
|
|
68
|
+
readonly backpressure: {
|
|
69
|
+
readonly highWaterMark: 20;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
readonly decode: {
|
|
73
|
+
readonly video: {
|
|
74
|
+
readonly backpressure: {
|
|
75
|
+
readonly highWaterMark: 8;
|
|
76
|
+
readonly decodeQueueThreshold: 24;
|
|
77
|
+
};
|
|
78
|
+
readonly codecHints: ("h264" | "hevc")[];
|
|
79
|
+
};
|
|
80
|
+
readonly audio: {
|
|
81
|
+
readonly backpressure: {
|
|
82
|
+
readonly highWaterMark: 30;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
readonly cache: {
|
|
87
|
+
readonly l2: {
|
|
88
|
+
readonly quotaGb: 1;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Batch offline transcode
|
|
94
|
+
* Maximum throughput, memory not a concern
|
|
95
|
+
*/
|
|
96
|
+
readonly offline: {
|
|
97
|
+
readonly global: {
|
|
98
|
+
readonly logLevel: "warn";
|
|
99
|
+
};
|
|
100
|
+
readonly load: {
|
|
101
|
+
readonly backpressure: {
|
|
102
|
+
readonly highWaterMark: number;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
readonly demux: {
|
|
106
|
+
readonly backpressure: {
|
|
107
|
+
readonly highWaterMark: 25;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
readonly decode: {
|
|
111
|
+
readonly video: {
|
|
112
|
+
readonly backpressure: {
|
|
113
|
+
readonly highWaterMark: 12;
|
|
114
|
+
readonly decodeQueueThreshold: 32;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
readonly audio: {
|
|
118
|
+
readonly backpressure: {
|
|
119
|
+
readonly highWaterMark: 40;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAiB9C;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,cAiE5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;qCAyBmC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;;;;;;;;;;;;;;IAezD;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BK,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { CANVAS_PRESETS } from "./presets.js";
|
|
2
|
+
function getWorkerConfig() {
|
|
3
|
+
const isDev = typeof process !== "undefined" && process.env.NODE_ENV !== "production" || typeof window !== "undefined" && window.location?.hostname === "localhost";
|
|
4
|
+
return {
|
|
5
|
+
workerBaseUrl: isDev ? "/src/stages" : "/dist/stages",
|
|
6
|
+
workerExtension: isDev ? ".ts" : ".js"
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const DEFAULT_CONFIG = {
|
|
10
|
+
global: {
|
|
11
|
+
logLevel: "info",
|
|
12
|
+
enablePerfMonitor: false,
|
|
13
|
+
...getWorkerConfig(),
|
|
14
|
+
defaultCanvasWidth: CANVAS_PRESETS.MOBILE_PORTRAIT.width,
|
|
15
|
+
defaultCanvasHeight: CANVAS_PRESETS.MOBILE_PORTRAIT.height,
|
|
16
|
+
defaultFps: 30
|
|
17
|
+
},
|
|
18
|
+
load: {
|
|
19
|
+
backpressure: {
|
|
20
|
+
highWaterMark: 64 * 1024,
|
|
21
|
+
// 64 KB
|
|
22
|
+
stallTimeoutMs: 500
|
|
23
|
+
},
|
|
24
|
+
retry: {
|
|
25
|
+
maxAttempts: 3,
|
|
26
|
+
baseDelayMs: 500
|
|
27
|
+
},
|
|
28
|
+
window: {
|
|
29
|
+
maxInflightPerClip: 1,
|
|
30
|
+
maxInflight: 4,
|
|
31
|
+
chunkSize: 1 * 1024 * 1024
|
|
32
|
+
// 1 MB
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
demux: {
|
|
36
|
+
backpressure: {
|
|
37
|
+
highWaterMark: 10
|
|
38
|
+
// 10 EncodedChunks
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
decode: {
|
|
42
|
+
video: {
|
|
43
|
+
backpressure: {
|
|
44
|
+
highWaterMark: 4,
|
|
45
|
+
// 4 EncodedVideoChunks
|
|
46
|
+
decodeQueueThreshold: 16
|
|
47
|
+
// Pause when decoder has 16+ chunks
|
|
48
|
+
},
|
|
49
|
+
maxGOPs: 4
|
|
50
|
+
// Cache 4 GOPs for seeking
|
|
51
|
+
},
|
|
52
|
+
audio: {
|
|
53
|
+
backpressure: {
|
|
54
|
+
highWaterMark: 20
|
|
55
|
+
// 20 EncodedAudioChunks
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
compose: {
|
|
60
|
+
visual: {},
|
|
61
|
+
audio: {
|
|
62
|
+
enableDucking: false
|
|
63
|
+
// Default: no ducking
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
encode: {
|
|
67
|
+
video: {},
|
|
68
|
+
audio: {}
|
|
69
|
+
},
|
|
70
|
+
cache: {
|
|
71
|
+
l1: {},
|
|
72
|
+
l2: {}
|
|
73
|
+
},
|
|
74
|
+
mux: {}
|
|
75
|
+
};
|
|
76
|
+
const TUNING_PRESETS = {
|
|
77
|
+
/**
|
|
78
|
+
* Low-latency live streaming
|
|
79
|
+
* Minimize buffering for real-time playback
|
|
80
|
+
*/
|
|
81
|
+
lowLatency: {
|
|
82
|
+
global: {
|
|
83
|
+
logLevel: "info"
|
|
84
|
+
},
|
|
85
|
+
load: {
|
|
86
|
+
backpressure: {
|
|
87
|
+
highWaterMark: 16 * 1024
|
|
88
|
+
// 16 KB
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
demux: {
|
|
92
|
+
backpressure: {
|
|
93
|
+
highWaterMark: 3
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
decode: {
|
|
97
|
+
video: {
|
|
98
|
+
backpressure: {
|
|
99
|
+
highWaterMark: 2,
|
|
100
|
+
decodeQueueThreshold: 4
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
audio: {
|
|
104
|
+
backpressure: {
|
|
105
|
+
highWaterMark: 10
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/**
|
|
111
|
+
* 4K60 playback/export
|
|
112
|
+
* Larger buffers for high bitrate content
|
|
113
|
+
*/
|
|
114
|
+
highQuality: {
|
|
115
|
+
global: {
|
|
116
|
+
logLevel: "info"
|
|
117
|
+
},
|
|
118
|
+
load: {
|
|
119
|
+
backpressure: {
|
|
120
|
+
highWaterMark: 256 * 1024
|
|
121
|
+
// 256 KB
|
|
122
|
+
},
|
|
123
|
+
retry: {
|
|
124
|
+
maxAttempts: 3,
|
|
125
|
+
baseDelayMs: 500
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
demux: {
|
|
129
|
+
backpressure: {
|
|
130
|
+
highWaterMark: 20
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
decode: {
|
|
134
|
+
video: {
|
|
135
|
+
backpressure: {
|
|
136
|
+
highWaterMark: 8,
|
|
137
|
+
decodeQueueThreshold: 24
|
|
138
|
+
},
|
|
139
|
+
codecHints: ["h264", "hevc"]
|
|
140
|
+
},
|
|
141
|
+
audio: {
|
|
142
|
+
backpressure: {
|
|
143
|
+
highWaterMark: 30
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
cache: {
|
|
148
|
+
l2: {
|
|
149
|
+
quotaGb: 1
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
/**
|
|
154
|
+
* Batch offline transcode
|
|
155
|
+
* Maximum throughput, memory not a concern
|
|
156
|
+
*/
|
|
157
|
+
offline: {
|
|
158
|
+
global: {
|
|
159
|
+
logLevel: "warn"
|
|
160
|
+
},
|
|
161
|
+
load: {
|
|
162
|
+
backpressure: {
|
|
163
|
+
highWaterMark: 512 * 1024
|
|
164
|
+
// 512 KB
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
demux: {
|
|
168
|
+
backpressure: {
|
|
169
|
+
highWaterMark: 25
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
decode: {
|
|
173
|
+
video: {
|
|
174
|
+
backpressure: {
|
|
175
|
+
highWaterMark: 12,
|
|
176
|
+
decodeQueueThreshold: 32
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
audio: {
|
|
180
|
+
backpressure: {
|
|
181
|
+
highWaterMark: 40
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
export {
|
|
188
|
+
DEFAULT_CONFIG,
|
|
189
|
+
TUNING_PRESETS
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sources":["../../src/config/defaults.ts"],"sourcesContent":["import type { ResolvedConfig } from './types';\nimport { CANVAS_PRESETS } from './presets';\n\n/**\n * Get default worker configuration based on environment\n */\nfunction getWorkerConfig() {\n const isDev =\n (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') ||\n (typeof window !== 'undefined' && window.location?.hostname === 'localhost');\n\n return {\n workerBaseUrl: isDev ? '/src/stages' : '/dist/stages',\n workerExtension: isDev ? '.ts' : '.js',\n };\n}\n\n/**\n * Default configuration values based on mobile 1080p30 memory budget\n *\n * Note: Canvas dimensions are fixed for the entire project.\n * All video clips will be scaled/fitted to this resolution.\n * Choose based on your primary content type:\n * - 720×1280: Mobile vertical video\n * - 1080×1920: HD vertical video (TikTok, Instagram Reels) ← default\n * - 1920×1080: HD horizontal video (YouTube)\n */\nexport const DEFAULT_CONFIG: ResolvedConfig = {\n global: {\n logLevel: 'info',\n enablePerfMonitor: false,\n ...getWorkerConfig(),\n defaultCanvasWidth: CANVAS_PRESETS.MOBILE_PORTRAIT.width,\n defaultCanvasHeight: CANVAS_PRESETS.MOBILE_PORTRAIT.height,\n defaultFps: 30,\n },\n\n load: {\n backpressure: {\n highWaterMark: 64 * 1024, // 64 KB\n stallTimeoutMs: 500,\n },\n retry: {\n maxAttempts: 3,\n baseDelayMs: 500,\n },\n window: {\n maxInflightPerClip: 1,\n maxInflight: 4,\n chunkSize: 1 * 1024 * 1024, // 1 MB\n },\n },\n\n demux: {\n backpressure: {\n highWaterMark: 10, // 10 EncodedChunks\n },\n },\n\n decode: {\n video: {\n backpressure: {\n highWaterMark: 4, // 4 EncodedVideoChunks\n decodeQueueThreshold: 16, // Pause when decoder has 16+ chunks\n },\n maxGOPs: 4, // Cache 4 GOPs for seeking\n },\n audio: {\n backpressure: {\n highWaterMark: 20, // 20 EncodedAudioChunks\n },\n },\n },\n\n compose: {\n visual: {},\n audio: {\n enableDucking: false, // Default: no ducking\n },\n },\n\n encode: {\n video: {},\n audio: {},\n },\n\n cache: {\n l1: {},\n l2: {},\n },\n\n mux: {},\n};\n\n/**\n * Tuning presets for common scenarios\n */\nexport const TUNING_PRESETS = {\n /**\n * Low-latency live streaming\n * Minimize buffering for real-time playback\n */\n lowLatency: {\n global: {\n logLevel: 'info' as const,\n },\n load: {\n backpressure: {\n highWaterMark: 16 * 1024, // 16 KB\n },\n },\n demux: {\n backpressure: {\n highWaterMark: 3,\n },\n },\n decode: {\n video: {\n backpressure: {\n highWaterMark: 2,\n decodeQueueThreshold: 4,\n },\n },\n audio: {\n backpressure: {\n highWaterMark: 10,\n },\n },\n },\n },\n\n /**\n * 4K60 playback/export\n * Larger buffers for high bitrate content\n */\n highQuality: {\n global: {\n logLevel: 'info' as const,\n },\n load: {\n backpressure: {\n highWaterMark: 256 * 1024, // 256 KB\n },\n retry: {\n maxAttempts: 3,\n baseDelayMs: 500,\n },\n },\n demux: {\n backpressure: {\n highWaterMark: 20,\n },\n },\n decode: {\n video: {\n backpressure: {\n highWaterMark: 8,\n decodeQueueThreshold: 24,\n },\n codecHints: ['h264', 'hevc'] as ('h264' | 'hevc')[],\n },\n audio: {\n backpressure: {\n highWaterMark: 30,\n },\n },\n },\n cache: {\n l2: {\n quotaGb: 1,\n },\n },\n },\n\n /**\n * Batch offline transcode\n * Maximum throughput, memory not a concern\n */\n offline: {\n global: {\n logLevel: 'warn' as const,\n },\n load: {\n backpressure: {\n highWaterMark: 512 * 1024, // 512 KB\n },\n },\n demux: {\n backpressure: {\n highWaterMark: 25,\n },\n },\n decode: {\n video: {\n backpressure: {\n highWaterMark: 12,\n decodeQueueThreshold: 32,\n },\n },\n audio: {\n backpressure: {\n highWaterMark: 40,\n },\n },\n },\n },\n} as const;\n"],"names":[],"mappings":"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"}
|