TASK 21 Increment A: media-source model + persistence (schema migration + round-trip test)

SourceType.MediaSource added; MediaSourceType (Video/Audio) and MediaPlaybackState
(Stopped/Playing/Paused) enums. Source gains MediaPath, MediaIsLooping, MediaVolume
(0-1 clamped), MediaPlaybackState. LayoutStore: MigrateSourceTable adds 4 guarded
ALTERs (MediaPath, MediaIsLooping, MediaVolume, MediaPlaybackState); SELECT appends
indices 26-29, INSERT adds 4 columns + params. Round-trip test
MediaSource_Config_Survives_Save_And_Reload passes. Build 0 warnings, 245/247
tests (2 known pre-existing). Gated on creator run for later integration (ffmpeg).
This commit is contained in:
2026-08-29 09:43:29 -07:00
parent 46f4696db6
commit eba6af5b9b
5 changed files with 188 additions and 65 deletions
+4 -4
View File
@@ -1035,11 +1035,11 @@ The tasks below are ordered by dependency and risk. Each task builds on the prev
**Goal:** play video files (MP4, MOV, AVI) into scenes — starting soon videos, BRB loops, intro/outro clips.
### Status: ☐ Not started — required for v1
### Status: 🔶 In progress — Increment A shipped (model + persistence), slices 4–12 open
1. ☐ `MediaSourceType` enum: `Video`, `Audio` (audio-only files via media source)
2. ☐ `SourceType.MediaSource` addition to the enum
3. ☐ `MediaSourceModel`: `FilePath`, `IsLooping`, `Volume` (0-1), `PlaybackState`
1. ✅ `MediaSourceType` enum: `Video`, `Audio` (audio-only files via media source)
2. ✅ `SourceType.MediaSource` addition to the enum
3. ✅ `MediaSourceModel`: `MediaPath`, `MediaIsLooping`, `MediaVolume` (0-1), `MediaPlaybackState` — persisted in LayoutStore (schema migration + SELECT/INSERT + round-trip test)
4. ☐ `VideoFrameSource`: FFmpeg-based video decoder → `VideoFrame` pipeline
5. ☐ Frame capture from video file (decode at native FPS, output BGRA8 frames)
6. ☐ Wire into `FramePump` resolver — `Source { Type: MediaSource }` → latest video frame