aboutsummaryrefslogtreecommitdiff
path: root/vendor/exr/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/exr/README.md')
-rw-r--r--vendor/exr/README.md303
1 files changed, 0 insertions, 303 deletions
diff --git a/vendor/exr/README.md b/vendor/exr/README.md
deleted file mode 100644
index 04e5419..0000000
--- a/vendor/exr/README.md
+++ /dev/null
@@ -1,303 +0,0 @@
-[![Rust Docs](https://docs.rs/exr/badge.svg)](https://docs.rs/exr)
-[![Rust Crate](https://img.shields.io/crates/v/exr.svg)](https://crates.io/crates/exr)
-[![Rust Lang Version](https://img.shields.io/badge/rustc-1.59.0-lightgray.svg)](https://blog.rust-lang.org/2022/02/24/Rust-1.59.0.html)
-[![Wasm Ready](https://img.shields.io/badge/wasm-supported-%236d0)](https://github.com/johannesvollmer/exrs/actions?query=branch%3Amaster)
-[![downloads](https://img.shields.io/crates/d/exr)](https://crates.io/crates/exr)
-[![Lines of Code](https://tokei.rs/b1/github/johannesvollmer/exrs?category=code)](https://tokei.rs)
-
-# EXRS
-
-This library is a 100% Rust and 100% safe code library for
-reading and writing OpenEXR images.
-
-[OpenEXR](http://www.openexr.com/)
-is the de-facto standard image format in animation, VFX, and
-other computer graphics pipelines, for it can represent an immense variety of pixel data with lossless compression.
-
-Features include:
-- any number of layers placed anywhere in 2d space, like in Photoshop
-- any set of channels in an image (rgb, xyz, lab, depth, motion, mask, anything, ...)
-- three types of high dynamic range values (16bit float, 32bit float, 32bit unsigned integer) per channel
-- uncompressed pixel data for fast file access
-- lossless compression for any image type
-- lossy compression for non-deep image types to produce very small files
-- load specific sections of an image without processing the whole file
-- compress and decompress image pixels on multiple threads in parallel
-- add arbitrary meta data to any image, including custom byte data, with full backwards compatibility
-- any number of samples per pixel ("deep data") (not yet supported)
-
-### Current Status
-
-This library has matured quite a bit, but should still be considered incomplete.
-For example, deep data and DWA compression algorithms are not supported yet.
-
-If you encounter an exr file that cannot be opened by this crate but should be,
-please leave an issue on this repository, containing the image file.
-
-The focus is set on supporting all feature and correctness;
-some performance optimizations are to be done.
-
-__What we can do:__
-
-- Supported OpenEXR Features
- - [x] custom attributes
- - [x] multi-part images (multiple layers, like Photoshop)
- - [x] multi-resolution images (mip maps, rip maps)
- - [x] access meta data and raw pixel blocks independently
- - [x] automatically crop away transparent pixels of an image (opt-in)
- - [ ] channel subsampling
- - [ ] deep data
- - [x] compression methods
- - [x] uncompressed
- - [x] zip line (lossless)
- - [x] zip block (lossless)
- - [x] rle (lossless)
- - [x] piz (lossless) (huge thanks to @dgsantana)
- - [x] pxr24 (lossless for f16 and u32)
- - [x] little-endian architectures
- - [ ] big-endian architectures __(help wanted)__
- - [x] b44, b44a (huge thanks to @narann)
- - [ ] dwaa, dwab __(help wanted)__
-
-- Nice Things
- - [x] no unsafe code, no undefined behaviour
- - [x] no CMake required or environment variables required
- - [x] re-imagined exr api with low barrier of entry
- (see `read_rgba_file`, `write_rgba_file`, `read_all_data_from_file`),
- plus embracing common high-level Rust abstractions
- - [x] a full-fledged image data structure that can contain any exr image,
- can open any image with a single function call (`read_all_data_from_file`)
- without knowing anything about the file in advance
- - [x] decompress and decompress image sections either
- in parallel or with low memory overhead
- - [x] read and write progress callback
- - [x] write blocks streams, one after another
- - [x] memory mapping automatically supported
- by using the generic `std::io::Read` and `std::io::Write` traits
-
-
-<!-- detailed internal feature checklist:
-- [x] Inspecting Metadata
- - [x] Singlepart
- - [x] Tiles
- - [x] Scan lines
- - [x] Deep Tiles
- - [ ] Deep Scan Lines _(coded, but untested)_
- - [x] Multipart
- - [x] Tiles
- - [x] Scan lines
- - [ ] Deep Tiles _(coded, but untested)_
- - [x] Deep Scan Lines
- - [x] Multi Resolution
- - [x] Singular Resolution
- - [x] MipMaps
- - [x] RipMaps _(coded, but untested)_
- - [x] Non-Standard Attributes
- - [x] Reading those with known names and unknown names
- - [x] Reading those with known types
- - [x] Reading those with unknown types into a plain byte buffer
- - [x] Nice API for preview attribute extraction
-
-- [ ] Decompressing Pixel Data
- - [x] Any LineOrder
- - [x] Any Pixel Type (`f16`, `f32`, `u32`)
- - [x] Multipart
- - [ ] Deep Data
- - [x] Rip/Mip Maps _(coded, but untested)_
- - [ ] Nice API for RGBA conversion and displaying other color spaces?
- - [ ] Compression Methods
- - [x] Uncompressed
- - [x] ZIPS
- - [x] ZIP
- - [x] RLE
- - [x] PIZ
- - [x] RXR24
- - [x] B44, B44A
- - [ ] DWAA, DWAB
-
-- [ ] Writing images
- - [x] Scan Lines
- - [x] Tiles
- - [x] Multipart
- - [ ] Deep Data
- - [x] User supplied line order
- - [x] Rip/Mip Maps _(coded, but untested)_
- - [x] 100% correct meta data
- - [x] Compression Methods
- - [x] Uncompressed
- - [x] ZIPS (lossless)
- - [x] ZIP (lossless)
- - [x] RLE (lossless)
- - [x] PIZ (lossless)
- - [x] PXR24 (lossless for f16 and u32)
- - [x] B44, B44A
- - [ ] DWAA, DWAB
-
-- [x] De/compressing multiple blocks in parallel
-
-- [ ] Profiling and real optimization
- - [x] Memory Mapping
-
-- [x] IO Progress callback?
-- [ ] SIMD
-- [x] Detailed file validation
- - [x] Channels with an x or y sampling rate other than 1 are allowed only in flat, scan-line based images.
- - [x] If the headers include timeCode and chromaticities attributes, then the values of those attributes must also be the same for all parts of a file
- - [x] Scan-line based images cannot be multi-resolution images. (encoded in type system)
- - [x] Scan-line based images cannot have unspecified line order apparently?
- - [x] layer name is required for multipart images
- - [x] Enforce minimum length of 1 for arrays
- - [x] [Validate data_window matches data size when writing images] is not required because one is inferred from the other
- - [x] Channel names and layer names must be unique
-
-- [x] Explore different APIs
- - [x] Let user decide how to store data
- - [x] Loading Metadata and specific tiles or blocks separately
--->
-
-
-### Usage
-
-Add this to your `Cargo.toml`:
-```toml
-[dependencies]
-exr = "1.71.0"
-
-# also, optionally add this to your crate for smaller binary size
-# and better runtime performance
-[profile.release]
-lto = true
-```
-
-The master branch of this repository always matches the `crates.io` version,
-so you could also link the github repository master branch.
-
-### Example
-
-Example: [generate an rgb exr file](https://github.com/johannesvollmer/exrs/blob/master/examples/0_write_rgba.rs).
-
-```rust
-extern crate exr;
-
-/// To write your image data, you need to specify how to retrieve a single pixel from it.
-/// The closure may capture variables or generate data on the fly.
-fn main() {
- use exr::prelude::*;
-
- // write a file, with 32-bit float precision per channel
- write_rgba_file(
-
- // this accepts paths or &str
- "minimal_rgba.exr",
-
- // image resolution is 2k
- 2048, 2048,
-
- // generate (or lookup in your own image)
- // an f32 rgb color for each of the 2048x2048 pixels
- // (you could also create f16 values here to save disk space)
- |x,y| {
- (
- x as f32 / 2048.0, // red
- y as f32 / 2048.0, // green
- 1.0 - (y as f32 / 2048.0), // blue
- 1.0 // alpha
- )
- }
-
- ).unwrap();
-}
-```
-
-See the [the examples folder](https://github.com/johannesvollmer/exrs/tree/master/examples) for more examples.
-
-Or read [the guide](https://github.com/johannesvollmer/exrs/tree/master/GUIDE.md).
-
-
-### Goals
-
-`exrs` aims to provide a safe and convenient
-interface to the OpenEXR file format. It is designed
-to minimize the possibility of invalid files and runtime errors.
-It contains a full-fledged image data structure that can contain any exr image,
-but also grants access a low level block interface.
-
-This library does not try to be a general purpose image file or image processing library.
-Therefore, color conversion, beautiful subsampling, and mip map generation are left to other crates for now.
-As the original OpenEXR implementation supports those operations, this library may choose to support them later.
-Furthermore, this implementation does not try to produce byte-exact file output
-matching the original implementation, instead, it is only aimed for correct output.
-
-#### Safety
-
-This library uses no unsafe code. In fact, this crate is annotated with `#[forbid(unsafe_code)]`.
-Some dependencies use unsafe code, though this is minimized by selecting dependencies carefully.
-
-All information from a file is handled with caution.
-Allocations have a safe maximum size that will not be exceeded at once,
-to reduce memory exhaustion attacks.
-
-### What I am proud of
-
-- Flexible API (choose how to store your data instead of receiving an allocated image)
-- Safe API (almost impossible to accidentally write invalid files)
-- "if it compiles, it runs" methodology
-- [Awesome Contributors!](CONTRIBUTORS.md)
-
-### Wasm
-This crate supports the `wasm-unknown-unknown` target.
-Until WASM has threads, decoding and encoding will be slower for compressed files.
-Of course, you will need to read from byte buffers instead of file handles.
-
-### Motivation
-
-This library does not support the toxic mindset of
-rewriting existing C++ code in Rust just for the sake of switching the language.
-The OpenEXR image format is defined by a proven
-and battle-tested reference implementation.
-
-However, as an alternative to the official reference implementation,
-this library has the opportunity to explore radically different
-designs, no matter what language it is written in. Neat!
-
-Also, I really wanted to have a library
-which had an 'X' in its name in my git repositories.
-
-Keep in mind that there are official Rust bindings to the C++ reference implementation,
-and they offer several advantages over this Rust implementation:
-- they support all the features and can read any file, no surprises
-- they are constantly driven by industry giants,
- so they have the higher probability of still being maintained in a decade
-- they are battle tested and relied upon by a lot of existing projects
-
-### Specification
-
-This library is modeled after the
-official [`OpenEXRFileLayout.pdf`](http://www.openexr.com/documentation.html)
-document. Unspecified behavior is concluded from the C++ library.
-
-### Roadmap
-1. Support all compression formats (missing format: DWAA/DWAB)
-1. Support subsampling
-1. Support Deep Data
-1. Automatic conversion between color spaces
-1. Profiling and other optimization
-1. Tooling (Image Viewer App, Metadata Extraction Tool, ...)
-
-## Contributing
-This project has awesome contributors and is welcoming for
-contributions on [Github](https://github.com/johannesvollmer/exrs).
-
-### Running Tests
-
-To run all fast tests on your native system, use `cargo test`.
-
-To start fuzzing on your native system indefinitely,
-use `cargo test --package exr --test fuzz fuzz -- --exact --ignored`.
-
-To run all fast tests on an emulated system, use one of the following commands.
-Each command requires a running `docker` instance,
-and `cross-rs` to be installed on your machine (`cargo install cross-rs`).
-- Mips (Big Endian) `cross test --target mips-unknown-linux-gnu --verbose`
-
-To benchmark the library, simply run `cargo bench`. \ No newline at end of file