Media: Opus, Ogg, MP4 and Matroska come from craft-libs (#2047)

DeckCraft kept its own Opus decoder (crates/opus) and Ogg demuxer
(crates/ogg), and two crates that only re-exported craft-media
(crates/isobmff, crates/matroska). craft-libs has all four: craft-audio's
opus module and craft-media's ogg, isobmff and matroska modules. The four
crates are removed and crates/media depends on craft-audio and craft-media
directly.

craft-media and craft-audio are pinned at 113f2360, the head of craft-libs
#810, which carries the two Ogg fixes DeckCraft made to its own copy
(51d19baa, 9d36b593). The pin moves to craft-libs main once #810 merges.
craft-pdf, craft-update and craft-ui keep their pins.

One API difference: craft-media's OpusTiming::of saturates on a hostile
granule position instead of returning an error. The end-trim product in
the Ogg Opus decode now saturates as well; a test with a three-channel
file and the largest granule panicked on it without that.

crates/bitstream stays: it also holds the video decoders' memory budget,
which craft-libs does not have.
This commit is contained in:
Dylan M. Taylor authored and GitHub committed 2026-11-11 14:47:18 -05:00
1 parent b57b4ccfcf
commit 35166b3841
36 files changed
+106 -7595

No files matched your search

+3 -6
View File
@@ -34,17 +34,14 @@ impl Class {
/// prefix.
pub const TABLE: &[(&str, Class)] = &[
("geom", Class::Layer(0)),
// Codecs and containers (ported from FilmCraft): L0 standalone leaves, L1 codecs over
// `bitstream`, and `media` (probe, decode, playback mixer) at L2.
// Video codecs (ported from FilmCraft): `bitstream` is an L0 standalone leaf, the codecs sit
// over it at L1, and `media` (probe, decode, playback mixer) at L2. Containers and the Opus
// decoder come from craft-libs (craft-media, craft-audio).
("bitstream", Class::Standalone),
("matroska", Class::Standalone),
("ogg", Class::Standalone),
("opus", Class::Standalone),
("h264", Class::Layer(1)),
("hevc", Class::Layer(1)),
("vp9", Class::Layer(1)),
("av1", Class::Layer(1)),
("isobmff", Class::Layer(1)),
("media", Class::Layer(2)),
("color", Class::Layer(0)),
// WMF/EMF reader (ported from WordCraft).