changeset 5509:9fce88cf7f94 libavcodec

copy get_unary from vc1
author alex
date Wed, 08 Aug 2007 20:38:30 +0000
parents 07cd560e9a8c
children 37bf17e052fb
files bitstream.h
diffstat 1 files changed, 46 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/bitstream.h	Wed Aug 08 20:27:18 2007 +0000
+++ b/bitstream.h	Wed Aug 08 20:38:30 2007 +0000
@@ -969,4 +969,50 @@
         return get_bits1(gb) + 1;
 }
 
+/**
+ * Get unary code of limited length
+ * @todo FIXME Slow and ugly
+ * @param gb GetBitContext
+ * @param[in] stop The bitstop value (unary code of 1's or 0's)
+ * @param[in] len Maximum length
+ * @return Unary length/index
+ */
+static int get_unary(GetBitContext *gb, int stop, int len)
+{
+#if 1
+    int i;
+
+    for(i = 0; i < len && get_bits1(gb) != stop; i++);
+    return i;
+/*  int i = 0, tmp = !stop;
+
+  while (i != len && tmp != stop)
+  {
+    tmp = get_bits(gb, 1);
+    i++;
+  }
+  if (i == len && tmp != stop) return len+1;
+  return i;*/
+#else
+  unsigned int buf;
+  int log;
+
+  OPEN_READER(re, gb);
+  UPDATE_CACHE(re, gb);
+  buf=GET_CACHE(re, gb); //Still not sure
+  if (stop) buf = ~buf;
+
+  log= av_log2(-buf); //FIXME: -?
+  if (log < limit){
+    LAST_SKIP_BITS(re, gb, log+1);
+    CLOSE_READER(re, gb);
+    return log;
+  }
+
+  LAST_SKIP_BITS(re, gb, limit);
+  CLOSE_READER(re, gb);
+  return limit;
+#endif
+}
+
 #endif /* BITSTREAM_H */