|
|
@ -742,6 +742,59 @@ void init_rl(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void init_vlc_rl(RLTable *rl, int use_static) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, q; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Return if static table is already initialized */ |
|
|
|
|
|
|
|
if(use_static && rl->rl_vlc[0]) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
init_vlc(&rl->vlc, 9, rl->n + 1, |
|
|
|
|
|
|
|
&rl->table_vlc[0][1], 4, 2, |
|
|
|
|
|
|
|
&rl->table_vlc[0][0], 4, 2, use_static); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(q=0; q<32; q++){ |
|
|
|
|
|
|
|
int qmul= q*2; |
|
|
|
|
|
|
|
int qadd= (q-1)|1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(q==0){ |
|
|
|
|
|
|
|
qmul=1; |
|
|
|
|
|
|
|
qadd=0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if(use_static) |
|
|
|
|
|
|
|
rl->rl_vlc[q]= av_mallocz_static(rl->vlc.table_size*sizeof(RL_VLC_ELEM)); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
rl->rl_vlc[q]= av_malloc(rl->vlc.table_size*sizeof(RL_VLC_ELEM)); |
|
|
|
|
|
|
|
for(i=0; i<rl->vlc.table_size; i++){ |
|
|
|
|
|
|
|
int code= rl->vlc.table[i][0]; |
|
|
|
|
|
|
|
int len = rl->vlc.table[i][1]; |
|
|
|
|
|
|
|
int level, run; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(len==0){ // illegal code
|
|
|
|
|
|
|
|
run= 66; |
|
|
|
|
|
|
|
level= MAX_LEVEL; |
|
|
|
|
|
|
|
}else if(len<0){ //more bits needed
|
|
|
|
|
|
|
|
run= 0; |
|
|
|
|
|
|
|
level= code; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
if(code==rl->n){ //esc
|
|
|
|
|
|
|
|
run= 66; |
|
|
|
|
|
|
|
level= 0; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
run= rl->table_run [code] + 1; |
|
|
|
|
|
|
|
level= rl->table_level[code] * qmul + qadd; |
|
|
|
|
|
|
|
if(code >= rl->last) run+=192; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
rl->rl_vlc[q][i].len= len; |
|
|
|
|
|
|
|
rl->rl_vlc[q][i].level= level; |
|
|
|
|
|
|
|
rl->rl_vlc[q][i].run= run; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* draw the edges of width 'w' of an image of size width, height */ |
|
|
|
/* draw the edges of width 'w' of an image of size width, height */ |
|
|
|
//FIXME check that this is ok for mpeg4 interlaced
|
|
|
|
//FIXME check that this is ok for mpeg4 interlaced
|
|
|
|
static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w) |
|
|
|
static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w) |
|
|
|