Commit 05d3fd44 authored by Michael Niedermayer's avatar Michael Niedermayer

Integrate get_te0_golomb() calls into the code, this allows some checks

to be avoided and the function is pretty small.
3% speedup, though this is probably due to changed inlining and not directly
this change.

Originally committed as revision 16301 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 9963b332
...@@ -4500,11 +4500,18 @@ decode_intra_mb: ...@@ -4500,11 +4500,18 @@ decode_intra_mb:
for(i=0; i<4; i++){ for(i=0; i<4; i++){
if(IS_DIRECT(h->sub_mb_type[i])) continue; if(IS_DIRECT(h->sub_mb_type[i])) continue;
if(IS_DIR(h->sub_mb_type[i], 0, list)){ if(IS_DIR(h->sub_mb_type[i], 0, list)){
unsigned int tmp = get_te0_golomb(&s->gb, ref_count); //FIXME init to 0 before and skip? unsigned int tmp;
if(ref_count == 1){
tmp= 0;
}else if(ref_count == 2){
tmp= get_bits1(&s->gb)^1;
}else{
tmp= get_ue_golomb_31(&s->gb);
if(tmp>=ref_count){ if(tmp>=ref_count){
av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp); av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp);
return -1; return -1;
} }
}
ref[list][i]= tmp; ref[list][i]= tmp;
}else{ }else{
//FIXME //FIXME
...@@ -4569,11 +4576,17 @@ decode_intra_mb: ...@@ -4569,11 +4576,17 @@ decode_intra_mb:
for(list=0; list<h->list_count; list++){ for(list=0; list<h->list_count; list++){
unsigned int val; unsigned int val;
if(IS_DIR(mb_type, 0, list)){ if(IS_DIR(mb_type, 0, list)){
val= get_te0_golomb(&s->gb, h->ref_count[list]); if(h->ref_count[list]==1){
val= 0;
}else if(h->ref_count[list]==2){
val= get_bits1(&s->gb)^1;
}else{
val= get_ue_golomb_31(&s->gb);
if(val >= h->ref_count[list]){ if(val >= h->ref_count[list]){
av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val); av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
return -1; return -1;
} }
}
}else }else
val= LIST_NOT_USED&0xFF; val= LIST_NOT_USED&0xFF;
fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, val, 1); fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, val, 1);
...@@ -4597,11 +4610,17 @@ decode_intra_mb: ...@@ -4597,11 +4610,17 @@ decode_intra_mb:
for(i=0; i<2; i++){ for(i=0; i<2; i++){
unsigned int val; unsigned int val;
if(IS_DIR(mb_type, i, list)){ if(IS_DIR(mb_type, i, list)){
val= get_te0_golomb(&s->gb, h->ref_count[list]); if(h->ref_count[list] == 1){
val= 0;
}else if(h->ref_count[list] == 2){
val= get_bits1(&s->gb)^1;
}else{
val= get_ue_golomb_31(&s->gb);
if(val >= h->ref_count[list]){ if(val >= h->ref_count[list]){
av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val); av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
return -1; return -1;
} }
}
}else }else
val= LIST_NOT_USED&0xFF; val= LIST_NOT_USED&0xFF;
fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, val, 1); fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, val, 1);
...@@ -4628,11 +4647,17 @@ decode_intra_mb: ...@@ -4628,11 +4647,17 @@ decode_intra_mb:
for(i=0; i<2; i++){ for(i=0; i<2; i++){
unsigned int val; unsigned int val;
if(IS_DIR(mb_type, i, list)){ //FIXME optimize if(IS_DIR(mb_type, i, list)){ //FIXME optimize
val= get_te0_golomb(&s->gb, h->ref_count[list]); if(h->ref_count[list]==1){
val= 0;
}else if(h->ref_count[list]==2){
val= get_bits1(&s->gb)^1;
}else{
val= get_ue_golomb_31(&s->gb);
if(val >= h->ref_count[list]){ if(val >= h->ref_count[list]){
av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val); av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
return -1; return -1;
} }
}
}else }else
val= LIST_NOT_USED&0xFF; val= LIST_NOT_USED&0xFF;
fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, val, 1); fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, val, 1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment