* LAST_SKIP_BITS(name, gb, num)
* Like SKIP_BITS, to be used if next call is UPDATE_CACHE or CLOSE_READER.
*
+ * BITS_LEFT(name, gb)
+ * Return the number of bits left
+ *
* For examples see get_bits, show_bits, skip_bits, get_vlc.
*/
# define MIN_CACHE_BITS 25
#endif
-#if UNCHECKED_BITSTREAM_READER
-#define OPEN_READER(name, gb) \
+#define OPEN_READER_NOSIZE(name, gb) \
unsigned int name ## _index = (gb)->index; \
unsigned int av_unused name ## _cache
-#define HAVE_BITS_REMAINING(name, gb) 1
+#if UNCHECKED_BITSTREAM_READER
+#define OPEN_READER(name, gb) OPEN_READER_NOSIZE(name, gb)
+
+#define BITS_AVAILABLE(name, gb) 1
#else
#define OPEN_READER(name, gb) \
- unsigned int name ## _index = (gb)->index; \
- unsigned int av_unused name ## _cache = 0; \
- unsigned int av_unused name ## _size_plus8 = (gb)->size_in_bits_plus8
+ OPEN_READER_NOSIZE(name, gb); \
+ unsigned int name ## _size_plus8 = (gb)->size_in_bits_plus8
-#define HAVE_BITS_REMAINING(name, gb) name ## _index < name ## _size_plus8
+#define BITS_AVAILABLE(name, gb) name ## _index < name ## _size_plus8
#endif
#define CLOSE_READER(name, gb) (gb)->index = name ## _index
name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num))
#endif
+#define BITS_LEFT(name, gb) ((int)((gb)->size_in_bits - name ## _index))
+
#define SKIP_BITS(name, gb, num) \
do { \
SKIP_CACHE(name, gb, num); \
static inline unsigned int show_bits(GetBitContext *s, int n)
{
register int tmp;
- OPEN_READER(re, s);
+ OPEN_READER_NOSIZE(re, s);
av_assert2(n>0 && n<=25);
UPDATE_CACHE(re, s);
tmp = SHOW_UBITS(re, s, n);