summaryrefslogtreecommitdiff
path: root/libavcodec/put_bits.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/put_bits.h')
-rw-r--r--libavcodec/put_bits.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/libavcodec/put_bits.h b/libavcodec/put_bits.h
index 4b4b3a873a..b081c26842 100644
--- a/libavcodec/put_bits.h
+++ b/libavcodec/put_bits.h
@@ -136,6 +136,10 @@ void ff_put_string(PutBitContext * pbc, const char *s, int terminate_string);
*/
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length);
+/**
+ * Write up to 31 bits into a bitstream.
+ * Use put_bits32 to write 32 bits.
+ */
static inline void put_bits(PutBitContext *s, int n, unsigned int value)
#ifndef ALT_BITSTREAM_WRITER
{
@@ -143,7 +147,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value)
int bit_left;
// printf("put_bits=%d %x\n", n, value);
- assert(n == 32 || value < (1U << n));
+ assert(n <= 31 && value < (1U << n));
bit_buf = s->bit_buf;
bit_left = s->bit_left;
@@ -260,6 +264,22 @@ static inline void put_sbits(PutBitContext *pb, int bits, int32_t val)
}
/**
+ * Write exactly 32 bits into a bitstream
+ */
+static void av_unused put_bits32(PutBitContext *s, uint32_t value)
+{
+ int lo = value & 0xffff;
+ int hi = value >> 16;
+#ifdef ALT_BITSTREAM_WRITER_LE
+ put_bits(s, 16, lo);
+ put_bits(s, 16, hi);
+#else
+ put_bits(s, 16, hi);
+ put_bits(s, 16, lo);
+#endif
+}
+
+/**
* Returns the pointer to the byte where the bitstream writer will put
* the next bit.
*/