Mercurial > libavcodec.hg
comparison error_resilience.c @ 1389:da0b3a50d209 libavcodec
rate distortion mb decision support
fix decoding of old %16!=0 divx
fix assertion failure in motion_est.c
| author | michaelni |
|---|---|
| date | Tue, 29 Jul 2003 02:09:12 +0000 |
| parents | f07e17427140 |
| children | 89dacc2b9bf0 |
comparison
equal
deleted
inserted
replaced
| 1388:b5c65adac96a | 1389:da0b3a50d209 |
|---|---|
| 28 #include "avcodec.h" | 28 #include "avcodec.h" |
| 29 #include "dsputil.h" | 29 #include "dsputil.h" |
| 30 #include "mpegvideo.h" | 30 #include "mpegvideo.h" |
| 31 #include "common.h" | 31 #include "common.h" |
| 32 | 32 |
| 33 static void decode_mb(MpegEncContext *s){ | |
| 34 s->dest[0] = s->current_picture.data[0] + (s->mb_y * 16* s->linesize ) + s->mb_x * 16; | |
| 35 s->dest[1] = s->current_picture.data[1] + (s->mb_y * 8 * s->uvlinesize) + s->mb_x * 8; | |
| 36 s->dest[2] = s->current_picture.data[2] + (s->mb_y * 8 * s->uvlinesize) + s->mb_x * 8; | |
| 37 | |
| 38 MPV_decode_mb(s, s->block); | |
| 39 } | |
| 40 | |
| 33 /** | 41 /** |
| 34 * replaces the current MB with a flat dc only version. | 42 * replaces the current MB with a flat dc only version. |
| 35 */ | 43 */ |
| 36 static void put_dc(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int mb_x, int mb_y) | 44 static void put_dc(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int mb_x, int mb_y) |
| 37 { | 45 { |
| 344 | 352 |
| 345 s->mb_x= mb_x; | 353 s->mb_x= mb_x; |
| 346 s->mb_y= mb_y; | 354 s->mb_y= mb_y; |
| 347 s->mv[0][0][0]= 0; | 355 s->mv[0][0][0]= 0; |
| 348 s->mv[0][0][1]= 0; | 356 s->mv[0][0][1]= 0; |
| 349 MPV_decode_mb(s, s->block); | 357 decode_mb(s); |
| 350 } | 358 } |
| 351 } | 359 } |
| 352 return; | 360 return; |
| 353 } | 361 } |
| 354 | 362 |
| 478 uint8_t *src= s->current_picture.data[0] + mb_x*16 + mb_y*16*s->linesize; | 486 uint8_t *src= s->current_picture.data[0] + mb_x*16 + mb_y*16*s->linesize; |
| 479 | 487 |
| 480 s->motion_val[mot_index][0]= s->mv[0][0][0]= mv_predictor[j][0]; | 488 s->motion_val[mot_index][0]= s->mv[0][0][0]= mv_predictor[j][0]; |
| 481 s->motion_val[mot_index][1]= s->mv[0][0][1]= mv_predictor[j][1]; | 489 s->motion_val[mot_index][1]= s->mv[0][0][1]= mv_predictor[j][1]; |
| 482 | 490 |
| 483 MPV_decode_mb(s, s->block); | 491 decode_mb(s); |
| 484 | 492 |
| 485 if(mb_x>0 && fixed[mb_xy-1]){ | 493 if(mb_x>0 && fixed[mb_xy-1]){ |
| 486 int k; | 494 int k; |
| 487 for(k=0; k<16; k++) | 495 for(k=0; k<16; k++) |
| 488 score += ABS(src[k*s->linesize-1 ]-src[k*s->linesize ]); | 496 score += ABS(src[k*s->linesize-1 ]-src[k*s->linesize ]); |
| 511 score_sum+= best_score; | 519 score_sum+= best_score; |
| 512 //FIXME no need to set s->motion_val[mot_index][0] explicit | 520 //FIXME no need to set s->motion_val[mot_index][0] explicit |
| 513 s->motion_val[mot_index][0]= s->mv[0][0][0]= mv_predictor[best_pred][0]; | 521 s->motion_val[mot_index][0]= s->mv[0][0][0]= mv_predictor[best_pred][0]; |
| 514 s->motion_val[mot_index][1]= s->mv[0][0][1]= mv_predictor[best_pred][1]; | 522 s->motion_val[mot_index][1]= s->mv[0][0][1]= mv_predictor[best_pred][1]; |
| 515 | 523 |
| 516 MPV_decode_mb(s, s->block); | 524 decode_mb(s); |
| 517 | 525 |
| 518 | 526 |
| 519 if(s->mv[0][0][0] != prev_x || s->mv[0][0][1] != prev_y){ | 527 if(s->mv[0][0][0] != prev_x || s->mv[0][0][1] != prev_y){ |
| 520 fixed[mb_xy]=MV_CHANGED; | 528 fixed[mb_xy]=MV_CHANGED; |
| 521 changed++; | 529 changed++; |
| 846 | 854 |
| 847 s->dsp.clear_blocks(s->block[0]); | 855 s->dsp.clear_blocks(s->block[0]); |
| 848 | 856 |
| 849 s->mb_x= mb_x; | 857 s->mb_x= mb_x; |
| 850 s->mb_y= mb_y; | 858 s->mb_y= mb_y; |
| 851 MPV_decode_mb(s, s->block); | 859 decode_mb(s); |
| 852 } | 860 } |
| 853 } | 861 } |
| 854 | 862 |
| 855 /* guess MVs */ | 863 /* guess MVs */ |
| 856 if(s->pict_type==B_TYPE){ | 864 if(s->pict_type==B_TYPE){ |
| 886 } | 894 } |
| 887 | 895 |
| 888 s->dsp.clear_blocks(s->block[0]); | 896 s->dsp.clear_blocks(s->block[0]); |
| 889 s->mb_x= mb_x; | 897 s->mb_x= mb_x; |
| 890 s->mb_y= mb_y; | 898 s->mb_y= mb_y; |
| 891 MPV_decode_mb(s, s->block); | 899 decode_mb(s); |
| 892 } | 900 } |
| 893 } | 901 } |
| 894 }else | 902 }else |
| 895 guess_mv(s); | 903 guess_mv(s); |
| 896 | 904 |
