comparison bitstream.h @ 5509:9fce88cf7f94 libavcodec

copy get_unary from vc1
author alex
date Wed, 08 Aug 2007 20:38:30 +0000
parents 4c4d00a98ab1
children 28dcc5cd79d2
comparison
equal deleted inserted replaced
5508:07cd560e9a8c 5509:9fce88cf7f94
967 return 0; 967 return 0;
968 else 968 else
969 return get_bits1(gb) + 1; 969 return get_bits1(gb) + 1;
970 } 970 }
971 971
972 /**
973 * Get unary code of limited length
974 * @todo FIXME Slow and ugly
975 * @param gb GetBitContext
976 * @param[in] stop The bitstop value (unary code of 1's or 0's)
977 * @param[in] len Maximum length
978 * @return Unary length/index
979 */
980 static int get_unary(GetBitContext *gb, int stop, int len)
981 {
982 #if 1
983 int i;
984
985 for(i = 0; i < len && get_bits1(gb) != stop; i++);
986 return i;
987 /* int i = 0, tmp = !stop;
988
989 while (i != len && tmp != stop)
990 {
991 tmp = get_bits(gb, 1);
992 i++;
993 }
994 if (i == len && tmp != stop) return len+1;
995 return i;*/
996 #else
997 unsigned int buf;
998 int log;
999
1000 OPEN_READER(re, gb);
1001 UPDATE_CACHE(re, gb);
1002 buf=GET_CACHE(re, gb); //Still not sure
1003 if (stop) buf = ~buf;
1004
1005 log= av_log2(-buf); //FIXME: -?
1006 if (log < limit){
1007 LAST_SKIP_BITS(re, gb, log+1);
1008 CLOSE_READER(re, gb);
1009 return log;
1010 }
1011
1012 LAST_SKIP_BITS(re, gb, limit);
1013 CLOSE_READER(re, gb);
1014 return limit;
1015 #endif
1016 }
1017
972 #endif /* BITSTREAM_H */ 1018 #endif /* BITSTREAM_H */