Mercurial > libavcodec.hg
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 { |