Mercurial > libavcodec.hg
changeset 3404:0f56ae23d338 libavcodec
Optimizations suggested by Michael Niedermayer
author | kostya |
---|---|
date | Tue, 04 Jul 2006 15:33:28 +0000 |
parents | fc0eb7836ccb |
children | 58c4fd135462 |
files | vc1.c |
diffstat | 1 files changed, 21 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/vc1.c Mon Jul 03 18:43:45 2006 +0000 +++ b/vc1.c Tue Jul 04 15:33:28 2006 +0000 @@ -1019,20 +1019,15 @@ } } -#define SETMAXMIN(var) \ - if(var > ma) ma = var; \ - if(var < mi) mi = var; - static inline int median4(int a, int b, int c, int d) { - int ma, mi; - - ma = mi = a; - SETMAXMIN(b); - SETMAXMIN(c); - SETMAXMIN(d); - - return (a + b + c + d - ma - mi) >> 1; + if(a < b) { + if(c < d) return (FFMIN(b, d) + FFMAX(a, c)) >> 1; + else return (FFMIN(b, c) + FFMAX(a, d)) >> 1; + } else { + if(c < d) return (FFMIN(a, d) + FFMAX(b, c)) >> 1; + else return (FFMIN(a, c) + FFMAX(b, d)) >> 1; + } } @@ -1408,6 +1403,7 @@ #define GET_MQUANT() \ if (v->dquantfrm) \ { \ + int edges = 0; \ if (v->dqprofile == DQPROFILE_ALL_MBS) \ { \ if (v->dqbilevel) \ @@ -1421,49 +1417,21 @@ else mquant = get_bits(gb, 5); \ } \ } \ - else if(v->dqprofile == DQPROFILE_SINGLE_EDGE) \ - { \ - switch(v->dqsbedge){ \ - case 0: /* left */ \ - mquant = (s->mb_x) ? v->pq : v->altpq; \ - break; \ - case 1: /* top */ \ - mquant = (s->mb_y) ? v->pq : v->altpq; \ - break; \ - case 2: /* right */ \ - mquant = (s->mb_x != (s->mb_width - 1)) ? v->pq : v->altpq; \ - break; \ - case 3: /* bottom */ \ - mquant = (s->mb_y != (s->mb_height-1)) ? v->pq : v->altpq; \ - break; \ - default: \ - mquant = v->pq; \ - } \ - } \ + if(v->dqprofile == DQPROFILE_SINGLE_EDGE) \ + edges = 1 << v->dqsbedge; \ else if(v->dqprofile == DQPROFILE_DOUBLE_EDGES) \ - { \ - switch(v->dqsbedge){ \ - case 0: /* left and top */ \ - mquant = (s->mb_x && s->mb_y) ? v->pq : v->altpq; \ - break; \ - case 1: /* top and right */ \ - mquant = (s->mb_y && s->mb_x != (s->mb_width - 1)) ? v->pq : v->altpq; \ - break; \ - case 2: /* right and bottom */ \ - mquant = (s->mb_x != (s->mb_width - 1) && s->mb_y != (s->mb_height-1)) ? v->pq : v->altpq; \ - break; \ - case 3: /* bottom and left */ \ - mquant = (s->mb_x && s->mb_y != (s->mb_height-1)) ? v->pq : v->altpq; \ - break; \ - default: \ - mquant = v->pq; \ - } \ - } \ + edges = (3 << v->dqsbedge) % 15; \ else if(v->dqprofile == DQPROFILE_FOUR_EDGES) \ - { \ - mquant = (s->mb_x && s->mb_y && s->mb_x != (s->mb_width - 1) && s->mb_y != (s->mb_height-1)) ? v->pq : v->altpq; \ - } \ - else mquant = v->pq; \ + edges = 15; \ + mquant = v->pq; \ + if((edges&1) && !s->mb_x) \ + mquant = v->altpq; \ + if((edges&2) && !s->mb_y) \ + mquant = v->altpq; \ + if((edges&4) && s->mb_x == (s->mb_width - 1)) \ + mquant = v->altpq; \ + if((edges&8) && s->mb_y == (s->mb_height - 1)) \ + mquant = v->altpq; \ } /**