summaryrefslogtreecommitdiff
path: root/compress.py
blob: 736d967dba1b49c118600028a4152e93748d5d41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""
SPICE compression and decompression implementation.

we have our own lz implementation, see spice/common/lz_common.h

"""
import struct
from util import reverse_dict

LZ_MAGIC = struct.unpack('<I', "LZ  ")[0]
LZ_MAJOR = 1
LZ_MINOR = 1

LzImageType = (LZ_IMAGE_TYPE_INVALID,
 LZ_IMAGE_TYPE_PLT1_LE,
 LZ_IMAGE_TYPE_PLT1_BE,      # PLT stands for palette
 LZ_IMAGE_TYPE_PLT4_LE,
 LZ_IMAGE_TYPE_PLT4_BE,
 LZ_IMAGE_TYPE_PLT8,
 LZ_IMAGE_TYPE_RGB16,
 LZ_IMAGE_TYPE_RGB24,
 LZ_IMAGE_TYPE_RGB32,
 LZ_IMAGE_TYPE_RGBA,
 LZ_IMAGE_TYPE_XXXA) = xrange(11)
LzImageType = dict([(k, locals()[k]) for k in locals().keys() if k.startswith('LZ_IMAGE_TYPE')])
LzImageTypeRev = reverse_dict(LzImageType)

def lz_decompress(s):
    (magic, major, minor,
     type, width, height, stride, out_top_down
        ) = struct.unpack_from('>IHHIIIII', s)
    assert(magic == LZ_MAGIC)
    assert(major == LZ_MAJOR)
    assert(minor == LZ_MINOR)
    del s
    return locals()