get_xbits() optimization
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 31 Mar 2006 20:40:22 +0000 (20:40 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 31 Mar 2006 20:40:22 +0000 (20:40 +0000)
Originally committed as revision 5257 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/bitstream.h

index 4a3d55d..b425049 100644 (file)
@@ -574,21 +574,15 @@ static inline int get_bits_count(GetBitContext *s){
  * @author BERO
  */
 static inline int get_xbits(GetBitContext *s, int n){
-    register int tmp;
+    register int sign;
     register int32_t cache;
     OPEN_READER(re, s)
     UPDATE_CACHE(re, s)
     cache = GET_CACHE(re,s);
-    if ((int32_t)cache<0) { //MSB=1
-        tmp = NEG_USR32(cache,n);
-    } else {
-    //   tmp = (-1<<n) | NEG_USR32(cache,n) + 1; mpeg12.c algo
-    //   tmp = - (NEG_USR32(cache,n) ^ ((1 << n) - 1)); h263.c algo
-        tmp = - NEG_USR32(~cache,n);
-    }
+    sign=(~cache)>>31;
     LAST_SKIP_BITS(re, s, n)
     CLOSE_READER(re, s)
-    return tmp;
+    return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
 }
 
 static inline int get_sbits(GetBitContext *s, int n){