comparison h263.c @ 301:d7f71eb89558 libavcodec

divx5-gmc bug workaround
author michaelni
date Fri, 29 Mar 2002 05:15:49 +0000
parents 6622b0fd036c
children 8cf5507e6ca5
comparison
equal deleted inserted replaced
300:d874359e58f1 301:d7f71eb89558
1517 if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){ 1517 if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
1518 const int a= s->sprite_warping_accuracy; 1518 const int a= s->sprite_warping_accuracy;
1519 // int l = (1 << (s->f_code - 1)) * 32; 1519 // int l = (1 << (s->f_code - 1)) * 32;
1520 1520
1521 s->mcsel=1; 1521 s->mcsel=1;
1522 s->mv[0][0][0] = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample); 1522 if(s->divx_version==500 && s->divx_build==413){
1523 s->mv[0][0][1] = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample); 1523 s->mv[0][0][0] = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
1524 s->mv[0][0][1] = s->sprite_offset[0][1] / (1<<(a-s->quarter_sample));
1525 }else{
1526 s->mv[0][0][0] = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
1527 s->mv[0][0][1] = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
1528 }
1524 /* if (s->mv[0][0][0] < -l) s->mv[0][0][0]= -l; 1529 /* if (s->mv[0][0][0] < -l) s->mv[0][0][0]= -l;
1525 else if (s->mv[0][0][0] >= l) s->mv[0][0][0]= l-1; 1530 else if (s->mv[0][0][0] >= l) s->mv[0][0][0]= l-1;
1526 if (s->mv[0][0][1] < -l) s->mv[0][0][1]= -l; 1531 if (s->mv[0][0][1] < -l) s->mv[0][0][1]= -l;
1527 else if (s->mv[0][0][1] >= l) s->mv[0][0][1]= l-1;*/ 1532 else if (s->mv[0][0][1] >= l) s->mv[0][0][1]= l-1;*/
1528 1533
1571 else if(!s->mcsel) 1576 else if(!s->mcsel)
1572 mx = h263_decode_motion(s, pred_x, s->f_code); 1577 mx = h263_decode_motion(s, pred_x, s->f_code);
1573 else { 1578 else {
1574 const int a= s->sprite_warping_accuracy; 1579 const int a= s->sprite_warping_accuracy;
1575 // int l = (1 << (s->f_code - 1)) * 32; 1580 // int l = (1 << (s->f_code - 1)) * 32;
1576 mx= RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample); 1581 if(s->divx_version==500 && s->divx_build==413){
1577 // if (mx < -l) mx= -l; 1582 mx = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
1578 // else if (mx >= l) mx= l-1; 1583 }else{
1584 mx = RSHIFT(s->sprite_offset[0][0], a-s->quarter_sample);
1585 }
1586 // if (mx < -l) mx= -l, printf("C");
1587 // else if (mx >= l) mx= l-1, printf("C");
1579 } 1588 }
1580 if (mx >= 0xffff) 1589 if (mx >= 0xffff)
1581 return -1; 1590 return -1;
1582 1591
1583 if (s->umvplus_dec) 1592 if (s->umvplus_dec)
1585 else if(!s->mcsel) 1594 else if(!s->mcsel)
1586 my = h263_decode_motion(s, pred_y, s->f_code); 1595 my = h263_decode_motion(s, pred_y, s->f_code);
1587 else{ 1596 else{
1588 const int a= s->sprite_warping_accuracy; 1597 const int a= s->sprite_warping_accuracy;
1589 // int l = (1 << (s->f_code - 1)) * 32; 1598 // int l = (1 << (s->f_code - 1)) * 32;
1590 my= RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample); 1599 if(s->divx_version==500 && s->divx_build==413){
1591 // if (my < -l) my= -l; 1600 my = s->sprite_offset[0][1] / (1<<(a-s->quarter_sample));
1592 // else if (my >= l) my= l-1; 1601 }else{
1602 my = RSHIFT(s->sprite_offset[0][1], a-s->quarter_sample);
1603 }
1604 // if (my < -l) my= -l, printf("C");
1605 // else if (my >= l) my= l-1, printf("C");
1593 } 1606 }
1594 if (my >= 0xffff) 1607 if (my >= 0xffff)
1595 return -1; 1608 return -1;
1596 s->mv[0][0][0] = mx; 1609 s->mv[0][0][0] = mx;
1597 s->mv[0][0][1] = my; 1610 s->mv[0][0][1] = my;
2376 s->real_sprite_warping_points=1; 2389 s->real_sprite_warping_points=1;
2377 } 2390 }
2378 else 2391 else
2379 s->real_sprite_warping_points= s->num_sprite_warping_points; 2392 s->real_sprite_warping_points= s->num_sprite_warping_points;
2380 2393
2394 //printf("%d %d %d %d\n", d[0][0], d[0][1], s->sprite_offset[0][0], s->sprite_offset[0][1]);
2381 } 2395 }
2382 2396
2383 /* decode mpeg4 VOP header */ 2397 /* decode mpeg4 VOP header */
2384 int mpeg4_decode_picture_header(MpegEncContext * s) 2398 int mpeg4_decode_picture_header(MpegEncContext * s)
2385 { 2399 {