[SCM] libav/experimental: copy get_unary from vc1

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:05:04 UTC 2013


The following commit has been merged in the experimental branch:
commit 971e878dca0bc5b8323b120f55067a3191cc6d88
Author: Alex Beregszaszi <alex at rtfs.hu>
Date:   Wed Aug 8 20:38:30 2007 +0000

    copy get_unary from vc1
    
    Originally committed as revision 9994 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h
index c516c3c..d41d5ec 100644
--- a/libavcodec/bitstream.h
+++ b/libavcodec/bitstream.h
@@ -969,4 +969,50 @@ static inline int decode012(GetBitContext *gb){
         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 */

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list