Alternative University

Computer Science

Raster Image Storage

Higher Precision Extended Range

XRH File Format 2.0

Channels (Image Planes)

The rest of an XRH file, following the Channel Names block, is pixel data stored as image planes (channels). All image planes are the same width and height (have the same number of scanlines and the same number of samples per scanline). Subsampling of channels is not supported. Applying different compression rates for different channels is supported, instead of subsampling channels.

Each channel is stored as a block of bytes, referred to as a Channel Block. Channel Blocks are stored one after the other, to the end of the file.


Figure 1:  XRH 2.0 file with three Channel Blocks: the first Channel Block storing red intensity values (samples), the second Channel Block storing green samples, and the third Channel Block storing blue samples.

Each Channel Block begins with a 4-byte start-of-channel-block marker, followed with a 64-bit Size integer, followed with a 32-bit Channel Number integer, followed with a 32-bit Sample Stride integer, followed with a 32-bit Color Transformation Type, followed with a 64-bit Compression Type integer, followed with a 64-bit Size of Data, followed with the Data (samples) for that channel, which is followed with a 4-byte end-of-channel-block marker, which is followed with the next Channel Block if there is a next Channel Block.


Figure 2:  Channel Block (image plane) of an XRH 2.0 file.

The first four bytes of a Channel Block store the value 0x53434200 (ASCII string SCB\0) which marks the start-of-channel-block.

Start of Channel Block Marker:  SCB\0

The next 8 bytes of a Channel Block are a Size integer that specifies the total size (number of bytes) of the entire Channel Block including the Size integer and the start and end markers. The entire block may be skipped by offsetting that many bytes from the beginning of the Channel Block (to the next Channel Block).

Note that the Size integer of a Channel Block is 8 bytes, not 4 bytes. It is a 64-bit integer. And keep in mind that all multi-byte numbers, including this Size integer, are stored in Big Endian format (network byte order).

Immediately after the Size integer, the next 4 bytes store an integer that specifies the Channel Number of this channel in the XRH file.  Channel Numbers are sequential, 1-based:  The first channel stored in the file is Channel Number 1, the next channel stored in the file is Channel Number 2, etc.

After the Channel Number, the next 4 bytes store the Sample Stride, which is an integer that specifies the number of bytes of each channel sample. This must be 4 for 32-bit floating point, or 8 for 64-bit floating point.

The next 4 bytes store the Color Transformation Type: Zero (0) if there is no built-in color transformation; or One (1) which specifies ITU-R BT.709. Future XRH versions may support other built-in color transformation types. If Color Transformation Type is 1, Compression Type must be lossy. In that case, this channel is the Y Channel of a set of YCbCr channels, and the next two channels are the Cb and Cr channels.

The next 8 bytes after the Color Transformation Type is an unsigned 64-bit integer that specifies the Compression Type of the Channel Block, which must be one of the following values:


Zebra  : 
SZMOD  : 
ZFP (Optional)  : 
Porcupine  : 
 0x 5A4252 00020000
 0x 535A4D 00020000
 0x 5A4650 00020000
 0x 50504E 00020000
Channel Compression Type
(unsigned 64-bit integer)

Other Compression Type numbers are reserved for compression methods that are not yet supported.

If the Compression Type integer is 0x5A425200020000 (Zebra), the Data of the Channel Block consists of a lossless Zebra Compression Stream. That will be discussed in the Zebra Compression page.

If the Compression Type integer is 0x535A4D00020000 (SZMOD), the Data of the Channel Block is a lossy SZMod Compression Stream. That will be discussed in the SZMOD page.

If the Compression Type integer is 0x5A465000020000 (ZFP), the Data of the Channel Block is a lossy ZFP Compression Stream. That will be discussed in the ZFP Compression page. Note: ZFP compression is optional, for specialized uses (not usually intended for data interchange).

If the Compression Type integer is 0x50504E00020000 (Porcupine), the Data of the Channel Block consists of a lossless Porcupine (PPN) Compression Stream. That will be discussed in the Porcupine Compression page.

The next 8 bytes after the Compression Type is an unsigned 64-bit integer that specifies the size of the Data which immediately follows.

Immediately after the Data (after the compressed data stream), the last 4 bytes of the Channel Block store 0x45434200 (ASCII string ECB\0) as the end-of-channel-block marker.

End of Channel Block Marker:  ECB\0


Technical Notes

Color channels are not premultiplied even if opacity (alpha) channels are stored; this is a still image format.


< Previous: Channel Names    
    Next: Zebra Compression >
XRH File Format
Page 1 : 
Page 2 : 
Page 3 : 
Page 4 : 
Page 5 : 
Page 6 : 
Page 7 : 
Page 8 : 
Page 9 : 
Page 10 : 
Page 11 : 
Introduction
File Layout & Header
Comments
Custom Properties
Channel Names
Channels (this page)
Zebra Compression
SZMOD Compression
ZFP Compression
Porcupine Compression
Color Transformations

Return to Computer Science

Return to Alternative University

Copyright © 2021 Arc Math Software, All rights reserved
Arc Math Software, P.O. Box 221190, Sacramento CA 95822 USA   Contact
2021–Jun–14  15:23  UTC