Mercurial > libavcodec.hg
comparison ulti.c @ 2979:bfabfdf9ce55 libavcodec
COSMETICS: tabs --> spaces, some prettyprinting
author | diego |
---|---|
date | Thu, 22 Dec 2005 01:10:11 +0000 |
parents | ef2149182f1c |
children | 0b546eab515d |
comparison
equal
deleted
inserted
replaced
2978:403183bbb505 | 2979:bfabfdf9ce55 |
---|---|
77 0x93, 0x99, 0xA0, 0xA6, 0xAC, 0xB3, 0xB9, 0xC0}; | 77 0x93, 0x99, 0xA0, 0xA6, 0xAC, 0xB3, 0xB9, 0xC0}; |
78 | 78 |
79 /* convert Ultimotion YUV block (sixteen 6-bit Y samples and | 79 /* convert Ultimotion YUV block (sixteen 6-bit Y samples and |
80 two 4-bit chroma samples) into standard YUV and put it into frame */ | 80 two 4-bit chroma samples) into standard YUV and put it into frame */ |
81 static void ulti_convert_yuv(AVFrame *frame, int x, int y, | 81 static void ulti_convert_yuv(AVFrame *frame, int x, int y, |
82 uint8_t *luma,int chroma) | 82 uint8_t *luma,int chroma) |
83 { | 83 { |
84 uint8_t *y_plane, *cr_plane, *cb_plane; | 84 uint8_t *y_plane, *cr_plane, *cb_plane; |
85 int i; | 85 int i; |
86 | 86 |
87 y_plane = frame->data[0] + x + y * frame->linesize[0]; | 87 y_plane = frame->data[0] + x + y * frame->linesize[0]; |
92 | 92 |
93 cb_plane[0] = ulti_chromas[chroma & 0xF]; | 93 cb_plane[0] = ulti_chromas[chroma & 0xF]; |
94 | 94 |
95 | 95 |
96 for(i = 0; i < 16; i++){ | 96 for(i = 0; i < 16; i++){ |
97 y_plane[i & 3] = ulti_lumas[luma[i]]; | 97 y_plane[i & 3] = ulti_lumas[luma[i]]; |
98 if((i & 3) == 3) { //next row | 98 if((i & 3) == 3) { //next row |
99 y_plane += frame->linesize[0]; | 99 y_plane += frame->linesize[0]; |
100 } | 100 } |
101 } | 101 } |
102 } | 102 } |
103 | 103 |
104 /* generate block like in MS Video1 */ | 104 /* generate block like in MS Video1 */ |
105 static void ulti_pattern(AVFrame *frame, int x, int y, | 105 static void ulti_pattern(AVFrame *frame, int x, int y, |
106 int f0, int f1, int Y0, int Y1, int chroma) | 106 int f0, int f1, int Y0, int Y1, int chroma) |
107 { | 107 { |
108 uint8_t Luma[16]; | 108 uint8_t Luma[16]; |
109 int mask, i; | 109 int mask, i; |
110 for(mask = 0x80, i = 0; mask; mask >>= 1, i++) { | 110 for(mask = 0x80, i = 0; mask; mask >>= 1, i++) { |
111 if(f0 & mask) | 111 if(f0 & mask) |
112 Luma[i] = Y1; | 112 Luma[i] = Y1; |
113 else | 113 else |
114 Luma[i] = Y0; | 114 Luma[i] = Y0; |
115 } | 115 } |
116 | 116 |
117 for(mask = 0x80, i = 8; mask; mask >>= 1, i++) { | 117 for(mask = 0x80, i = 8; mask; mask >>= 1, i++) { |
118 if(f1 & mask) | 118 if(f1 & mask) |
119 Luma[i] = Y1; | 119 Luma[i] = Y1; |
120 else | 120 else |
121 Luma[i] = Y0; | 121 Luma[i] = Y0; |
122 } | 122 } |
123 | 123 |
124 ulti_convert_yuv(frame, x, y, Luma, chroma); | 124 ulti_convert_yuv(frame, x, y, Luma, chroma); |
125 } | 125 } |
126 | 126 |
127 /* fill block with some gradient */ | 127 /* fill block with some gradient */ |
128 static void ulti_grad(AVFrame *frame, int x, int y, uint8_t *Y, int chroma, int angle) | 128 static void ulti_grad(AVFrame *frame, int x, int y, uint8_t *Y, int chroma, int angle) |
129 { | 129 { |
130 uint8_t Luma[16]; | 130 uint8_t Luma[16]; |
131 if(angle & 8) { //reverse order | 131 if(angle & 8) { //reverse order |
132 int t; | 132 int t; |
133 angle &= 0x7; | 133 angle &= 0x7; |
134 t = Y[0]; | 134 t = Y[0]; |
135 Y[0] = Y[3]; | 135 Y[0] = Y[3]; |
136 Y[3] = t; | 136 Y[3] = t; |
137 t = Y[1]; | 137 t = Y[1]; |
138 Y[1] = Y[2]; | 138 Y[1] = Y[2]; |
139 Y[2] = t; | 139 Y[2] = t; |
140 } | 140 } |
141 switch(angle){ | 141 switch(angle){ |
142 case 0: | 142 case 0: |
143 Luma[0] = Y[0]; Luma[1] = Y[1]; Luma[2] = Y[2]; Luma[3] = Y[3]; | 143 Luma[0] = Y[0]; Luma[1] = Y[1]; Luma[2] = Y[2]; Luma[3] = Y[3]; |
144 Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3]; | 144 Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3]; |
145 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3]; | 145 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3]; |
146 Luma[12] = Y[0]; Luma[13] = Y[1]; Luma[14] = Y[2]; Luma[15] = Y[3]; | 146 Luma[12] = Y[0]; Luma[13] = Y[1]; Luma[14] = Y[2]; Luma[15] = Y[3]; |
147 break; | 147 break; |
148 case 1: | 148 case 1: |
149 Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3]; | 149 Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3]; |
150 Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3]; | 150 Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3]; |
151 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3]; | 151 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3]; |
152 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; | 152 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; |
153 break; | 153 break; |
154 case 2: | 154 case 2: |
155 Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3]; | 155 Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3]; |
156 Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3]; | 156 Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3]; |
157 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2]; | 157 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2]; |
158 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; | 158 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; |
159 break; | 159 break; |
160 case 3: | 160 case 3: |
161 Luma[0] = Y[2]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3]; | 161 Luma[0] = Y[2]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3]; |
162 Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3]; | 162 Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3]; |
163 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2]; | 163 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2]; |
164 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[1]; | 164 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[1]; |
165 break; | 165 break; |
166 case 4: | 166 case 4: |
167 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3]; | 167 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3]; |
168 Luma[4] = Y[2]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[2]; | 168 Luma[4] = Y[2]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[2]; |
169 Luma[8] = Y[1]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[1]; | 169 Luma[8] = Y[1]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[1]; |
170 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; | 170 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; |
171 break; | 171 break; |
172 case 5: | 172 case 5: |
173 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[2]; | 173 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[2]; |
174 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[1]; | 174 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[1]; |
175 Luma[8] = Y[2]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[0]; | 175 Luma[8] = Y[2]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[0]; |
176 Luma[12] = Y[1]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; | 176 Luma[12] = Y[1]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; |
177 break; | 177 break; |
178 case 6: | 178 case 6: |
179 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[2]; | 179 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[2]; |
180 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[1]; | 180 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[1]; |
181 Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0]; | 181 Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0]; |
182 Luma[12] = Y[1]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; | 182 Luma[12] = Y[1]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; |
183 break; | 183 break; |
184 case 7: | 184 case 7: |
185 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[1]; | 185 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[1]; |
186 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[0]; | 186 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[0]; |
187 Luma[8] = Y[3]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0]; | 187 Luma[8] = Y[3]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0]; |
188 Luma[12] = Y[2]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; | 188 Luma[12] = Y[2]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; |
189 break; | 189 break; |
190 default: | 190 default: |
191 Luma[0] = Y[0]; Luma[1] = Y[0]; Luma[2] = Y[1]; Luma[3] = Y[1]; | 191 Luma[0] = Y[0]; Luma[1] = Y[0]; Luma[2] = Y[1]; Luma[3] = Y[1]; |
192 Luma[4] = Y[0]; Luma[5] = Y[0]; Luma[6] = Y[1]; Luma[7] = Y[1]; | 192 Luma[4] = Y[0]; Luma[5] = Y[0]; Luma[6] = Y[1]; Luma[7] = Y[1]; |
193 Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[3]; Luma[11] = Y[3]; | 193 Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[3]; Luma[11] = Y[3]; |
194 Luma[12] = Y[2]; Luma[13] = Y[2]; Luma[14] = Y[3]; Luma[15] = Y[3]; | 194 Luma[12] = Y[2]; Luma[13] = Y[2]; Luma[14] = Y[3]; Luma[15] = Y[3]; |
195 break; | 195 break; |
196 } | 196 } |
197 | 197 |
198 ulti_convert_yuv(frame, x, y, Luma, chroma); | 198 ulti_convert_yuv(frame, x, y, Luma, chroma); |
199 } | 199 } |
200 | 200 |
222 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); | 222 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
223 return -1; | 223 return -1; |
224 } | 224 } |
225 | 225 |
226 while(!done) { | 226 while(!done) { |
227 int idx; | 227 int idx; |
228 if(blocks >= s->blocks || y >= s->height) | 228 if(blocks >= s->blocks || y >= s->height) |
229 break;//all blocks decoded | 229 break;//all blocks decoded |
230 | 230 |
231 idx = *buf++; | 231 idx = *buf++; |
232 if((idx & 0xF8) == 0x70) { | 232 if((idx & 0xF8) == 0x70) { |
233 switch(idx) { | 233 switch(idx) { |
234 case 0x70: //change modifier | 234 case 0x70: //change modifier |
235 modifier = *buf++; | 235 modifier = *buf++; |
236 if(modifier>1) | 236 if(modifier>1) |
237 av_log(avctx, AV_LOG_INFO, "warning: modifier must be 0 or 1, got %i\n", modifier); | 237 av_log(avctx, AV_LOG_INFO, "warning: modifier must be 0 or 1, got %i\n", modifier); |
238 break; | 238 break; |
239 case 0x71: // set uniq flag | 239 case 0x71: // set uniq flag |
240 uniq = 1; | 240 uniq = 1; |
241 break; | 241 break; |
242 case 0x72: //toggle mode | 242 case 0x72: //toggle mode |
243 mode = !mode; | 243 mode = !mode; |
244 break; | 244 break; |
245 case 0x73: //end-of-frame | 245 case 0x73: //end-of-frame |
246 done = 1; | 246 done = 1; |
247 break; | 247 break; |
248 case 0x74: //skip some blocks | 248 case 0x74: //skip some blocks |
249 skip = *buf++; | 249 skip = *buf++; |
250 if ((blocks + skip) >= s->blocks) | 250 if ((blocks + skip) >= s->blocks) |
251 break; | 251 break; |
252 blocks += skip; | 252 blocks += skip; |
253 x += skip * 8; | 253 x += skip * 8; |
254 while(x >= s->width) { | 254 while(x >= s->width) { |
255 x -= s->width; | 255 x -= s->width; |
256 y += 8; | 256 y += 8; |
257 } | 257 } |
258 break; | 258 break; |
259 default: | 259 default: |
260 av_log(avctx, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", idx); | 260 av_log(avctx, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", idx); |
261 } | 261 } |
262 } else { //handle one block | 262 } else { //handle one block |
263 int code; | 263 int code; |
264 int cf; | 264 int cf; |
265 int angle = 0; | 265 int angle = 0; |
266 uint8_t Y[4]; // luma samples of block | 266 uint8_t Y[4]; // luma samples of block |
267 int tx = 0, ty = 0; //coords of subblock | 267 int tx = 0, ty = 0; //coords of subblock |
268 int chroma = 0; | 268 int chroma = 0; |
269 if (mode || uniq) { | 269 if (mode || uniq) { |
270 uniq = 0; | 270 uniq = 0; |
271 cf = 1; | 271 cf = 1; |
272 chroma = 0; | 272 chroma = 0; |
273 } else { | 273 } else { |
274 cf = 0; | 274 cf = 0; |
275 if (idx) | 275 if (idx) |
276 chroma = *buf++; | 276 chroma = *buf++; |
277 } | 277 } |
278 for (i = 0; i < 4; i++) { // for every subblock | 278 for (i = 0; i < 4; i++) { // for every subblock |
279 code = (idx >> (6 - i*2)) & 3; //extract 2 bits | 279 code = (idx >> (6 - i*2)) & 3; //extract 2 bits |
280 if(!code) //skip subblock | 280 if(!code) //skip subblock |
281 continue; | 281 continue; |
282 if(cf) | 282 if(cf) |
283 chroma = *buf++; | 283 chroma = *buf++; |
284 tx = x + block_coords[i * 2]; | 284 tx = x + block_coords[i * 2]; |
285 ty = y + block_coords[(i * 2) + 1]; | 285 ty = y + block_coords[(i * 2) + 1]; |
286 switch(code) { | 286 switch(code) { |
287 case 1: | 287 case 1: |
288 tmp = *buf++; | 288 tmp = *buf++; |
289 | 289 |
290 angle = angle_by_index[(tmp >> 6) & 0x3]; | 290 angle = angle_by_index[(tmp >> 6) & 0x3]; |
291 | 291 |
292 Y[0] = tmp & 0x3F; | 292 Y[0] = tmp & 0x3F; |
293 Y[1] = Y[0]; | 293 Y[1] = Y[0]; |
294 | 294 |
295 if (angle) { | 295 if (angle) { |
296 Y[2] = Y[0]+1; | 296 Y[2] = Y[0]+1; |
297 if (Y[2] > 0x3F) | 297 if (Y[2] > 0x3F) |
298 Y[2] = 0x3F; | 298 Y[2] = 0x3F; |
299 Y[3] = Y[2]; | 299 Y[3] = Y[2]; |
300 } else { | 300 } else { |
301 Y[2] = Y[0]; | 301 Y[2] = Y[0]; |
302 Y[3] = Y[0]; | 302 Y[3] = Y[0]; |
303 } | 303 } |
304 break; | 304 break; |
305 | 305 |
306 case 2: | 306 case 2: |
307 if (modifier) { // unpack four luma samples | 307 if (modifier) { // unpack four luma samples |
308 tmp = (*buf++) << 16; | 308 tmp = (*buf++) << 16; |
309 tmp += (*buf++) << 8; | 309 tmp += (*buf++) << 8; |
310 tmp += *buf++; | 310 tmp += *buf++; |
311 | 311 |
312 Y[0] = (tmp >> 18) & 0x3F; | 312 Y[0] = (tmp >> 18) & 0x3F; |
313 Y[1] = (tmp >> 12) & 0x3F; | 313 Y[1] = (tmp >> 12) & 0x3F; |
314 Y[2] = (tmp >> 6) & 0x3F; | 314 Y[2] = (tmp >> 6) & 0x3F; |
315 Y[3] = tmp & 0x3F; | 315 Y[3] = tmp & 0x3F; |
316 angle = 16; | 316 angle = 16; |
317 } else { // retrieve luma samples from codebook | 317 } else { // retrieve luma samples from codebook |
318 tmp = (*buf++) << 8; | 318 tmp = (*buf++) << 8; |
319 tmp += (*buf++); | 319 tmp += (*buf++); |
320 | 320 |
321 angle = (tmp >> 12) & 0xF; | 321 angle = (tmp >> 12) & 0xF; |
322 tmp &= 0xFFF; | 322 tmp &= 0xFFF; |
323 tmp <<= 2; | 323 tmp <<= 2; |
324 Y[0] = s->ulti_codebook[tmp]; | 324 Y[0] = s->ulti_codebook[tmp]; |
325 Y[1] = s->ulti_codebook[tmp + 1]; | 325 Y[1] = s->ulti_codebook[tmp + 1]; |
326 Y[2] = s->ulti_codebook[tmp + 2]; | 326 Y[2] = s->ulti_codebook[tmp + 2]; |
327 Y[3] = s->ulti_codebook[tmp + 3]; | 327 Y[3] = s->ulti_codebook[tmp + 3]; |
328 } | 328 } |
329 break; | 329 break; |
330 | 330 |
331 case 3: | 331 case 3: |
332 if (modifier) { // all 16 luma samples | 332 if (modifier) { // all 16 luma samples |
333 uint8_t Luma[16]; | 333 uint8_t Luma[16]; |
334 | 334 |
335 tmp = (*buf++) << 16; | 335 tmp = (*buf++) << 16; |
336 tmp += (*buf++) << 8; | 336 tmp += (*buf++) << 8; |
337 tmp += *buf++; | 337 tmp += *buf++; |
338 Luma[0] = (tmp >> 18) & 0x3F; | 338 Luma[0] = (tmp >> 18) & 0x3F; |
339 Luma[1] = (tmp >> 12) & 0x3F; | 339 Luma[1] = (tmp >> 12) & 0x3F; |
340 Luma[2] = (tmp >> 6) & 0x3F; | 340 Luma[2] = (tmp >> 6) & 0x3F; |
341 Luma[3] = tmp & 0x3F; | 341 Luma[3] = tmp & 0x3F; |
342 | 342 |
343 tmp = (*buf++) << 16; | 343 tmp = (*buf++) << 16; |
344 tmp += (*buf++) << 8; | 344 tmp += (*buf++) << 8; |
345 tmp += *buf++; | 345 tmp += *buf++; |
346 Luma[4] = (tmp >> 18) & 0x3F; | 346 Luma[4] = (tmp >> 18) & 0x3F; |
347 Luma[5] = (tmp >> 12) & 0x3F; | 347 Luma[5] = (tmp >> 12) & 0x3F; |
348 Luma[6] = (tmp >> 6) & 0x3F; | 348 Luma[6] = (tmp >> 6) & 0x3F; |
349 Luma[7] = tmp & 0x3F; | 349 Luma[7] = tmp & 0x3F; |
350 | 350 |
351 tmp = (*buf++) << 16; | 351 tmp = (*buf++) << 16; |
352 tmp += (*buf++) << 8; | 352 tmp += (*buf++) << 8; |
353 tmp += *buf++; | 353 tmp += *buf++; |
354 Luma[8] = (tmp >> 18) & 0x3F; | 354 Luma[8] = (tmp >> 18) & 0x3F; |
355 Luma[9] = (tmp >> 12) & 0x3F; | 355 Luma[9] = (tmp >> 12) & 0x3F; |
356 Luma[10] = (tmp >> 6) & 0x3F; | 356 Luma[10] = (tmp >> 6) & 0x3F; |
357 Luma[11] = tmp & 0x3F; | 357 Luma[11] = tmp & 0x3F; |
358 | 358 |
359 tmp = (*buf++) << 16; | 359 tmp = (*buf++) << 16; |
360 tmp += (*buf++) << 8; | 360 tmp += (*buf++) << 8; |
361 tmp += *buf++; | 361 tmp += *buf++; |
362 Luma[12] = (tmp >> 18) & 0x3F; | 362 Luma[12] = (tmp >> 18) & 0x3F; |
363 Luma[13] = (tmp >> 12) & 0x3F; | 363 Luma[13] = (tmp >> 12) & 0x3F; |
364 Luma[14] = (tmp >> 6) & 0x3F; | 364 Luma[14] = (tmp >> 6) & 0x3F; |
365 Luma[15] = tmp & 0x3F; | 365 Luma[15] = tmp & 0x3F; |
366 | 366 |
367 ulti_convert_yuv(&s->frame, tx, ty, Luma, chroma); | 367 ulti_convert_yuv(&s->frame, tx, ty, Luma, chroma); |
368 } else { | 368 } else { |
369 tmp = *buf++; | 369 tmp = *buf++; |
370 if(tmp & 0x80) { | 370 if(tmp & 0x80) { |
371 angle = (tmp >> 4) & 0x7; | 371 angle = (tmp >> 4) & 0x7; |
372 tmp = (tmp << 8) + *buf++; | 372 tmp = (tmp << 8) + *buf++; |
373 Y[0] = (tmp >> 6) & 0x3F; | 373 Y[0] = (tmp >> 6) & 0x3F; |
374 Y[1] = tmp & 0x3F; | 374 Y[1] = tmp & 0x3F; |
375 Y[2] = (*buf++) & 0x3F; | 375 Y[2] = (*buf++) & 0x3F; |
376 Y[3] = (*buf++) & 0x3F; | 376 Y[3] = (*buf++) & 0x3F; |
377 ulti_grad(&s->frame, tx, ty, Y, chroma, angle); //draw block | 377 ulti_grad(&s->frame, tx, ty, Y, chroma, angle); //draw block |
378 } else { // some patterns | 378 } else { // some patterns |
379 int f0, f1; | 379 int f0, f1; |
380 f0 = *buf++; | 380 f0 = *buf++; |
381 f1 = tmp; | 381 f1 = tmp; |
382 Y[0] = (*buf++) & 0x3F; | 382 Y[0] = (*buf++) & 0x3F; |
383 Y[1] = (*buf++) & 0x3F; | 383 Y[1] = (*buf++) & 0x3F; |
384 ulti_pattern(&s->frame, tx, ty, f1, f0, Y[0], Y[1], chroma); | 384 ulti_pattern(&s->frame, tx, ty, f1, f0, Y[0], Y[1], chroma); |
385 } | 385 } |
386 } | 386 } |
387 break; | 387 break; |
388 } | 388 } |
389 if(code != 3) | 389 if(code != 3) |
390 ulti_grad(&s->frame, tx, ty, Y, chroma, angle); // draw block | 390 ulti_grad(&s->frame, tx, ty, Y, chroma, angle); // draw block |
391 } | 391 } |
392 blocks++; | 392 blocks++; |
393 x += 8; | 393 x += 8; |
394 if(x >= s->width) { | 394 if(x >= s->width) { |
395 x = 0; | 395 x = 0; |
396 y += 8; | 396 y += 8; |
397 } | 397 } |
398 } | 398 } |
399 } | 399 } |
400 | 400 |
401 *data_size=sizeof(AVFrame); | 401 *data_size=sizeof(AVFrame); |
402 *(AVFrame*)data= s->frame; | 402 *(AVFrame*)data= s->frame; |
403 | 403 |