Mercurial > libavcodec.hg
comparison ffv1.c @ 1337:c4e6ed5319e7 libavcodec
cleanup / cosmetics
author | michaelni |
---|---|
date | Wed, 02 Jul 2003 16:50:20 +0000 |
parents | c16ac5b7ac79 |
children | daf951f32697 |
comparison
equal
deleted
inserted
replaced
1336:c16ac5b7ac79 | 1337:c4e6ed5319e7 |
---|---|
351 | 351 |
352 static void encode_plane(FFV1Context *s, uint8_t *src, int w, int h, int stride, int plane_index){ | 352 static void encode_plane(FFV1Context *s, uint8_t *src, int w, int h, int stride, int plane_index){ |
353 PlaneContext * const p= &s->plane[plane_index]; | 353 PlaneContext * const p= &s->plane[plane_index]; |
354 CABACContext * const c= &s->c; | 354 CABACContext * const c= &s->c; |
355 int x,y; | 355 int x,y; |
356 uint8_t pred_diff_buffer[4][w+6]; //FIXME rema,e | 356 uint8_t sample_buffer[2][w+6]; |
357 uint8_t *pred_diff[4]= {pred_diff_buffer[0]+3, pred_diff_buffer[1]+3, pred_diff_buffer[2]+3, pred_diff_buffer[3]+3}; | 357 uint8_t *sample[2]= {sample_buffer[0]+3, sample_buffer[1]+3}; |
358 int run_index=0; | 358 int run_index=0; |
359 | 359 |
360 memset(pred_diff_buffer, 0, sizeof(pred_diff_buffer)); | 360 memset(sample_buffer, 0, sizeof(sample_buffer)); |
361 | 361 |
362 for(y=0; y<h; y++){ | 362 for(y=0; y<h; y++){ |
363 uint8_t *temp= pred_diff[0]; //FIXME try a normal buffer | 363 uint8_t *temp= sample[0]; //FIXME try a normal buffer |
364 int run_count=0; | 364 int run_count=0; |
365 int run_mode=0; | 365 int run_mode=0; |
366 | 366 |
367 pred_diff[0]= pred_diff[1]; | 367 sample[0]= sample[1]; |
368 pred_diff[1]= pred_diff[2]; | 368 sample[1]= temp; |
369 pred_diff[2]= pred_diff[3]; | |
370 pred_diff[3]= temp; | |
371 | 369 |
372 pred_diff[3][-1]= pred_diff[2][0 ]; | 370 sample[1][-1]= sample[0][0 ]; |
373 pred_diff[2][ w]= pred_diff[2][w-1]; | 371 sample[0][ w]= sample[0][w-1]; |
374 | 372 |
375 for(x=0; x<w; x++){ | 373 for(x=0; x<w; x++){ |
376 uint8_t *temp_src= src + x + stride*y; | 374 uint8_t *temp_src= src + x + stride*y; |
377 int diff, context; | 375 int diff, context; |
378 | 376 |
379 context= get_context(s, pred_diff[3]+x, pred_diff[2]+x, pred_diff[1]+x); | 377 context= get_context(s, sample[1]+x, sample[0]+x, sample[1]+x); |
380 diff= temp_src[0] - predict(pred_diff[3]+x, pred_diff[2]+x); | 378 diff= temp_src[0] - predict(sample[1]+x, sample[0]+x); |
381 | 379 |
382 if(context < 0){ | 380 if(context < 0){ |
383 context = -context; | 381 context = -context; |
384 diff= -diff; | 382 diff= -diff; |
385 } | 383 } |
414 | 412 |
415 if(run_mode == 0) | 413 if(run_mode == 0) |
416 put_vlc_symbol(&s->pb, &p->vlc_state[context], diff); | 414 put_vlc_symbol(&s->pb, &p->vlc_state[context], diff); |
417 } | 415 } |
418 | 416 |
419 pred_diff[3][x]= temp_src[0]; | 417 sample[1][x]= temp_src[0]; |
420 } | 418 } |
421 if(run_mode){ | 419 if(run_mode){ |
422 while(run_count >= 1<<log2_run[run_index]){ | 420 while(run_count >= 1<<log2_run[run_index]){ |
423 run_count -= 1<<log2_run[run_index]; | 421 run_count -= 1<<log2_run[run_index]; |
424 run_index++; | 422 run_index++; |
643 | 641 |
644 static void decode_plane(FFV1Context *s, uint8_t *src, int w, int h, int stride, int plane_index){ | 642 static void decode_plane(FFV1Context *s, uint8_t *src, int w, int h, int stride, int plane_index){ |
645 PlaneContext * const p= &s->plane[plane_index]; | 643 PlaneContext * const p= &s->plane[plane_index]; |
646 CABACContext * const c= &s->c; | 644 CABACContext * const c= &s->c; |
647 int x,y; | 645 int x,y; |
648 uint8_t pred_diff_buffer[4][w+6]; | 646 uint8_t sample_buffer[2][w+6]; |
649 uint8_t *pred_diff[4]= {pred_diff_buffer[0]+3, pred_diff_buffer[1]+3, pred_diff_buffer[2]+3, pred_diff_buffer[3]+3}; | 647 uint8_t *sample[2]= {sample_buffer[0]+3, sample_buffer[1]+3}; |
650 int run_index=0; | 648 int run_index=0; |
651 | 649 |
652 memset(pred_diff_buffer, 0, sizeof(pred_diff_buffer)); | 650 memset(sample_buffer, 0, sizeof(sample_buffer)); |
653 | 651 |
654 for(y=0; y<h; y++){ | 652 for(y=0; y<h; y++){ |
655 uint8_t *temp= pred_diff[0]; //FIXME try a normal buffer | 653 uint8_t *temp= sample[0]; //FIXME try a normal buffer |
656 int run_count=0; | 654 int run_count=0; |
657 int run_mode=0; | 655 int run_mode=0; |
658 | 656 |
659 pred_diff[0]= pred_diff[1]; | 657 sample[0]= sample[1]; |
660 pred_diff[1]= pred_diff[2]; | 658 sample[1]= temp; |
661 pred_diff[2]= pred_diff[3]; | 659 |
662 pred_diff[3]= temp; | 660 sample[1][-1]= sample[0][0 ]; |
663 | 661 sample[0][ w]= sample[0][w-1]; |
664 pred_diff[3][-1]= pred_diff[2][0 ]; | |
665 pred_diff[2][ w]= pred_diff[2][w-1]; | |
666 | 662 |
667 for(x=0; x<w; x++){ | 663 for(x=0; x<w; x++){ |
668 uint8_t *temp_src= src + x + stride*y; | 664 uint8_t *temp_src= src + x + stride*y; |
669 int diff, context, sign; | 665 int diff, context, sign; |
670 | 666 |
671 context= get_context(s, pred_diff[3] + x, pred_diff[2] + x, pred_diff[1] + x); | 667 context= get_context(s, sample[1] + x, sample[0] + x, sample[1] + x); |
672 if(context < 0){ | 668 if(context < 0){ |
673 context= -context; | 669 context= -context; |
674 sign=1; | 670 sign=1; |
675 }else | 671 }else |
676 sign=0; | 672 sign=0; |
707 // printf("count:%d index:%d, mode:%d, x:%d y:%d pos:%d\n", run_count, run_index, run_mode, x, y, get_bits_count(&s->gb)); | 703 // printf("count:%d index:%d, mode:%d, x:%d y:%d pos:%d\n", run_count, run_index, run_mode, x, y, get_bits_count(&s->gb)); |
708 } | 704 } |
709 | 705 |
710 if(sign) diff= (int8_t)(-diff); //FIXME remove cast | 706 if(sign) diff= (int8_t)(-diff); //FIXME remove cast |
711 | 707 |
712 pred_diff[3][x]= | 708 sample[1][x]= |
713 temp_src[0] = predict(pred_diff[3] + x, pred_diff[2] + x) + diff; | 709 temp_src[0] = predict(sample[1] + x, sample[0] + x) + diff; |
714 | 710 |
715 assert(diff>= -128 && diff <= 127); | 711 assert(diff>= -128 && diff <= 127); |
716 } | 712 } |
717 } | 713 } |
718 } | 714 } |