Mercurial > libavcodec.hg
comparison h263.c @ 1255:625ccacd1113 libavcodec
decode motion & modulo optimize patch by (BERO <bero at geocities dot co dot jp>)
author | michaelni |
---|---|
date | Wed, 14 May 2003 01:08:02 +0000 |
parents | 604661d34c68 |
children | 6defe392d5d2 |
comparison
equal
deleted
inserted
replaced
1254:604661d34c68 | 1255:625ccacd1113 |
---|---|
3435 if (code < 0) | 3435 if (code < 0) |
3436 return 0xffff; | 3436 return 0xffff; |
3437 | 3437 |
3438 sign = get_bits1(&s->gb); | 3438 sign = get_bits1(&s->gb); |
3439 shift = f_code - 1; | 3439 shift = f_code - 1; |
3440 val = (code - 1) << shift; | 3440 val = code; |
3441 if (shift > 0) | 3441 if (shift) { |
3442 val = (val - 1) << shift; | |
3442 val |= get_bits(&s->gb, shift); | 3443 val |= get_bits(&s->gb, shift); |
3443 val++; | 3444 val++; |
3445 } | |
3444 if (sign) | 3446 if (sign) |
3445 val = -val; | 3447 val = -val; |
3446 val += pred; | 3448 val += pred; |
3447 | 3449 |
3448 /* modulo decoding */ | 3450 /* modulo decoding */ |
3449 if (!s->h263_long_vectors) { | 3451 if (!s->h263_long_vectors) { |
3450 l = 1 << (f_code + 4); | 3452 l = 1 << (f_code + 4); |
3451 if (val < -l) { | 3453 val = ((val + l)&(l*2-1)) - l; |
3452 val += l<<1; | |
3453 } else if (val >= l) { | |
3454 val -= l<<1; | |
3455 } | |
3456 } else { | 3454 } else { |
3457 /* horrible h263 long vector mode */ | 3455 /* horrible h263 long vector mode */ |
3458 if (pred < -31 && val < -63) | 3456 if (pred < -31 && val < -63) |
3459 val += 64; | 3457 val += 64; |
3460 if (pred > 32 && val > 63) | 3458 if (pred > 32 && val > 63) |