24 save_huffman(
"/Compression/Lossless/COMP/Huffman/Channel", &cmp_channel_huffman);
25 save_huffman(
"/Compression/Lossless/COMP/Huffman/Bits 0", &cmp_bits_huffman[0]);
26 save_huffman(
"/Compression/Lossless/COMP/Huffman/Bits 1", &cmp_bits_huffman[1]);
35 load_huffman(
"/Compression/Lossless/COMP/Huffman/Channel", &cmp_channel_huffman);
36 load_huffman(
"/Compression/Lossless/COMP/Huffman/Bits 0", &cmp_bits_huffman[0]);
37 load_huffman(
"/Compression/Lossless/COMP/Huffman/Bits 1", &cmp_bits_huffman[1]);
39 int size =
sizeof(BOOL);
41 &size, TID_BOOL,
TRUE);
46 int sign_bit = (1 << (bits-1));
48 return in | ~(sign_bit - 1);
61 int num_bit_words = 0;
62 rle_state s = { 0, 0, {128, 128}, 0, cmp_bits_huffman };
64 for (
int i = 0;
i < input_size;
i++) {
66 if (num_bit_words == 0) {
67 num_bit_words = input[
i].
r1.
a + input[
i].
r1.
b;
69 for (
int j = 0; j < 4; j++) {
71 unsigned char b = input[
i].
bytes[j];
94 int num_bit_words = 0;
97 for (
int i = 0;
i < input_size;
i++) {
99 if (num_bit_words == 0) {
100 num_bit_words = input[
i].
r1.
a + input[
i].
r1.
b;
102 if (num_bit_words != 1 && num_bit_words != 2) {
103 printf(
"Warning: corrupted compressor data.\n");
109 int time_diff = input[
i].
r1.
time - prev_time;
111 if (time_diff < 8 && time_diff >= -8) {
114 }
else if (time_diff < 512 && time_diff >= -512) {
150 int *uncompressed_size_p = (
int *) output;
151 *uncompressed_size_p = input_size;
152 output +=
sizeof(int);
155 int *compressed_time_size_p = (
int *) output;
156 output +=
sizeof(int);
160 int compressed_time_size =
162 output += compressed_time_size;
165 *compressed_time_size_p = compressed_time_size;
168 int *compressed_bits_size_p = (
int *) output;
169 output +=
sizeof(int);
173 int compressed_bits_size =
175 output += compressed_time_size;
178 *compressed_bits_size_p = compressed_bits_size;
180 return compressed_time_size + compressed_bits_size + 3 *
sizeof(int);
193 for (
int i = 0;
i < num_words_in;
i++) {
196 output[output_size].
r1.
fpga = channel & 0x3f;
197 output[output_size].
r1.
a = (channel >> 6) & 1;
198 output[output_size].
r1.
b = (channel >> 7) & 1;
202 if (time_length_flag1 == 0) {
207 if (time_length_flag2 == 0) {
216 output[output_size].
r1.
time = (prev_time + time_diff) & 0xffffff;
217 prev_time = output[output_size].
r1.
time;
220 output[output_size].
r1.
a + output[output_size].
r1.
b;
221 output_size += 1 + num_bit_words;
227 int num_bit_words = 0;
229 rle_state s = { 1, 0, {128, 128}, 0, cmp_bits_huffman };
231 for (
int i = 0;
i < output_size;
i++) {
232 if (num_bit_words == 0) {
233 num_bit_words = output[
i].
r1.
a + output[
i].
r1.
b;
235 for (
int j = 0; j < 4; j++) {
252 int *uncompressed_size_p = (
int *) input;
253 int uncompressed_size = *uncompressed_size_p;
254 input +=
sizeof(int);
255 input_size -=
sizeof(int);
258 int *compressed_time_size_p = (
int *) input;
259 int compressed_time_size = *compressed_time_size_p;
260 input +=
sizeof(int);
261 input_size -=
sizeof(int);
267 input += compressed_time_size;
268 input_size -= compressed_time_size;
271 int *compressed_bits_size_p = (
int *) input;
272 int compressed_bits_size = *compressed_bits_size_p;
273 input +=
sizeof(int);
274 input_size -=
sizeof(int);
280 return uncompressed_size *
sizeof(
comp_word);