Add video as a media kind in photos: streaming upload with per-kind limits, ffprobe metadata, poster frame reusing the image variant pipeline, and a playback object (remux when web-compatible, else h264/yuv420p/aac transcode). Video jobs run on a separate pool with a long lease. Frontend gains a video viewer, grid badge/duration and video upload.
25 lines
1013 B
SQL
25 lines
1013 B
SQL
-- Video support for SQLite: media kind and duration on photos, the playback
|
|
-- object role (photo_objects is rebuilt because SQLite cannot alter a CHECK
|
|
-- constraint) and a job kind distinguishing image work from video transcoding.
|
|
|
|
ALTER TABLE photos ADD COLUMN kind TEXT NOT NULL DEFAULT 'image';
|
|
ALTER TABLE photos ADD COLUMN duration_ms INTEGER;
|
|
|
|
CREATE TABLE photo_objects_new (
|
|
photo_id TEXT NOT NULL REFERENCES photos(id) ON DELETE CASCADE,
|
|
object_id TEXT NOT NULL REFERENCES objects(id) ON DELETE RESTRICT,
|
|
role TEXT NOT NULL CHECK (role IN ('original', 'thumb', 'medium', 'preview', 'playback')),
|
|
PRIMARY KEY (photo_id, role)
|
|
);
|
|
|
|
INSERT INTO photo_objects_new (photo_id, object_id, role)
|
|
SELECT photo_id, object_id, role FROM photo_objects;
|
|
|
|
DROP TABLE photo_objects;
|
|
|
|
ALTER TABLE photo_objects_new RENAME TO photo_objects;
|
|
|
|
CREATE INDEX IF NOT EXISTS photo_objects_object_idx ON photo_objects (object_id);
|
|
|
|
ALTER TABLE variant_jobs ADD COLUMN kind TEXT NOT NULL DEFAULT 'image';
|