SheerVideo
- FourCCs: Shr0, Shr1, Shr2, Shr3, Shr4, Shr5, Shr6, Shr7
- Website: http://www.bitjazz.com/sheervideo/
- Samples: http://www.dvjtj.com/repository.php
SheerVideo is a family of real-time lossless video codecs intended for capture, editing, playback, and archival of professional-quality video, digitized film, and computer-generated imagery. It supports all professional-quality pixel formats, including RGB[A], and Y'CbCr[A]; with and without alpha; 10-bit and 8-bit; full-range and video-range; 4:4:4[:4] and 4:2:2[:4]; progressive-scan and interlaced; SD, HD, anyD; 4:3, 16:9, and any:any. SheerVideo does no interframe compression, so all frames are keyframes, for instant random access.
Features
Codecs
SheerVideo currently consists of 8 codecs - a generic 'Sheer' codec, 6 fully supported specific codecs, and a legacy codec (Sheer Y'CbCr 8bw 4:2:2) for backward compatibility:
- Sheer
- Sheer RGB[A] 10bf
- Sheer RGB[A] 8bf
- Sheer Y'CbCr[A] 10bv 4:4:4[:4]
- Sheer Y'CbCr[A] 8bv 4:4:4[:4]
- Sheer Y'CbCr[A] 10bv 4:2:2[:4]
- Sheer Y'CbCr[A] 8bv 4:2:2[:4]
- Sheer Y'CbCr 8bw 4:2:2
Each of the 6 main specific codecs supports an optional alpha channel, and each has both a progressive coding mode and an interlaced coding mode, so there are 4 flavors of each codec. The generic codec chooses the appropriate codec depending on the source pixel format provided. The name of the specific codec indicates the native class of pixel formats which it handles in real-time without loss. For example, the 'Sheer RGB[A] 8bf' codec provides real-time lossless encoding from and decoding to any RGB[A] pixel-format with 8-bit full-range channels.
Color Conversion
A unique feaure of SheerVideo is its maximally accurate Synchromy color-conversion engine, which can losslessly interconvert between RGB[A] (film & CGI) and Y'CbCr[A] (video) color spaces, which is useful when compositing video and digitized film & CGI, as most productions nowadays do. Synchromy gives every Sheer codec the capability to input and output all supported pixel formats with maximal accuracy.
To specify the precise color-conversion parameters, the video color space can be set to NTSC, PAL or SECAM, HD, and HD-1035, and the RGB[A] range for 10-bit pixel can be specified as full-range or video-range.
Pixel Formats
The generic Sheer codec and each of the 6 main specific Sheer codecs support all of the following pixel formats:
- RGB[A] 10b:
- b64a
- b48r
- F10k
- R10k
- S10k
- F210
- r210
- S210
- RGB[A] 8b:
- raw
- ARGB
- ABGR
- RGBA
- BGRA
- RGB
- BGR
- 24BG
- Y'CbCr[A] 10bv 4:4:4[:4]
- r4fl
- v410
- Y'CbCr[A] 8bv 4:4:4[:4]
- v408
- r408
- Y'CbCr[A] 10bv 4:2:2[:4]
- v210
- v216
- Y216
- Y'CbCr[A] 8bv 4:2:2[:4]
- 2vuy
- 2Vuy
- yuvs
The legacy Sheer Y'CbCr 8bw 4:2:2 codec does not include Synchromy, and supports only the obsolete wide-range Y'CbCr 8bw 4:2:2 pixel format:
- yuvu
- yuv2
Self-Check Mode
The Sheer encoders feature an optional self-check mode that decodes each frame immediately after encoding and compares it to the original. In the QuickTime edition, this mode can generally only be used for the Sheer RGB[A] codecs, because the standard QuickTime interface requires RGB for the preview and other user-interface features.
Platforms
SheerVideo is currently available for Windows PC, Mac UB, Mac Intel, Mac PPC, and Mac Classic. The Windows edition supports Windows '95, '98, Me, 2000, NT, and XP; Windows XP x64 is not yet supported. The Mac UB and Intel editions support Mac OS X 10.4+; while the Mac PPC edition supports Mac OS X 10.1+, and the Mac Classic version supports Mac OS 8.6 and Mac OS 9. Optimized vector-processor code accelerates the native encoding and decoding pathways for PowerPC G4 and G5 on the Mac; vectorized code for the PC is not yet available.
SheerVideo is implemented as a set of QuickTime codecs (image compressors, image decompressors, and image transcoders) for both Mac and PC. For Windows, an AVI (Windows Media) edition is also available.
The entire family of encoders, decoders, and transcoders is bundled into a single commercial product, 'SheerVideo Pro'. The decoders by themselves are bundled into a freeware product, 'SheerVideo Reader'.
Frame Format
0- 3 'Shir' or 'Zwak' 4- 7 0x0D 0x0A 0x00 0x0A 8 0xAD or 0xFF 9-15 'BitJazz' 16-19 colour format (e.g. ' RGB')
Coding principle is quite easy — every line is transferred as raw or delta-coded with static codes. There is a dozen of different double codesets depending on input format, different components can be coded with the first or the second VLC in the set (that also depends on the format, e.g. luma may be coded with one table, chroma with the other).
mask = (1 << bits_per_component) - 1; if (get_bit()) { for (x = 0; x < width; x++) for (i = 0; i < components; i++) line[0][x][i] = get_bits(bits_per_component); } else { for (i = 0; i < components; i++) pred[i] = pred_for_this_format[i]; for (x = 0; x < width; x++) for (i = 0; i < components; i++) line[0][x][i] = pred[i] = (pred[i] + get_vlc(vlc_set[format][i])) & mask; } for (y = 1; y < height; y++) { if (get_bit()) { for (x = 0; x < width; x++) for (i = 0; i < components; i++) line[0][x][i] = get_bits(bits_per_component); } else { for (i = 0; i < components; i++) pred_TL[i] = pred_L[i] = line[y - 1][0][i]; for (x = 0; x < width; x++) { for (i = 0; i < components; i++) { pred_T[i] = line[y - 1][x][i]; pix = (3 * pred_T[i] + 3 * pred_L[i] - 2 * pred_TL[i]) >> 2; pix = (pix + get_vlc(vlc_set[format][i])) & mask; line[y][x][i] = pix; pred_L[i] = pix; pred_TL[i] = pred_T[i]; } } } }