Subject: Winnov hardware compression
From: Bill Dirks <bdirks () micron ! com>
Date: 1999-10-21 19:57:39
[Download message RAW]
Here are some more details about Winnov hardware compression. I haven't
made it available to applications yet, but I'm working on it. Maybe in a
few days. At least this gives some understanding of how it works.
Winnov WAVI Hardware Compression
As Applied in the Linux Drivers
WAVI is the chip designed by Winnov that the Videum series
products are based on.
WAVI captures data from the video decoder chip and stores
it in the on-board SRAM in one of the several video data
formats that it can do.
The Linux driver uses five video data format modes of the
WAVI when capturing in its compressed mode: DH7, DH6, DH5,
DH4, and YCQ.
DH7, DH6, DH5, and DH4 are the Delta-Huffman variable-
length compressed formats. These formats compress YUV 4:2:2
data using variable-length codes.
The uncompressed 4:2:2 data is 8 bits per component, and
stores two pixel values using two Y values, one U value
and one V value. The Ys and U/Vs alternate like this:
Y-U-Y-V-Y-U-Y-V-Y-U-Y-V--.... Without compression, the
data requires 16 bits per pixel.
The compressed format turns each one of those components
into a variable-length code. The process is as follows:
1. The data values are truncated to 7 (DH7), 6 (DH6), 5
(DH5) or 4 (DH4) bits by discarding the low-order bits.
2. The result is compared with the previous value of the
component, and the delta is computed by subtracting the
previous value (delta = value - previous_value). A Y value
is compared with the previous Y value, a U value is
compared with the previous U value, and V with previous V.
The very first Y, U and V of a video field image is
compared with zero.
3. If the delta is a positive value greater than 7, or a
negative value less than -7, then the delta is discarded,
and the absolute (truncated) value of the component is
stored, prefixed by 8 1-bits. Otherwise the delta is
converted to a variable-length code by the following table.
xxxx11111111 X DH4 absolute value, not a delta
xxxxx11111111 X DH5 absolute value, not a delta
xxxxxx11111111 X DH6 absolute value, not a delta
xxxxxxx11111111 X DH7 absolute value, not a delta
Successive codes are assembled into longer words from LSB to
MSB. For example, the code sequence (+3), (-2), (-4), (0)
becomes 16 bits like this:
0 101111 1011 00111
(0) (-4) (-2) (+3)
So you read the codes from LSB to MSB. You could call it a
The decompression algorithm should be obvious. If the next
8 bits are all 1's then it is an absolute code. Get the
value from the bits following the 8 1's. Otherwise it is
a delta code. Convert the code to a delta value and add it
to the previous value. Fill in the LSBs of each output
value with 0's to make it 8 bits.
This compression scheme is lossy. The loss occurs at the
first step where the data are truncated. The variable-length
encoding and decoding is lossless. This scheme preserves
spacial resolution (there is no blurring effect) because it
encodes each pixel individually. It's a good choice for
capturing raw video disk to save space while preserving
The best case compression rate is when all the deltas are
zero which results in 2 bits per pixel. Typical is more
like 4 to 7 bits per pixel. It depends on the dimensions of
the image (bigger images get better compression because
adjacent pixels are more similar) and on the content of
Bad compression cases can cause the compressed data to grow
quite large if there are a lot of absolute codes. An example
is the "snow" you get with bad TV reception. If the image
data grows too big for the SRAM, then it becomes impossible
to capture images. To deal with that, the driver has a worst
case fall-back mode. When the image can't be captured in
compressed mode, the driver captures it in YCQ at half the
YCQ is a quantized YUV 4:1:1 format. Each 32 bits of data
contains four pixels: four 5-bit Y values, one 6-bit U
value and one 6-bit V value. That results in 8 bits per
pixel. Reducing the vertical resolution by half gives an
effective 4 bits per pixel, with some loss of spacial
resolution. The driver will only capture images that are
guaranteed to fit in SRAM at 4 bits per pixel.
Each 32-bit word of YCQ data is formatted like this:
Where a, b, c, and d are the Y values, and U and V are
the U and V values.
To unsubscribe: mail email@example.com with
"unsubscribe" as the Subject.