mirror of
https://github.com/storytold/filmcraft.git
synced 2026-10-24 01:58:19 -06:00
* Build: use craft-media for bitstream, isobmff and matroska
filmcraft-bitstream, filmcraft-isobmff and filmcraft-matroska re-export
craft_media::{bitstream, isobmff, matroska} from craft-libs. The packages
and their public paths stay, so dependent crates build unchanged. The
integration tests in crates/isobmff/tests and crates/matroska/tests run
against the re-exports.
* Build: pin craft-media at 9db732e
craft-media spells the Matroska colour types in US English: Colour is
Color and VideoInfo::colour is VideoInfo::color. The spec names
element_ids::COLOUR, COLOUR_SPACE and VpcConfig::colour_primaries stay.
* matroska: the oracle skips the duration of a track's last frame
Ported from craft-media: the last audio or video frame of a track cut by
-t is shorter than a codec frame. ffmpeg 8 writes a shortened
BlockDuration and reports the codec frame duration; a remux by our writer
stores DefaultDuration and ffprobe reports the shortened one. Subtitle
cue durations are still compared. This fixes oracle::mjpeg_ac3 with
ffmpeg 8. The HDR test is named hevc_hdr_color, as in craft-media.
* matroska: laced_remux laces every audio track and checks timestamps
craft-media laces only tracks with a DefaultDuration. The remux gives
each audio track without one its mean packet spacing, so Vorbis, FLAC
and PCM lace too, and compares every packet's timestamp with the
source's. Ported from craft-media's oracle_matroska.rs.
* codecs: the Matroska audio timing test laces its Xiph case
craft-media laces only tracks with a DefaultDuration. The test's
Matroska helper sets the AAC access unit's duration (1024 samples,
rounded to the nanosecond), and the test checks that the Xiph-laced file
has laced blocks and the unlaced one has none.
* Build: repin craft-media to f97c84d27 (NAL length-size checks)
craft-libs#245 is on storytold/craft-libs main, so the dependency points there.
* Build: repin craft-media to f0ad6c1e1 (QuickTime v2 PCM entry limits)
156 lines
4.8 KiB
TOML
156 lines
4.8 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
default-members = ["crates/*", "apps/*", "xtask"]
|
|
|
|
[workspace.package]
|
|
version = "0.12.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.95"
|
|
repository = "https://github.com/storytold/filmcraft"
|
|
|
|
[workspace.dependencies]
|
|
# internal
|
|
filmcraft-time = { path = "crates/time" }
|
|
filmcraft-geom = { path = "crates/geom" }
|
|
filmcraft-color = { path = "crates/color" }
|
|
filmcraft-bitstream = { path = "crates/bitstream" }
|
|
filmcraft-isobmff = { path = "crates/isobmff" }
|
|
filmcraft-avi = { path = "crates/avi" }
|
|
filmcraft-matroska = { path = "crates/matroska" }
|
|
filmcraft-mxf = { path = "crates/mxf" }
|
|
filmcraft-cfb = { path = "crates/cfb" }
|
|
filmcraft-mpegts = { path = "crates/mpegts" }
|
|
filmcraft-mpeg2v = { path = "crates/mpeg2v" }
|
|
filmcraft-ac3 = { path = "crates/ac3" }
|
|
filmcraft-mpa = { path = "crates/mpa" }
|
|
filmcraft-ogg = { path = "crates/ogg" }
|
|
filmcraft-h264 = { path = "crates/h264" }
|
|
filmcraft-hevc = { path = "crates/hevc" }
|
|
filmcraft-vp8 = { path = "crates/vp8" }
|
|
filmcraft-vp9 = { path = "crates/vp9" }
|
|
filmcraft-prores = { path = "crates/prores" }
|
|
filmcraft-dnx = { path = "crates/dnx" }
|
|
filmcraft-apv = { path = "crates/apv" }
|
|
filmcraft-dng = { path = "crates/dng" }
|
|
filmcraft-av1 = { path = "crates/av1" }
|
|
filmcraft-aac = { path = "crates/aac" }
|
|
filmcraft-flac = { path = "crates/flac" }
|
|
filmcraft-opus = { path = "crates/opus" }
|
|
filmcraft-h264enc = { path = "crates/h264enc" }
|
|
filmcraft-audio-dsp = { path = "crates/audio-dsp" }
|
|
filmcraft-frame = { path = "crates/frame" }
|
|
filmcraft-media = { path = "crates/media" }
|
|
filmcraft-codecs = { path = "crates/codecs" }
|
|
filmcraft-project = { path = "crates/project" }
|
|
filmcraft-edit = { path = "crates/edit" }
|
|
filmcraft-interchange = { path = "crates/interchange" }
|
|
filmcraft-text = { path = "crates/text" }
|
|
filmcraft-captions = { path = "crates/captions" }
|
|
filmcraft-speech = { path = "crates/speech" }
|
|
filmcraft-tts = { path = "crates/tts" }
|
|
filmcraft-tts-text = { path = "crates/tts-text" }
|
|
filmcraft-render = { path = "crates/render" }
|
|
filmcraft-gpu = { path = "crates/gpu" }
|
|
filmcraft-scopes = { path = "crates/scopes" }
|
|
filmcraft-export = { path = "crates/export" }
|
|
filmcraft-format = { path = "crates/format" }
|
|
filmcraft-engine = { path = "crates/engine" }
|
|
filmcraft-ui-egui = { path = "crates/ui-egui" }
|
|
filmcraft-automation = { path = "crates/automation" }
|
|
filmcraft-platform = { path = "crates/platform" }
|
|
filmcraft-testkit = { path = "crates/testkit" }
|
|
|
|
# foundation
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive", "rc"] }
|
|
serde_json = "1"
|
|
log = "0.4"
|
|
# All date/time conversion goes through chrono (no hand-rolled calendar code beyond the 400-year range extension; AGENTS.md).
|
|
chrono = { version = "0.4.45", default-features = false, features = ["std"] }
|
|
rayon = "1"
|
|
proptest = "1"
|
|
roxmltree = "0.21"
|
|
craft-docpath = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "82a24b006eefa036b43c09a67fb9a3fbd17ffe63" }
|
|
craft-media = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "f0ad6c1e1d297908915f4be315b0fcfc9be7b5d4", default-features = false }
|
|
|
|
# ui
|
|
# Shared frontend components; keep this dependency above the engine boundary.
|
|
craft-ui = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "5c874d51eeb3de70e735c8ce87a59a7dedd47675", features = ["serde"] }
|
|
egui = "0.36"
|
|
eframe = { version = "0.36", default-features = false }
|
|
egui_kittest = "0.36"
|
|
rfd = "0.17"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
needless_range_loop = "allow"
|
|
type_complexity = "allow"
|
|
|
|
# Line tables keep file and line in panics and backtraces at a fraction of full debug info's size;
|
|
# dependencies need none.
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
debug = false
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
debug = "line-tables-only"
|
|
|
|
# Codec hot loops: debug-build tests (RFC/oracle vectors) are minutes slower below opt-level 3.
|
|
[profile.dev.package.filmcraft-h264]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-h264enc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-hevc]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-prores]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-dnx]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-apv]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-dng]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-av1]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-aac]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-flac]
|
|
opt-level = 3
|
|
|
|
# Audio effects: realtime-factor tests and long convolution / spectral runs.
|
|
[profile.dev.package.filmcraft-audio-dsp]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-mxf]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-opus]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-vp8]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.filmcraft-vp9]
|
|
opt-level = 3
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
codegen-units = 1
|