summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/get_bits.h18
-rw-r--r--libavformat/mpegts.c13
2 files changed, 18 insertions, 13 deletions
diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h
index f91441c120..c56a2c2d10 100644
--- a/libavcodec/get_bits.h
+++ b/libavcodec/get_bits.h
@@ -313,6 +313,24 @@ static inline unsigned int get_bits_long(GetBitContext *s, int n)
}
}
+/*
+ * Read 0-64 bits.
+ */
+static inline uint64_t get_bits64(GetBitContext *s, int n)
+{
+ if (n <= 32) {
+ return get_bits_long(s, n);
+ } else {
+#ifdef BITSTREAM_READER_LE
+ uint64_t ret = get_bits_long(s, 32);
+ return ret | (uint64_t)get_bits_long(s, n - 32) << 32;
+#else
+ uint64_t ret = (uint64_t)get_bits_long(s, n - 32) << 32;
+ return ret | get_bits_long(s, 32);
+#endif
+ }
+}
+
/**
* Read 0-32 bits as a signed integer.
*/
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 4aabcd7e60..7c4d447ddc 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -665,19 +665,6 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
pes->flags = 0;
}
-static uint64_t get_bits64(GetBitContext *gb, int bits)
-{
- uint64_t ret = 0;
- while (bits > 17) {
- ret <<= 17;
- ret |= get_bits(gb, 17);
- bits -= 17;
- }
- ret <<= bits;
- ret |= get_bits(gb, bits);
- return ret;
-}
-
static int read_sl_header(PESContext *pes, SLConfigDescr *sl, const uint8_t *buf, int buf_size)
{
GetBitContext gb;