452 lines
17 KiB
C
452 lines
17 KiB
C
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||
|
|
||
|
/* borrowed HEAVILY from cdrdao */
|
||
|
|
||
|
#include <string.h>
|
||
|
#include "lec.h"
|
||
|
|
||
|
#define LEC_HEADER_OFFSET 12
|
||
|
#define LEC_MODE1_P_PARITY_OFFSET 2076
|
||
|
#define LEC_MODE1_Q_PARITY_OFFSET 2248
|
||
|
|
||
|
static unsigned char gf8_ilog[255] = {
|
||
|
1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76,
|
||
|
152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96,
|
||
|
192, 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119,
|
||
|
238, 193, 159, 35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186,
|
||
|
105, 210, 185, 111, 222, 161, 95, 190, 97, 194, 153, 47, 94,
|
||
|
188, 101, 202, 137, 15, 30, 60, 120, 240, 253, 231, 211, 187,
|
||
|
107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226, 217,
|
||
|
175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103,
|
||
|
206, 129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197,
|
||
|
151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218, 169, 79,
|
||
|
158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85,
|
||
|
170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99,
|
||
|
198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227,
|
||
|
219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87,
|
||
|
174, 65, 130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224,
|
||
|
221, 167, 83, 166, 81, 162, 89, 178, 121, 242, 249, 239, 195,
|
||
|
155, 43, 86, 172, 69, 138, 9, 18, 36, 72, 144, 61, 122, 244,
|
||
|
245, 247, 243, 251, 235, 203, 139, 11, 22, 44, 88, 176, 125,
|
||
|
250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142,
|
||
|
};
|
||
|
static unsigned char gf8_log[256] = {
|
||
|
0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100,
|
||
|
224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113,
|
||
|
5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18,
|
||
|
130, 69, 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9,
|
||
|
120, 77, 228, 114, 166, 6, 191, 139, 98, 102, 221, 48, 253,
|
||
|
226, 152, 37, 179, 16, 145, 34, 136, 54, 208, 148, 206, 143,
|
||
|
150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64, 30, 66, 182,
|
||
|
163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61,
|
||
|
202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115,
|
||
|
243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222,
|
||
|
237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180, 124,
|
||
|
17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188,
|
||
|
207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211,
|
||
|
171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31,
|
||
|
45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12,
|
||
|
111, 246, 108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134,
|
||
|
177, 187, 204, 62, 90, 203, 89, 95, 176, 156, 169, 160, 81, 11,
|
||
|
245, 22, 235, 122, 117, 44, 215, 79, 174, 213, 233, 230, 231,
|
||
|
173, 232, 116, 214, 244, 234, 168, 80, 88, 175,
|
||
|
};
|
||
|
static unsigned char gf8_q_coeffs[2][45] = {
|
||
|
{97, 251, 133, 60, 82, 160, 155, 201, 8, 112, 246, 11, 21, 42, 157,
|
||
|
169, 80, 174, 232, 230, 172, 211, 241, 18, 68, 216, 44, 121, 9, 200,
|
||
|
75, 103, 221, 252, 96, 176, 88, 167, 114, 76, 199, 26, 1, 0, 0},
|
||
|
{190, 96, 250, 132, 59, 81, 159, 154, 200, 7, 111, 245, 10, 20, 41,
|
||
|
156, 168, 79, 173, 231, 229, 171, 210, 240, 17, 67, 215, 43, 120, 8,
|
||
|
199, 74, 102, 220, 251, 95, 175, 87, 166, 113, 75, 198, 25, 0, 0}
|
||
|
};
|
||
|
static unsigned char gf8_p_coeffs[2][26] = {
|
||
|
{230, 172, 211, 241, 18, 68, 216, 44, 121, 9, 200, 75, 103, 221, 252,
|
||
|
96, 176, 88, 167, 114, 76, 199, 26, 1, 0, 0},
|
||
|
{231, 229, 171, 210, 240, 17, 67, 215, 43, 120, 8, 199, 74, 102, 220,
|
||
|
251, 95, 175, 87, 166, 113, 75, 198, 25, 0, 0}
|
||
|
};
|
||
|
|
||
|
static unsigned char yellowbook_scrambler[2340] = {
|
||
|
1, 128, 0, 96, 0, 40, 0, 30, 128, 8, 96, 6, 168, 2, 254, 129, 128, 96,
|
||
|
96, 40, 40, 30, 158,
|
||
|
136, 104, 102, 174, 170, 252, 127, 1, 224, 0, 72, 0, 54, 128, 22, 224,
|
||
|
14, 200, 4, 86, 131, 126, 225,
|
||
|
224, 72, 72, 54, 182, 150, 246, 238, 198, 204, 82, 213, 253, 159, 1,
|
||
|
168, 0, 126, 128, 32, 96, 24, 40,
|
||
|
10, 158, 135, 40, 98, 158, 169, 168, 126, 254, 160, 64, 120, 48, 34,
|
||
|
148, 25, 175, 74, 252, 55, 1, 214,
|
||
|
128, 94, 224, 56, 72, 18, 182, 141, 182, 229, 182, 203, 54, 215, 86,
|
||
|
222, 190, 216, 112, 90, 164, 59, 59,
|
||
|
83, 83, 125, 253, 225, 129, 136, 96, 102, 168, 42, 254, 159, 0, 104, 0,
|
||
|
46, 128, 28, 96, 9, 232, 6,
|
||
|
206, 130, 212, 97, 159, 104, 104, 46, 174, 156, 124, 105, 225, 238,
|
||
|
200, 76, 86, 181, 254, 247, 0, 70, 128,
|
||
|
50, 224, 21, 136, 15, 38, 132, 26, 227, 75, 9, 247, 70, 198, 178, 210,
|
||
|
245, 157, 135, 41, 162, 158, 249,
|
||
|
168, 66, 254, 177, 128, 116, 96, 39, 104, 26, 174, 139, 60, 103, 81,
|
||
|
234, 188, 79, 49, 244, 20, 71, 79,
|
||
|
114, 180, 37, 183, 91, 54, 187, 86, 243, 126, 197, 224, 83, 8, 61, 198,
|
||
|
145, 146, 236, 109, 141, 237, 165,
|
||
|
141, 187, 37, 179, 91, 53, 251, 87, 3, 126, 129, 224, 96, 72, 40, 54,
|
||
|
158, 150, 232, 110, 206, 172, 84,
|
||
|
125, 255, 97, 128, 40, 96, 30, 168, 8, 126, 134, 160, 98, 248, 41, 130,
|
||
|
158, 225, 168, 72, 126, 182, 160,
|
||
|
118, 248, 38, 194, 154, 209, 171, 28, 127, 73, 224, 54, 200, 22, 214,
|
||
|
142, 222, 228, 88, 75, 122, 183, 99,
|
||
|
54, 169, 214, 254, 222, 192, 88, 80, 58, 188, 19, 49, 205, 212, 85,
|
||
|
159, 127, 40, 32, 30, 152, 8, 106,
|
||
|
134, 175, 34, 252, 25, 129, 202, 224, 87, 8, 62, 134, 144, 98, 236, 41,
|
||
|
141, 222, 229, 152, 75, 42, 183,
|
||
|
95, 54, 184, 22, 242, 142, 197, 164, 83, 59, 125, 211, 97, 157, 232,
|
||
|
105, 142, 174, 228, 124, 75, 97, 247,
|
||
|
104, 70, 174, 178, 252, 117, 129, 231, 32, 74, 152, 55, 42, 150, 159,
|
||
|
46, 232, 28, 78, 137, 244, 102, 199,
|
||
|
106, 210, 175, 29, 188, 9, 177, 198, 244, 82, 199, 125, 146, 161, 173,
|
||
|
184, 125, 178, 161, 181, 184, 119, 50,
|
||
|
166, 149, 186, 239, 51, 12, 21, 197, 207, 19, 20, 13, 207, 69, 148, 51,
|
||
|
47, 85, 220, 63, 25, 208, 10,
|
||
|
220, 7, 25, 194, 138, 209, 167, 28, 122, 137, 227, 38, 201, 218, 214,
|
||
|
219, 30, 219, 72, 91, 118, 187, 102,
|
||
|
243, 106, 197, 239, 19, 12, 13, 197, 197, 147, 19, 45, 205, 221, 149,
|
||
|
153, 175, 42, 252, 31, 1, 200, 0,
|
||
|
86, 128, 62, 224, 16, 72, 12, 54, 133, 214, 227, 30, 201, 200, 86, 214,
|
||
|
190, 222, 240, 88, 68, 58, 179,
|
||
|
83, 53, 253, 215, 1, 158, 128, 104, 96, 46, 168, 28, 126, 137, 224,
|
||
|
102, 200, 42, 214, 159, 30, 232, 8,
|
||
|
78, 134, 180, 98, 247, 105, 134, 174, 226, 252, 73, 129, 246, 224, 70,
|
||
|
200, 50, 214, 149, 158, 239, 40, 76,
|
||
|
30, 181, 200, 119, 22, 166, 142, 250, 228, 67, 11, 113, 199, 100, 82,
|
||
|
171, 125, 191, 97, 176, 40, 116, 30,
|
||
|
167, 72, 122, 182, 163, 54, 249, 214, 194, 222, 209, 152, 92, 106, 185,
|
||
|
239, 50, 204, 21, 149, 207, 47, 20,
|
||
|
28, 15, 73, 196, 54, 211, 86, 221, 254, 217, 128, 90, 224, 59, 8, 19,
|
||
|
70, 141, 242, 229, 133, 139, 35,
|
||
|
39, 89, 218, 186, 219, 51, 27, 85, 203, 127, 23, 96, 14, 168, 4, 126,
|
||
|
131, 96, 97, 232, 40, 78, 158,
|
||
|
180, 104, 119, 110, 166, 172, 122, 253, 227, 1, 137, 192, 102, 208, 42,
|
||
|
220, 31, 25, 200, 10, 214, 135, 30,
|
||
|
226, 136, 73, 166, 182, 250, 246, 195, 6, 209, 194, 220, 81, 153, 252,
|
||
|
106, 193, 239, 16, 76, 12, 53, 197,
|
||
|
215, 19, 30, 141, 200, 101, 150, 171, 46, 255, 92, 64, 57, 240, 18,
|
||
|
196, 13, 147, 69, 173, 243, 61, 133,
|
||
|
209, 163, 28, 121, 201, 226, 214, 201, 158, 214, 232, 94, 206, 184, 84,
|
||
|
114, 191, 101, 176, 43, 52, 31, 87,
|
||
|
72, 62, 182, 144, 118, 236, 38, 205, 218, 213, 155, 31, 43, 72, 31,
|
||
|
118, 136, 38, 230, 154, 202, 235, 23,
|
||
|
15, 78, 132, 52, 99, 87, 105, 254, 174, 192, 124, 80, 33, 252, 24, 65,
|
||
|
202, 176, 87, 52, 62, 151, 80,
|
||
|
110, 188, 44, 113, 221, 228, 89, 139, 122, 231, 99, 10, 169, 199, 62,
|
||
|
210, 144, 93, 172, 57, 189, 210, 241,
|
||
|
157, 132, 105, 163, 110, 249, 236, 66, 205, 241, 149, 132, 111, 35,
|
||
|
108, 25, 237, 202, 205, 151, 21, 174, 143,
|
||
|
60, 100, 17, 235, 76, 79, 117, 244, 39, 7, 90, 130, 187, 33, 179, 88,
|
||
|
117, 250, 167, 3, 58, 129, 211,
|
||
|
32, 93, 216, 57, 154, 146, 235, 45, 143, 93, 164, 57, 187, 82, 243,
|
||
|
125, 133, 225, 163, 8, 121, 198, 162,
|
||
|
210, 249, 157, 130, 233, 161, 142, 248, 100, 66, 171, 113, 191, 100,
|
||
|
112, 43, 100, 31, 107, 72, 47, 118, 156,
|
||
|
38, 233, 218, 206, 219, 20, 91, 79, 123, 116, 35, 103, 89, 234, 186,
|
||
|
207, 51, 20, 21, 207, 79, 20, 52,
|
||
|
15, 87, 68, 62, 179, 80, 117, 252, 39, 1, 218, 128, 91, 32, 59, 88, 19,
|
||
|
122, 141, 227, 37, 137, 219,
|
||
|
38, 219, 90, 219, 123, 27, 99, 75, 105, 247, 110, 198, 172, 82, 253,
|
||
|
253, 129, 129, 160, 96, 120, 40, 34,
|
||
|
158, 153, 168, 106, 254, 175, 0, 124, 0, 33, 192, 24, 80, 10, 188, 7,
|
||
|
49, 194, 148, 81, 175, 124, 124,
|
||
|
33, 225, 216, 72, 90, 182, 187, 54, 243, 86, 197, 254, 211, 0, 93, 192,
|
||
|
57, 144, 18, 236, 13, 141, 197,
|
||
|
165, 147, 59, 45, 211, 93, 157, 249, 169, 130, 254, 225, 128, 72, 96,
|
||
|
54, 168, 22, 254, 142, 192, 100, 80,
|
||
|
43, 124, 31, 97, 200, 40, 86, 158, 190, 232, 112, 78, 164, 52, 123, 87,
|
||
|
99, 126, 169, 224, 126, 200, 32,
|
||
|
86, 152, 62, 234, 144, 79, 44, 52, 29, 215, 73, 158, 182, 232, 118,
|
||
|
206, 166, 212, 122, 223, 99, 24, 41,
|
||
|
202, 158, 215, 40, 94, 158, 184, 104, 114, 174, 165, 188, 123, 49, 227,
|
||
|
84, 73, 255, 118, 192, 38, 208, 26,
|
||
|
220, 11, 25, 199, 74, 210, 183, 29, 182, 137, 182, 230, 246, 202, 198,
|
||
|
215, 18, 222, 141, 152, 101, 170, 171,
|
||
|
63, 63, 80, 16, 60, 12, 17, 197, 204, 83, 21, 253, 207, 1, 148, 0, 111,
|
||
|
64, 44, 48, 29, 212, 9,
|
||
|
159, 70, 232, 50, 206, 149, 148, 111, 47, 108, 28, 45, 201, 221, 150,
|
||
|
217, 174, 218, 252, 91, 1, 251, 64,
|
||
|
67, 112, 49, 228, 20, 75, 79, 119, 116, 38, 167, 90, 250, 187, 3, 51,
|
||
|
65, 213, 240, 95, 4, 56, 3,
|
||
|
82, 129, 253, 160, 65, 184, 48, 114, 148, 37, 175, 91, 60, 59, 81, 211,
|
||
|
124, 93, 225, 249, 136, 66, 230,
|
||
|
177, 138, 244, 103, 7, 106, 130, 175, 33, 188, 24, 113, 202, 164, 87,
|
||
|
59, 126, 147, 96, 109, 232, 45, 142,
|
||
|
157, 164, 105, 187, 110, 243, 108, 69, 237, 243, 13, 133, 197, 163, 19,
|
||
|
57, 205, 210, 213, 157, 159, 41, 168,
|
||
|
30, 254, 136, 64, 102, 176, 42, 244, 31, 7, 72, 2, 182, 129, 182, 224,
|
||
|
118, 200, 38, 214, 154, 222, 235,
|
||
|
24, 79, 74, 180, 55, 55, 86, 150, 190, 238, 240, 76, 68, 53, 243, 87,
|
||
|
5, 254, 131, 0, 97, 192, 40,
|
||
|
80, 30, 188, 8, 113, 198, 164, 82, 251, 125, 131, 97, 161, 232, 120,
|
||
|
78, 162, 180, 121, 183, 98, 246, 169,
|
||
|
134, 254, 226, 192, 73, 144, 54, 236, 22, 205, 206, 213, 148, 95, 47,
|
||
|
120, 28, 34, 137, 217, 166, 218, 250,
|
||
|
219, 3, 27, 65, 203, 112, 87, 100, 62, 171, 80, 127, 124, 32, 33, 216,
|
||
|
24, 90, 138, 187, 39, 51, 90,
|
||
|
149, 251, 47, 3, 92, 1, 249, 192, 66, 208, 49, 156, 20, 105, 207, 110,
|
||
|
212, 44, 95, 93, 248, 57, 130,
|
||
|
146, 225, 173, 136, 125, 166, 161, 186, 248, 115, 2, 165, 193, 187, 16,
|
||
|
115, 76, 37, 245, 219, 7, 27, 66,
|
||
|
139, 113, 167, 100, 122, 171, 99, 63, 105, 208, 46, 220, 28, 89, 201,
|
||
|
250, 214, 195, 30, 209, 200, 92, 86,
|
||
|
185, 254, 242, 192, 69, 144, 51, 44, 21, 221, 207, 25, 148, 10, 239,
|
||
|
71, 12, 50, 133, 213, 163, 31, 57,
|
||
|
200, 18, 214, 141, 158, 229, 168, 75, 62, 183, 80, 118, 188, 38, 241,
|
||
|
218, 196, 91, 19, 123, 77, 227, 117,
|
||
|
137, 231, 38, 202, 154, 215, 43, 30, 159, 72, 104, 54, 174, 150, 252,
|
||
|
110, 193, 236, 80, 77, 252, 53, 129,
|
||
|
215, 32, 94, 152, 56, 106, 146, 175, 45, 188, 29, 177, 201, 180, 86,
|
||
|
247, 126, 198, 160, 82, 248, 61, 130,
|
||
|
145, 161, 172, 120, 125, 226, 161, 137, 184, 102, 242, 170, 197, 191,
|
||
|
19, 48, 13, 212, 5, 159, 67, 40, 49,
|
||
|
222, 148, 88, 111, 122, 172, 35, 61, 217, 209, 154, 220, 107, 25, 239,
|
||
|
74, 204, 55, 21, 214, 143, 30, 228,
|
||
|
8, 75, 70, 183, 114, 246, 165, 134, 251, 34, 195, 89, 145, 250, 236,
|
||
|
67, 13, 241, 197, 132, 83, 35, 125,
|
||
|
217, 225, 154, 200, 107, 22, 175, 78, 252, 52, 65, 215, 112, 94, 164,
|
||
|
56, 123, 82, 163, 125, 185, 225, 178,
|
||
|
200, 117, 150, 167, 46, 250, 156, 67, 41, 241, 222, 196, 88, 83, 122,
|
||
|
189, 227, 49, 137, 212, 102, 223, 106,
|
||
|
216, 47, 26, 156, 11, 41, 199, 94, 210, 184, 93, 178, 185, 181, 178,
|
||
|
247, 53, 134, 151, 34, 238, 153, 140,
|
||
|
106, 229, 239, 11, 12, 7, 69, 194, 179, 17, 181, 204, 119, 21, 230,
|
||
|
143, 10, 228, 7, 11, 66, 135, 113,
|
||
|
162, 164, 121, 187, 98, 243, 105, 133, 238, 227, 12, 73, 197, 246, 211,
|
||
|
6, 221, 194, 217, 145, 154, 236, 107,
|
||
|
13, 239, 69, 140, 51, 37, 213, 219, 31, 27, 72, 11, 118, 135, 102, 226,
|
||
|
170, 201, 191, 22, 240, 14, 196,
|
||
|
4, 83, 67, 125, 241, 225, 132, 72, 99, 118, 169, 230, 254, 202, 192,
|
||
|
87, 16, 62, 140, 16, 101, 204, 43,
|
||
|
21, 223, 79, 24, 52, 10, 151, 71, 46, 178, 156, 117, 169, 231, 62, 202,
|
||
|
144, 87, 44, 62, 157, 208, 105,
|
||
|
156, 46, 233, 220, 78, 217, 244, 90, 199, 123, 18, 163, 77, 185, 245,
|
||
|
178, 199, 53, 146, 151, 45, 174, 157,
|
||
|
188, 105, 177, 238, 244, 76, 71, 117, 242, 167, 5, 186, 131, 51, 33,
|
||
|
213, 216, 95, 26, 184, 11, 50, 135,
|
||
|
85, 162, 191, 57, 176, 18, 244, 13, 135, 69, 162, 179, 57, 181, 210,
|
||
|
247, 29, 134, 137, 162, 230, 249, 138,
|
||
|
194, 231, 17, 138, 140, 103, 37, 234, 155, 15, 43, 68, 31, 115, 72, 37,
|
||
|
246, 155, 6, 235, 66, 207, 113,
|
||
|
148, 36, 111, 91, 108, 59, 109, 211, 109, 157, 237, 169, 141, 190, 229,
|
||
|
176, 75, 52, 55, 87, 86, 190, 190,
|
||
|
240, 112, 68, 36, 51, 91, 85, 251, 127, 3, 96, 1, 232, 0, 78, 128, 52,
|
||
|
96, 23, 104, 14, 174, 132,
|
||
|
124, 99, 97, 233, 232, 78, 206, 180, 84, 119, 127, 102, 160, 42, 248,
|
||
|
31, 2, 136, 1, 166, 128, 122, 224,
|
||
|
35, 8, 25, 198, 138, 210, 231, 29, 138, 137, 167, 38, 250, 154, 195,
|
||
|
43, 17, 223, 76, 88, 53, 250, 151,
|
||
|
3, 46, 129, 220, 96, 89, 232, 58, 206, 147, 20, 109, 207, 109, 148, 45,
|
||
|
175, 93, 188, 57, 177, 210, 244,
|
||
|
93, 135, 121, 162, 162, 249, 185, 130, 242, 225, 133, 136, 99, 38, 169,
|
||
|
218, 254, 219, 0, 91, 64, 59, 112,
|
||
|
19, 100, 13, 235, 69, 143, 115, 36, 37, 219, 91, 27, 123, 75, 99, 119,
|
||
|
105, 230, 174, 202, 252, 87, 1,
|
||
|
254, 128, 64, 96, 48, 40, 20, 30, 143, 72, 100, 54, 171, 86, 255, 126,
|
||
|
192, 32, 80, 24, 60, 10, 145,
|
||
|
199, 44, 82, 157, 253, 169, 129, 190, 224, 112, 72, 36, 54, 155, 86,
|
||
|
235, 126, 207, 96, 84, 40, 63, 94,
|
||
|
144, 56, 108, 18, 173, 205, 189, 149, 177, 175, 52, 124, 23, 97, 206,
|
||
|
168, 84, 126, 191, 96, 112, 40, 36,
|
||
|
30, 155, 72, 107, 118, 175, 102, 252, 42, 193, 223, 16, 88, 12, 58,
|
||
|
133, 211, 35, 29, 217, 201, 154, 214,
|
||
|
235, 30, 207, 72, 84, 54, 191, 86, 240, 62, 196, 16, 83, 76, 61, 245,
|
||
|
209, 135, 28, 98, 137, 233, 166,
|
||
|
206, 250, 212, 67, 31, 113, 200, 36, 86, 155, 126, 235, 96, 79, 104,
|
||
|
52, 46, 151, 92, 110, 185, 236, 114,
|
||
|
205, 229, 149, 139, 47, 39, 92, 26, 185, 203, 50, 215, 85, 158, 191,
|
||
|
40, 112, 30, 164, 8, 123, 70, 163,
|
||
|
114, 249, 229, 130, 203, 33, 151, 88, 110, 186, 172, 115, 61, 229, 209,
|
||
|
139, 28, 103, 73, 234, 182, 207, 54,
|
||
|
212, 22, 223, 78, 216, 52, 90, 151, 123, 46, 163, 92, 121, 249, 226,
|
||
|
194, 201, 145, 150, 236, 110, 205, 236,
|
||
|
85, 141, 255, 37, 128, 27, 32, 11, 88, 7, 122, 130, 163, 33, 185, 216,
|
||
|
114, 218, 165, 155, 59, 43, 83,
|
||
|
95, 125, 248, 33, 130, 152, 97, 170, 168, 127, 62, 160, 16, 120, 12,
|
||
|
34, 133, 217, 163, 26, 249, 203, 2,
|
||
|
215, 65, 158, 176, 104, 116, 46, 167, 92, 122, 185, 227, 50, 201, 213,
|
||
|
150, 223, 46, 216, 28, 90, 137, 251,
|
||
|
38, 195, 90, 209, 251, 28, 67, 73, 241, 246, 196, 70, 211, 114, 221,
|
||
|
229, 153,
|
||
|
};
|
||
|
|
||
|
void scramble(unsigned char *inout)
|
||
|
{
|
||
|
unsigned char *r = inout + 12;
|
||
|
unsigned char *s = yellowbook_scrambler;
|
||
|
unsigned int i;
|
||
|
|
||
|
for (i = 2340; i; i--) {
|
||
|
*r++ ^= *s++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Calculate the P parities for the sector.
|
||
|
* The 43 P vectors of length 24 are combined with the GF8_P_COEFFS.
|
||
|
*/
|
||
|
void parity_p(unsigned char *sector)
|
||
|
{
|
||
|
int i, j;
|
||
|
unsigned char p0_msb, p1_msb;
|
||
|
unsigned char p0_lsb, p1_lsb;
|
||
|
unsigned char *p_msb_start, *p_lsb_start;
|
||
|
unsigned char *p_msb, *p_lsb;
|
||
|
unsigned char *coeffs0, *coeffs1;
|
||
|
unsigned char *p0, *p1;
|
||
|
unsigned char d;
|
||
|
unsigned short c;
|
||
|
|
||
|
p_lsb_start = sector + LEC_HEADER_OFFSET;
|
||
|
p_msb_start = sector + LEC_HEADER_OFFSET + 1;
|
||
|
|
||
|
p1 = sector + LEC_MODE1_P_PARITY_OFFSET;
|
||
|
p0 = sector + LEC_MODE1_P_PARITY_OFFSET + 2 * 43;
|
||
|
|
||
|
for (i = 0; i <= 42; i++) {
|
||
|
p_lsb = p_lsb_start;
|
||
|
p_msb = p_msb_start;
|
||
|
|
||
|
coeffs0 = gf8_p_coeffs[0];
|
||
|
coeffs1 = gf8_p_coeffs[1];
|
||
|
|
||
|
p0_lsb = p1_lsb = p0_msb = p1_msb = 0;
|
||
|
|
||
|
for (j = 0; j <= 23; j++) {
|
||
|
d = *p_lsb;
|
||
|
|
||
|
if (d != 0) {
|
||
|
c = gf8_log[d] + *coeffs0;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
p0_lsb ^= gf8_ilog[c];
|
||
|
|
||
|
c = gf8_log[d] + *coeffs1;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
p1_lsb ^= gf8_ilog[c];
|
||
|
}
|
||
|
|
||
|
d = *p_msb;
|
||
|
|
||
|
if (d != 0) {
|
||
|
c = gf8_log[d] + *coeffs0;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
p0_msb ^= gf8_ilog[c];
|
||
|
|
||
|
c = gf8_log[d] + *coeffs1;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
p1_msb ^= gf8_ilog[c];
|
||
|
}
|
||
|
|
||
|
coeffs0++;
|
||
|
coeffs1++;
|
||
|
|
||
|
p_lsb += 2 * 43;
|
||
|
p_msb += 2 * 43;
|
||
|
}
|
||
|
|
||
|
*p0 = p0_lsb;
|
||
|
*(p0 + 1) = p0_msb;
|
||
|
|
||
|
*p1 = p1_lsb;
|
||
|
*(p1 + 1) = p1_msb;
|
||
|
|
||
|
p0 += 2;
|
||
|
p1 += 2;
|
||
|
|
||
|
p_lsb_start += 2;
|
||
|
p_msb_start += 2;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Calculate the Q parities for the sector.
|
||
|
* The 26 Q vectors of length 43 are combined with the GF8_Q_COEFFS.
|
||
|
*/
|
||
|
void parity_q(unsigned char *sector)
|
||
|
{
|
||
|
int i, j;
|
||
|
unsigned char q0_msb, q1_msb;
|
||
|
unsigned char q0_lsb, q1_lsb;
|
||
|
unsigned char *q_msb_start, *q_lsb_start;
|
||
|
unsigned char *q_msb, *q_lsb;
|
||
|
unsigned char *coeffs0, *coeffs1;
|
||
|
unsigned char *q0, *q1, *q_start;
|
||
|
unsigned char d;
|
||
|
unsigned short c;
|
||
|
|
||
|
q_lsb_start = sector + LEC_HEADER_OFFSET;
|
||
|
q_msb_start = sector + LEC_HEADER_OFFSET + 1;
|
||
|
|
||
|
q_start = sector + LEC_MODE1_Q_PARITY_OFFSET;
|
||
|
q1 = sector + LEC_MODE1_Q_PARITY_OFFSET;
|
||
|
q0 = sector + LEC_MODE1_Q_PARITY_OFFSET + 2 * 26;
|
||
|
|
||
|
for (i = 0; i <= 25; i++) {
|
||
|
q_lsb = q_lsb_start;
|
||
|
q_msb = q_msb_start;
|
||
|
|
||
|
coeffs0 = gf8_q_coeffs[0];
|
||
|
coeffs1 = gf8_q_coeffs[1];
|
||
|
|
||
|
q0_lsb = q1_lsb = q0_msb = q1_msb = 0;
|
||
|
|
||
|
for (j = 0; j <= 42; j++) {
|
||
|
d = *q_lsb;
|
||
|
|
||
|
if (d != 0) {
|
||
|
c = gf8_log[d] + *coeffs0;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
q0_lsb ^= gf8_ilog[c];
|
||
|
|
||
|
c = gf8_log[d] + *coeffs1;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
q1_lsb ^= gf8_ilog[c];
|
||
|
}
|
||
|
|
||
|
d = *q_msb;
|
||
|
|
||
|
if (d != 0) {
|
||
|
c = gf8_log[d] + *coeffs0;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
q0_msb ^= gf8_ilog[c];
|
||
|
|
||
|
c = gf8_log[d] + *coeffs1;
|
||
|
if (c >= 255)
|
||
|
c -= 255;
|
||
|
q1_msb ^= gf8_ilog[c];
|
||
|
}
|
||
|
|
||
|
coeffs0++;
|
||
|
coeffs1++;
|
||
|
|
||
|
q_lsb += 2 * 44;
|
||
|
q_msb += 2 * 44;
|
||
|
|
||
|
if (q_lsb >= q_start) {
|
||
|
q_msb -= 2 * 1118;
|
||
|
q_lsb -= 2 * 1118;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*q0 = q0_lsb;
|
||
|
*(q0 + 1) = q0_msb;
|
||
|
|
||
|
*q1 = q1_lsb;
|
||
|
*(q1 + 1) = q1_msb;
|
||
|
|
||
|
q0 += 2;
|
||
|
q1 += 2;
|
||
|
|
||
|
q_lsb_start += 2 * 43;
|
||
|
q_msb_start += 2 * 43;
|
||
|
}
|
||
|
}
|