Skip to content

v0.0.8

Latest

Choose a tag to compare

@MagicalTux MagicalTux released this 15 Oct 00:50
· 15 commits to master since this release
52ac342

Other

  • a timed output skips the cover still — the image-sequence track is the video
  • a single still output picks the still stream by shape (1/1 time base, one tick), not by index
  • gateway format suite + README for the side-channel stills
  • side-channel stills ride the oxideav-image gateway
  • oxideav-webp 0.3
  • stream_codec() — the per-stream default codec rule
  • PngImage::packed is fallible from png's fleet-sweep release onward
  • drop the streams an output cannot hold instead of failing
  • run_with_preferences forwards CodecPreferences to the executor
  • drop the MP4 raw-video default for now
  • WAV container default (PCM) for non-PCM audio
  • per-stream codecs for container outputs (.webm / .mkv / .y4m / .ogg)
  • silence deprecations of not-yet-released image-crate API renames (ico/svg) so the crate is warning-clean
  • mesh3d render: build RenderOptions with functional update so new renderer options default
  • (convert) follow the oxideav-bmp image-crate contract — BmpImage::packed, encode(&img, &EncodeOptions), decode_rgba8; bmp requirement >=0.1.6, <0.3
  • (convert) follow the oxideav-png image-crate contract — PngImage::packed, encode(&img, &EncodeOptions), decode / decode_rgba8

Changed

  • A single still output picks the still stream by shape, not by
    index.
    convert in.heics out.png writes the first stream whose
    timeline is one tick of a 1/1 time base (the composed primary image);
    %d fan-outs keep taking the first timed stream. HEIF lists its
    tracks ahead of the cover still on sequence-brand files since
    oxideav-heif r475, which made stream 0 the raw track
    (image_sink::still_stream).
  • A timed output skips the cover still. convert in.heics out.mp4
    (or .gif, .mkv, …) remuxes / re-encodes the image-sequence track
    and skips the still-image streams the selection kept (noted per
    stream); before, the cover still became the only video track.
  • Side-channel still images ride the oxideav-image gateway. The
    PDF page renderer, the 3D→raster renderer and the icon writer's
    input no longer call oxideav-png / oxideav-bmp / oxideav-mjpeg
    / oxideav-webp directly: a render goes to oxideav_image::encode
    (encoder + muxer resolved from the output extension through the
    caller's RuntimeContext) and an icon source comes from
    oxideav_image::open. Every still-image format registered in the
    context is now a raster output of convert x.pdf out.X /
    convert scene.stl out.X (tiff, gif, qoi, tga, heic, …) and an
    icon source (convert photo.jpg -define icon:auto-resize=… out.ico),
    with no per-format code here. WebP output works again (lossless VP8L
    by default, lossy VP8 with -quality).
  • -quality, -depth and --opt KEY=VALUE reach the side-channel
    encoders: quality through the gateway's schema-gated option, --opt
    validated against the encoder schema like the pipeline route, the
    encoder input layout chosen by the pipeline route's
    pick_sink_format (an encoder declaring no accepted layouts — JPEG
    — is probed in ImageMagick's order: own non-RGB layout, 4:2:0,
    4:2:2, 4:4:4, RGB, gray).
  • Output delta: PDF / 3D → JPEG without -quality is written at
    the encoder's declared default (75) instead of the former hard-coded
    85; -quality 85 reproduces the former samples exactly (same
    quantisation tables). PNG / BMP / ICO / SVG / PDF outputs are
    byte-identical to before.
  • raster_io::classify_output_with(Option<&RuntimeContext>, path) and
    route::decide_with(plan, Option<&RuntimeContext>) are the
    registry-aware classifications; classify_output / decide keep
    the registry-free four-family raster set. RasterFormat::Registry
    names an extension the registry can encode. run routes with the
    caller's context.
  • pdf_runner::run, mesh3d_render::run and ico_runner::run
    (#[doc(hidden)] modules) take the RuntimeContext.
  • Dependencies: oxideav-image = "0.0" added; oxideav-png,
    oxideav-bmp, oxideav-mjpeg, oxideav-webp removed. oxideav-ico
    stays (multi-size icons are outside the gateway's one-geometry
    encode_frames). Dev-dependencies register the formats the tests
    exercise directly (the published oxideav-meta aggregator registers
    nothing outside the umbrella).

Added

  • raster_io::{read_image_to_rgba, encode_raster, gateway_error, RgbaImage::{from_image, to_image, pixel_format}}.
  • Tests: gateway round trips through png / jpg / bmp / webp / gif /
    tiff / qoi on the PDF and 3D side-channels, icon input from every
    registered format, -quality / --opt / -depth on the
    side-channel, typed errors for unregistered extensions and unknown
    inputs (519 → 533).