zenavif 0.1.2

Pure Rust AVIF image codec powered by rav1d and zenravif
Documentation
# zenavif justfile

# Default recipe
default: check

# Check compilation
check:
    cargo check --all-targets

# Build release
build:
    cargo build --release

# Run tests
test:
    cargo test

# Run clippy with warnings as errors
clippy:
    cargo clippy --all-targets --all-features -- -D warnings

# Format code
fmt:
    cargo fmt

# Format check
fmt-check:
    cargo fmt --check

# Build with encode feature
build-encode:
    cargo build --features encode

# Test with encode feature
test-encode:
    cargo test --features encode

# Clippy with encode features
clippy-all:
    cargo clippy --all-targets --features encode -- -D warnings

# Test feature permutations
feature-check:
    cargo test --features encode
    cargo test --features encode-threading

# Full CI check
ci: fmt-check clippy test feature-check

# Run example decode_avif with test image
decode-test:
    mkdir -p /mnt/v/output/zenavif/test
    cargo run --release --example decode_avif -- {{justfile_directory()}}/../../aom-decode/tests/test.avif /mnt/v/output/zenavif/test/test.png

# Cross-test i686 (32-bit x86)
test-i686:
    cross test --target i686-unknown-linux-gnu

# Cross-test armv7 (32-bit ARM)
test-armv7:
    cross test --target armv7-unknown-linux-gnueabihf

# Run all cross tests
test-cross: test-i686 test-armv7

# Clean build artifacts
clean:
    cargo clean

# Update dependencies
update:
    cargo update

# Check outdated dependencies
outdated:
    cargo outdated

# Download AVIF test vectors
download-vectors:
    bash scripts/download-avif-test-vectors.sh

# Run integration tests with test vectors
test-integration:
    cargo test --test integration_corpus -- --ignored --nocapture

# Download vectors and run integration tests
test-all: download-vectors test-integration

# Build Docker image for libavif reference generation
docker-build:
    docker build -f Dockerfile.references -t zenavif-references .

# Generate libavif reference images using Docker
generate-references: download-vectors
    @if [ ! -d tests/zenavif-references/.git ]; then \
        echo "Error: tests/zenavif-references repo not found"; \
        echo "Clone it with: git clone <url> tests/zenavif-references"; \
        exit 1; \
    fi
    docker run --rm \
        -v {{justfile_directory()}}/tests/vectors:/vectors:ro \
        -v {{justfile_directory()}}/tests/zenavif-references:/references \
        zenavif-references

# Run pixel verification tests (requires references)
test-pixels:
    cargo test --test pixel_verification -- --ignored --nocapture verify_against_libavif

# Full pixel verification: generate references and test
verify-pixels: generate-references test-pixels

# --- link-u/avif-sample-images corpus (reproduces rav1d-safe#1) ---

# Download link-u/avif-sample-images test corpus
download-linku:
    bash scripts/download-linku-samples.sh

# Generate libavif reference PNGs for link-u corpus via Docker
generate-linku-references: download-linku docker-build
    mkdir -p tests/linku-references
    docker run --rm \
        -v {{justfile_directory()}}/tests/vectors/link-u:/vectors:ro \
        -v {{justfile_directory()}}/tests/linku-references:/references \
        -e VECTORS_DIR=/vectors \
        -e REFERENCES_DIR=/references \
        --entrypoint /usr/local/bin/generate-linku-references.sh \
        zenavif-references

# Decode all link-u samples (no reference comparison, catches panics)
test-linku-decode: download-linku
    cargo test --test linku_corpus -- --ignored --nocapture linku_decode_all

# Compare link-u decode output against libavif references
test-linku: download-linku
    cargo test --test linku_corpus -- --ignored --nocapture linku_pixel_parity

# Full link-u pipeline: download, generate references, compare
verify-linku: generate-linku-references test-linku