# HG changeset patch # User kostya # Date 1152027208 0 # Node ID 0f56ae23d338a0f3744e9d2abdec3a7fe4320974 # Parent fc0eb7836ccbaf24ac1fb5caef96973a644182c0 Optimizations suggested by Michael Niedermayer diff -r fc0eb7836ccb -r 0f56ae23d338 vc1.c --- 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; \ } /**