1z.lib 2====== 3The "z" library implements the commonly required image processing basics of 4scaling, colorspace conversion, and depth conversion. A simple API enables 5conversion between any supported formats to operate with minimal knowledge 6from the programmer. All library routines were designed from the ground-up 7with correctness, flexibility, and thread-safety as first priorities. 8Allocation, buffering, and I/O are cleanly separated from processing, allowing 9the programmer to adapt "z" to many scenarios. 10 11Requirements 12----- 13- Byte-addressable architecture 14- Two's complement integer encoding 15- 32-bit or greater machine word 16- C++11 compiler 17- Platforms: Microsoft Windows, POSIX 18 19Building 20----- 21The officially supported build system is GNU autotools. Use the provided 22"autogen.sh" script to instantiate the familiar "configure" and "make" build 23system. Visual Studio project files are not stable and are subject to change. 24 25Capabilities 26----- 27### Colorspace 28 29Colorspaces: SMPTE-C (NTSC), Rec.709, Rec.2020 30 31The colorspace module provides for conversion between any combination of 32colorspaces, as defined by the commonly used triplet of matrix coefficients, 33transfer characteristics, and color primaries. Conversions are implemented 34with intelligent logic that minimizes the number of intermediate 35representations required for common scenarios, such as conversion between 36YCbCr and RGB. Support is also provided for the non-traditional YCbCr system 37of ITU-R BT.2020 constant luminance (CL), which retains higher fidelity with 38chroma subsampling. Note that "z" is not a color management system and should 39not be used to perform drastic contrast or gamut reduction, such as BT.2020 40to BT.709. 41 42### Depth 43 44Formats: BYTE, WORD, HALF, FLOAT 45 46The depth module provides for conversion between any pixel (number) format, 47including one and two-byte integer formats as well as IEEE-754 binary16 48(OpenEXR) and binary32 formats. Limited range (16-235) and full swing (0-255) 49integer formats are supported, including conversion between such formats. 50Multiple dithering methods are available when converting to integer formats, 51from basic rounding to high quality error diffusion. 52 53### Resize 54 55The resize module provides high fidelity linear resamplers, including the 56popular Bicubic and Lanczos filters. Resampling ratios of up to 100x are 57supported for upsampling and downsampling. Full support is provided for 58various coordinate systems, including the various chroma siting conventions 59(e.g. JPEG and MPEG2) as well as interlaced images. 60 61Performance 62----- 63"z" is optimized for Intel(R) Architecture and features faster processing times 64than industry standard swscale software. 65 66Time (ms) to resize FHD image to UHD with Lanczos filter. 67 68| | z.lib 2.8 | swscale 4.0.2* | 69|--------------------------------|-----------|----------------| 70| Intel(R) Core(TM) i7-8565U | 7.7 | 15.2 | 71| Intel(R) Xeon(R) Platinum 8176 | 10.8 | 22.2 | 72 73Time (ms) to convert FHD BT.709 (YUV) to FHD BT.2020. 74 75| | z.lib 2.8 | swscale 4.0.2** | 76|--------------------------------|-----------|-----------------| 77| Intel(R) Core(TM) i7-8565U | 8.3 | 17.5 | 78| Intel(R) Xeon(R) Platinum 8176 | 11.5 | 25.6 | 79 80\* `scale=3840:2160:sws_flags=lanczos+accurate_rnd:sws_dither=none` 81 82\** `colorspace=all=bt2020:iall=bt709:format=yuv420p10` 83 84