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