Commit Graph
1933 Commits
Author SHA1 Message Date
Dylan M. Taylor de724aa188 Configure bundle directory save locks 2026-11-13 02:27:57 -05:00
Dylan M. Taylor c0df5be07d Reuse verified objects in directory bundles 2026-11-13 02:26:51 -05:00
Dylan M. Taylor 9814469613 Bound extreme H264 POC cycle arithmetic 2026-11-13 07:24:13 +00:00
Dylan M. Taylor 6b8e79294d Expose bounded pcraft object codecs 2026-11-13 02:23:08 -05:00
Dylan M. Taylor de087a4524 Expose bounded directory bundle entries 2026-11-13 02:23:08 -05:00
Dylan M. Taylor b0284aad09 Expose bounded pcraft entry reads 2026-11-13 02:23:08 -05:00
Dylan M. Taylor fd5133174b Add shared pcraft bundle storage 2026-11-13 02:23:08 -05:00
Dylan M. Taylor 47107f6601 craft-mesh: retain glTF texture and sampler inventory (#1151)
* craft-mesh: expose unreferenced glTF texture variants

* mesh: validate texture inventory image indices

* Fix PR 1151 validation and workspace checks

* Fix remaining Rust 1.95 workspace lint findings

* Fix proof workspace Clippy warning

* Fix remaining workspace Clippy findings

* Fix video all-features Clippy warning

* KRA: parse nested layers without recursion

* Preserve KRA layer limit traversal order

* Avoid expect in iterative KRA parser

* OpenRaster: parse nested stacks without recursion

* Plate tests honor optional font fixtures

* Keep bundled font index bytes unchanged

* Preserve font build license fixture bytes

* ci: allow longer workspace test matrix

* test: respect Windows Hunspell path behavior

* ci: provision keymap fonts for all-feature tests

* ci: provision PSD corpus for full workspace tests
2026-11-13 02:17:30 -05:00
Dylan M. Taylor 72d544b707 Merge pull request #1153 from storytold/fix/psd-head-view
psd: expose bounded borrowed header resources
2026-11-13 02:15:50 -05:00
Dylan M. Taylor e2cab3f651 Merge pull request #1158 from storytold/feat/stencilcraft-format
Add versioned flattened JSON format schema
2026-11-13 02:13:29 -05:00
Dylan M. Taylor 56a1f2b7c4 Avoid premature saturation in H264 type 1 POC 2026-11-13 07:11:12 +00:00
Dylan M. Taylor eeee3d08b6 Add shared Base64 PNG helpers 2026-11-13 02:03:55 -05:00
Dylan M. Taylor 68189d1e6e feat(figcraft-format): define document expansion policy 2026-11-13 07:03:35 +00:00
Dylan M. Taylor c5d1e937ae feat(materialx): add bounded reader and OpenPBR writer (#1167)
* feat(materialx): add bounded document reader and OpenPBR writer

* proof, video, latex, cms: satisfy the clippy lints that ship with Rust 1.100

The newer clippy flags needless bool guards and range loops whose index
only indexes one slice; express both with the equivalent iterators so
the workspace lint stays green on every platform.

* cms: index the ink loops instead of a range loop, which newer clippy rejects

* feat(materialx): resolve shader graphs and write OpenPBR materials

* feat(materialx): resolve shader graphs and write OpenPBR materials
2026-11-13 02:03:31 -05:00
Dylan M. Taylor 63196e66f3 Merge pull request #1157 from dylanmtaylor/codex/craft-metafile-hatch-percent
metafile: render GDI+ percentage hatch brushes
2026-11-13 02:03:14 -05:00
Dylan M. Taylor e8628c526e feat(figcraft-format): own native archive policy 2026-11-13 07:02:49 +00:00
Dylan M. Taylor d6f65e29e0 feat(figcraft-format): support seekable native readers 2026-11-13 06:58:38 +00:00
Dylan M. Taylor f8acbd5832 feat(figcraft-format): expose archive compression modes 2026-11-13 06:55:26 +00:00
Dylan M. Taylor 8abfa9d0f1 Classify legacy Excel extensions in shared registry 2026-11-13 01:53:37 -05:00
Dylan M. Taylor 644e613b06 feat(figcraft-format): expose native member sizes 2026-11-13 06:52:59 +00:00
Dylan M. Taylor c3a39369ce Merge pull request #1163 from dylanmtaylor/codex/vp8-consumer-limit
video: let VP8 consumers preserve existing frame limits
2026-11-13 01:52:28 -05:00
Dylan M. Taylor 71337f6772 Add shared CSV and TSV file formats 2026-11-13 01:51:08 -05:00
Dylan M. Taylor 30b1e426e0 feat(figcraft-format): stream native document JSON 2026-11-13 06:49:46 +00:00
Dylan M. Taylor fccc008271 Detect DesignCraft and IDML document content 2026-11-13 01:44:49 -05:00
Dylan M. Taylor 111b522d05 feat(figcraft-format): add bounded native archive access 2026-11-13 06:41:10 +00:00
Dylan M. Taylor 3c67a98e54 Merge latest craft-libs main 2026-11-13 06:38:48 +00:00
Dylan M. Taylor 8cdd25ce0a feat(figcraft-format): add native document header contract 2026-11-13 06:38:38 +00:00
Dylan M. Taylor b4ada28f19 Fix format registry clippy and add ASE support 2026-11-13 01:37:48 -05:00
alehel 7af2f8e868 craft-media: AVI muxer (AviWriter)
Write AVI files: hdrl with avih and one strl (strh, strf, strn, indx) per
stream, odml/dmlh, an interleaved movi and idx1. Past the RIFF limit
(default 1 GiB) the file continues in OpenDML RIFF AVIX extensions with
ix## standard indexes and an indx super index per stream.

- VideoSpec::for_codec builds the stream from CodecParams; MPEG-4 Part 2
  is tagged FMP4.
- Audio is timed by bytes (PCM-style) or one packet per chunk.
- Bad options and chunks are errors; finish() closes a readable file
  after a failed write.

Tests read the files back through this crate's demuxer by every index,
and through ffmpeg (decode identical to the sources, seeks through the
index, ffprobe fields), in one RIFF and across AVIX extensions. The
MPEG-4 encoder tests play its packets from an AVI file.
2026-11-13 07:34:28 +01:00
alehelandClaude Opus 5.5 fe8c1f697a craft-audio: keep the SBR history when a new program config fails
The SBR decoders now record the layout they were built for and are rebuilt when the
decoder's layout differs, instead of being cleared in set_layout. An access unit whose new
program config fails puts the layout back, and with it the SBR decoders still match.

Refs #1121

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 07:34:10 +01:00
alehelandClaude Opus 5.5 48f5283ec8 craft-audio: cite no section number for l_A
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 07:34:10 +01:00
alehelandClaude Opus 5.5 fa9ca36697 craft-audio: SBR review fixes
- A VARFIX pointer of 1 marks no transient envelope, like 0.
- A start at QMF channel 32 is valid; kx is checked once the crossover is known.
- The noise and harmonic gains take q / (1 + q) first, so two clamped levels no longer
  overflow to infinity and NaN.
- A header that runs past its fill element is refused before it replaces the one in use.
- A new program config layout drops the SBR decoders, whose history was the old order's.
- The ffmpeg oracle requires a high band to compare on every channel but the 5.1 LFE.

Refs #1121

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 07:34:10 +01:00
alehelandClaude Opus 5.5 f68e4369eb craft-audio: decode the HE-AAC SBR high band
aac::Decoder::set_sbr(true) decodes HE-AAC at twice the core rate with the
SBR tool of ISO/IEC 14496-3 §4.6.18: QMF analysis and synthesis, frequency
band tables, patching with LPC inverse filtering, envelope adjustment with
limiter, boost, noise and sinusoids. TrackDecoder uses it in place of the
2x upsampler. Tables are transcribed from ETSI ES 201 980 Annex I.

Matches ffmpeg's decoder on AudioToolbox HE-AAC streams of 1-6 channels:
the same 962-sample delay, ~54 dB SNR, high band level within 0.01 dB.
Parametric stereo is still not decoded.

Refs #1121

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 07:34:10 +01:00
alehel 1df8d98c85 craft-video: MPEG-2 encoder, first step: I and P pictures (#1133)
The start of MPEG-2 encoding in craft_video::mpeg2 (feature
mpeg2-encode): progressive frame pictures, closed I/P GOPs, 4:2:0 Main
Profile and 4:2:2 Profile, constant quantiser or single-pass average
bitrate with adaptive quantisation, half-sample motion search.

The encoder shares the decoder's code tables, IDCT, dequantisation and
motion compensation, so the decoder outputs exactly the encoder's
reconstruction. B pictures, a VBV guarantee, interlaced coding and DVD
or broadcast presets are later steps of #1133.

The mpeg2 feature is split into mpeg2-decode and mpeg2-encode; mpeg2
still turns on both.
2026-11-13 07:34:05 +01:00
Dylan M. Taylor 47bf5650b0 Expose shared InDesign signature 2026-11-13 01:31:26 -05:00
Dylan M. Taylor 96c8487984 Add shared InDesign conversion facade 2026-11-13 01:30:54 -05:00
Dylan M. Taylor 6ba1ca33ca Recognize InDesign files in shared registry 2026-11-13 01:27:11 -05:00
Dylan M. Taylor 1f9c271f7d Recognize legacy Word extension in shared registry 2026-11-13 01:26:09 -05:00
Dylan M. Taylor 32529b94e8 Resolve plain text format extensions 2026-11-13 01:24:40 -05:00
Dylan M. Taylor fc9ecb40e7 Extend shared file-format registry 2026-11-13 01:22:58 -05:00
Dylan M. Taylor 80731087bf Merge remote-tracking branch 'origin/main' into codex/1154-main-refresh 2026-11-13 06:10:02 +00:00
Dylan M. Taylor 79923702ff Merge remote-tracking branch 'origin/main' into fix/psd-head-view 2026-11-13 06:06:44 +00:00
Dylan M. Taylor 21d7c1267e metafile: draw GDI+ percentage hatch styles 2026-11-13 06:05:42 +00:00
Dylan M. Taylor 913b1aa97f Merge remote-tracking branch 'origin/codex/craft-time-soundcraft' into codex/soundcraft-format 2026-11-13 06:05:40 +00:00
Dylan M. Taylor 07a4cd0fc7 #778: preserve consumer VP8 frame limits 2026-11-13 06:05:39 +00:00
Dylan M. Taylor 10a2d6dd14 Merge remote-tracking branch 'origin/main' into codex/craft-time-soundcraft 2026-11-13 06:05:34 +00:00
Dylan M. Taylor 93d75f44d7 Merge remote-tracking branch 'origin/main' into feat/stencilcraft-format 2026-11-13 06:05:00 +00:00
Dylan M. Taylor d6ed8c20f1 Merge pull request #1161 from dylanmtaylor/codex/workspace-gate-main
ci: route workspace checks through shared gate
2026-11-13 01:04:23 -05:00
Dylan M. Taylor 4b8dde4c12 test(stencilcraft-format): exercise reader scalar root variants 2026-11-13 05:52:28 +00:00
Dylan M. Taylor eb379cf3d2 test(stencilcraft-format): cover scalar JSON roots 2026-11-13 05:51:08 +00:00