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 }