Commit Graph
1800 Commits
Author SHA1 Message Date
Dylan M. Taylor b577b219e9 Merge pull request #1188 from storytold/codex/craft-jpeg-progressive
craft-jpeg: decode progressive Huffman JPEG
2026-11-13 06:50:58 -05:00
Dylan M. Taylor 146a667323 feat(jpeg): decode progressive Huffman frames 2026-11-13 10:49:21 +00:00
Dylan M. Taylor 68e53e2fee Merge pull request #1130 from alehel/claude/he-aac-codec-support-53a592
craft-audio: decode the HE-AAC SBR high band
2026-11-13 05:46:15 -05:00
Dylan M. Taylor d9419a111a Merge pull request #1136 from alehel/craft-video/mpeg2-encode-ip
craft-video: MPEG-2 encoder, first step: I and P pictures (#1133)
2026-11-13 05:41:51 -05:00
Dylan M. Taylor ba12997467 Merge pull request #1175 from alehel/claude/avi-muxer
craft-media: AVI muxer (AviWriter)
2026-11-13 05:41:45 -05:00
Dylan M. Taylor 58ae17473c Merge pull request #1179 from dylanmtaylor/codex/stencilcraft-typed-format
StencilCraft: share the native document model and codec
2026-11-13 05:33:43 -05:00
Dylan M. Taylor db49c2d50e Merge pull request #1165 from storytold/codex/soundcraft-format
Add shared SoundCraft session format
2026-11-13 05:26:41 -05:00
Dylan M. Taylor 81b88332b5 Share library and recent files JSON models 2026-11-13 04:34:44 -05:00
Dylan M. Taylor 2f281a419c Align frame grid lines with typed position rounding 2026-11-13 09:22:49 +00:00
Dylan M. Taylor b32e55a956 Preserve session repairs and frame grid boundaries 2026-11-13 09:21:57 +00:00
Dylan M. Taylor 10e7f7763a Test typed StencilCraft document readers 2026-11-13 04:13:55 -05:00
Dylan M. Taylor 68ad072e4a Merge remote-tracking branch 'origin/main' into codex/soundcraft-format 2026-11-13 09:12:20 +00:00
Dylan M. Taylor 915fc54458 Merge pull request #1164 from storytold/codex/craft-time-soundcraft
craft-time: preserve SoundCraft sample-time APIs
2026-11-13 04:10:26 -05:00
Dylan M. Taylor 27d3b4acf5 Keep StencilCraft v1 fixtures with shared document crate 2026-11-13 04:08:30 -05:00
Dylan M. Taylor 7c56d282a2 Merge pull request #1170 from dylanmtaylor/codex/designcraft-format-migration
Add reusable document bundle and SVG preflight APIs
2026-11-13 04:03:23 -05:00
alehelandClaude Opus 5.5 1f3be111b8 craft-audio: drop a short last SBR patch before the patch limit
A header whose sixth patch is short (96 kHz, start 3, stop 9) was
rejected, though that patch is dropped and five remain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 09:56:22 +01:00
Dylan M. Taylor 686b5478ea Merge pull request #1173 from dylanmtaylor/codex/file-formats-api
Add shared file format detection
2026-11-13 03:55:21 -05:00
Dylan M. Taylor ea24422ae9 Merge pull request #1154 from storytold/codex/778-h264-picnum
video: harden H.264 and configure frame limits
2026-11-13 03:49:15 -05:00
Dylan M. Taylor fd9e3d67e6 Merge pull request #1177 from dylanmtaylor/codex/craft-pcraft-bundle
Add shared .pcraft bundle storage
2026-11-13 03:48:30 -05:00
Dylan M. Taylor 166d0d2127 craft-stencilcraft-document: share the native document model 2026-11-13 03:46:47 -05:00
Dylan M. Taylor 370f6714ed craft-stencilcraft-format: support typed document fields 2026-11-13 03:34:41 -05:00
Dylan M. Taylor 01452740b6 Merge pull request #1169 from dylanmtaylor/codex/stencilcraft-format-api
Add bounded common raster codec facade
2026-11-13 03:25:55 -05:00
Dylan M. Taylor f16d99f71c fix time parsing and frame boundary edge cases 2026-11-13 07:57:51 +00:00
Dylan M. Taylor f6cab1980b Preserve SVG picture fallbacks in the Presentation model 2026-11-13 02:54:31 -05:00
Dylan M. Taylor 55f6235c5b Simplify gridline no-fill check 2026-11-13 02:54:31 -05:00
Dylan M. Taylor 5e24ea380e Avoid duplicated timeline time primitives 2026-11-13 07:47:44 +00:00
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 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 8abfa9d0f1 Classify legacy Excel extensions in shared registry 2026-11-13 01:53:37 -05: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 fccc008271 Detect DesignCraft and IDML document content 2026-11-13 01:44:49 -05: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