mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-25 04:30:02 +00:00
Optimizations suggested by Michael Niedermayer
Originally committed as revision 5607 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
5cb49ca11b
commit
35a9cac888
@ -1019,20 +1019,15 @@ static void vc1_mc_4mv_luma(VC1Context *v, int n)
|
||||
}
|
||||
}
|
||||
|
||||
#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 @@ static int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
|
||||
#define GET_MQUANT() \
|
||||
if (v->dquantfrm) \
|
||||
{ \
|
||||
int edges = 0; \
|
||||
if (v->dqprofile == DQPROFILE_ALL_MBS) \
|
||||
{ \
|
||||
if (v->dqbilevel) \
|
||||
@ -1421,49 +1417,21 @@ static int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
|
||||
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; \
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user