581 lines
14 KiB
Diff
581 lines
14 KiB
Diff
Index: libavcodec/golomb.h
|
|
IDEA additional info:
|
|
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
|
<+>UTF-8
|
|
===================================================================
|
|
diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h
|
|
--- a/libavcodec/golomb.h (revision a77521cd5d27e955b16e8097eecefc779ffdcb6d)
|
|
+++ b/libavcodec/golomb.h (date 1647179346628)
|
|
@@ -33,7 +33,6 @@
|
|
#include <stdint.h>
|
|
|
|
#include "get_bits.h"
|
|
-#include "put_bits.h"
|
|
|
|
#define INVALID_VLC 0x80000000
|
|
|
|
@@ -422,144 +421,6 @@
|
|
#endif
|
|
}
|
|
|
|
-/**
|
|
- * read unsigned golomb rice code (jpegls).
|
|
- */
|
|
-static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit,
|
|
- int esc_len)
|
|
-{
|
|
- unsigned int buf;
|
|
- int log;
|
|
-
|
|
-#if CACHED_BITSTREAM_READER
|
|
- buf = show_bits_long(gb, 32);
|
|
-
|
|
- log = av_log2(buf);
|
|
-
|
|
- if (log - k >= 1 && 32 - log < limit) {
|
|
- buf >>= log - k;
|
|
- buf += (30 - log) << k;
|
|
- skip_bits_long(gb, 32 + k - log);
|
|
-
|
|
- return buf;
|
|
- } else {
|
|
- int i;
|
|
- for (i = 0;
|
|
- i < limit && get_bits1(gb) == 0 && get_bits_left(gb) > 0;
|
|
- i++);
|
|
-
|
|
- if (i < limit - 1) {
|
|
- buf = get_bits_long(gb, k);
|
|
-
|
|
- return buf + (i << k);
|
|
- } else if (i == limit - 1) {
|
|
- buf = get_bits_long(gb, esc_len);
|
|
-
|
|
- return buf + 1;
|
|
- } else
|
|
- return -1;
|
|
- }
|
|
-#else
|
|
- OPEN_READER(re, gb);
|
|
- UPDATE_CACHE(re, gb);
|
|
- buf = GET_CACHE(re, gb);
|
|
-
|
|
- log = av_log2(buf);
|
|
-
|
|
- av_assert2(k <= 31);
|
|
-
|
|
- if (log - k >= 32 - MIN_CACHE_BITS + (MIN_CACHE_BITS == 32) &&
|
|
- 32 - log < limit) {
|
|
- buf >>= log - k;
|
|
- buf += (30U - log) << k;
|
|
- LAST_SKIP_BITS(re, gb, 32 + k - log);
|
|
- CLOSE_READER(re, gb);
|
|
-
|
|
- return buf;
|
|
- } else {
|
|
- int i;
|
|
- for (i = 0; i + MIN_CACHE_BITS <= limit && SHOW_UBITS(re, gb, MIN_CACHE_BITS) == 0; i += MIN_CACHE_BITS) {
|
|
- if (gb->size_in_bits <= re_index) {
|
|
- CLOSE_READER(re, gb);
|
|
- return -1;
|
|
- }
|
|
- LAST_SKIP_BITS(re, gb, MIN_CACHE_BITS);
|
|
- UPDATE_CACHE(re, gb);
|
|
- }
|
|
- for (; i < limit && SHOW_UBITS(re, gb, 1) == 0; i++) {
|
|
- SKIP_BITS(re, gb, 1);
|
|
- }
|
|
- LAST_SKIP_BITS(re, gb, 1);
|
|
- UPDATE_CACHE(re, gb);
|
|
-
|
|
- if (i < limit - 1) {
|
|
- if (k) {
|
|
- if (k > MIN_CACHE_BITS - 1) {
|
|
- buf = SHOW_UBITS(re, gb, 16) << (k-16);
|
|
- LAST_SKIP_BITS(re, gb, 16);
|
|
- UPDATE_CACHE(re, gb);
|
|
- buf |= SHOW_UBITS(re, gb, k-16);
|
|
- LAST_SKIP_BITS(re, gb, k-16);
|
|
- } else {
|
|
- buf = SHOW_UBITS(re, gb, k);
|
|
- LAST_SKIP_BITS(re, gb, k);
|
|
- }
|
|
- } else {
|
|
- buf = 0;
|
|
- }
|
|
-
|
|
- buf += ((SUINT)i << k);
|
|
- } else if (i == limit - 1) {
|
|
- buf = SHOW_UBITS(re, gb, esc_len);
|
|
- LAST_SKIP_BITS(re, gb, esc_len);
|
|
-
|
|
- buf ++;
|
|
- } else {
|
|
- buf = -1;
|
|
- }
|
|
- CLOSE_READER(re, gb);
|
|
- return buf;
|
|
- }
|
|
-#endif
|
|
-}
|
|
-
|
|
-/**
|
|
- * read signed golomb rice code (ffv1).
|
|
- */
|
|
-static inline int get_sr_golomb(GetBitContext *gb, int k, int limit,
|
|
- int esc_len)
|
|
-{
|
|
- unsigned v = get_ur_golomb(gb, k, limit, esc_len);
|
|
- return (v >> 1) ^ -(v & 1);
|
|
-}
|
|
-
|
|
-/**
|
|
- * read signed golomb rice code (flac).
|
|
- */
|
|
-static inline int get_sr_golomb_flac(GetBitContext *gb, int k, int limit,
|
|
- int esc_len)
|
|
-{
|
|
- unsigned v = get_ur_golomb_jpegls(gb, k, limit, esc_len);
|
|
- return (v >> 1) ^ -(v & 1);
|
|
-}
|
|
-
|
|
-/**
|
|
- * read unsigned golomb rice code (shorten).
|
|
- */
|
|
-static inline unsigned int get_ur_golomb_shorten(GetBitContext *gb, int k)
|
|
-{
|
|
- return get_ur_golomb_jpegls(gb, k, INT_MAX, 0);
|
|
-}
|
|
-
|
|
-/**
|
|
- * read signed golomb rice code (shorten).
|
|
- */
|
|
-static inline int get_sr_golomb_shorten(GetBitContext *gb, int k)
|
|
-{
|
|
- int uvar = get_ur_golomb_jpegls(gb, k + 1, INT_MAX, 0);
|
|
- return (uvar >> 1) ^ -(uvar & 1);
|
|
-}
|
|
-
|
|
#ifdef TRACE
|
|
|
|
static inline int get_ue(GetBitContext *s, const char *file, const char *func,
|
|
@@ -614,134 +475,4 @@
|
|
|
|
#endif /* TRACE */
|
|
|
|
-/**
|
|
- * write unsigned exp golomb code. 2^16 - 2 at most
|
|
- */
|
|
-static inline void set_ue_golomb(PutBitContext *pb, int i)
|
|
-{
|
|
- av_assert2(i >= 0);
|
|
- av_assert2(i <= 0xFFFE);
|
|
-
|
|
- if (i < 256)
|
|
- put_bits(pb, ff_ue_golomb_len[i], i + 1);
|
|
- else {
|
|
- int e = av_log2(i + 1);
|
|
- put_bits(pb, 2 * e + 1, i + 1);
|
|
- }
|
|
-}
|
|
-
|
|
-/**
|
|
- * write unsigned exp golomb code. 2^32-2 at most.
|
|
- */
|
|
-static inline void set_ue_golomb_long(PutBitContext *pb, uint32_t i)
|
|
-{
|
|
- av_assert2(i <= (UINT32_MAX - 1));
|
|
-
|
|
- if (i < 256)
|
|
- put_bits(pb, ff_ue_golomb_len[i], i + 1);
|
|
- else {
|
|
- int e = av_log2(i + 1);
|
|
- put_bits64(pb, 2 * e + 1, i + 1);
|
|
- }
|
|
-}
|
|
-
|
|
-/**
|
|
- * write truncated unsigned exp golomb code.
|
|
- */
|
|
-static inline void set_te_golomb(PutBitContext *pb, int i, int range)
|
|
-{
|
|
- av_assert2(range >= 1);
|
|
- av_assert2(i <= range);
|
|
-
|
|
- if (range == 2)
|
|
- put_bits(pb, 1, i ^ 1);
|
|
- else
|
|
- set_ue_golomb(pb, i);
|
|
-}
|
|
-
|
|
-/**
|
|
- * write signed exp golomb code. 16 bits at most.
|
|
- */
|
|
-static inline void set_se_golomb(PutBitContext *pb, int i)
|
|
-{
|
|
- i = 2 * i - 1;
|
|
- if (i < 0)
|
|
- i ^= -1; //FIXME check if gcc does the right thing
|
|
- set_ue_golomb(pb, i);
|
|
-}
|
|
-
|
|
-/**
|
|
- * write unsigned golomb rice code (ffv1).
|
|
- */
|
|
-static inline void set_ur_golomb(PutBitContext *pb, int i, int k, int limit,
|
|
- int esc_len)
|
|
-{
|
|
- int e;
|
|
-
|
|
- av_assert2(i >= 0);
|
|
-
|
|
- e = i >> k;
|
|
- if (e < limit)
|
|
- put_bits(pb, e + k + 1, (1 << k) + av_mod_uintp2(i, k));
|
|
- else
|
|
- put_bits(pb, limit + esc_len, i - limit + 1);
|
|
-}
|
|
-
|
|
-/**
|
|
- * write unsigned golomb rice code (jpegls).
|
|
- */
|
|
-static inline void set_ur_golomb_jpegls(PutBitContext *pb, int i, int k,
|
|
- int limit, int esc_len)
|
|
-{
|
|
- int e;
|
|
-
|
|
- av_assert2(i >= 0);
|
|
-
|
|
- e = (i >> k) + 1;
|
|
- if (e < limit) {
|
|
- while (e > 31) {
|
|
- put_bits(pb, 31, 0);
|
|
- e -= 31;
|
|
- }
|
|
- put_bits(pb, e, 1);
|
|
- if (k)
|
|
- put_sbits(pb, k, i);
|
|
- } else {
|
|
- while (limit > 31) {
|
|
- put_bits(pb, 31, 0);
|
|
- limit -= 31;
|
|
- }
|
|
- put_bits(pb, limit, 1);
|
|
- put_bits(pb, esc_len, i - 1);
|
|
- }
|
|
-}
|
|
-
|
|
-/**
|
|
- * write signed golomb rice code (ffv1).
|
|
- */
|
|
-static inline void set_sr_golomb(PutBitContext *pb, int i, int k, int limit,
|
|
- int esc_len)
|
|
-{
|
|
- int v;
|
|
-
|
|
- v = -2 * i - 1;
|
|
- v ^= (v >> 31);
|
|
-
|
|
- set_ur_golomb(pb, v, k, limit, esc_len);
|
|
-}
|
|
-
|
|
-/**
|
|
- * write signed golomb rice code (flac).
|
|
- */
|
|
-static inline void set_sr_golomb_flac(PutBitContext *pb, int i, int k,
|
|
- int limit, int esc_len)
|
|
-{
|
|
- int v;
|
|
-
|
|
- v = -2 * i - 1;
|
|
- v ^= (v >> 31);
|
|
-
|
|
- set_ur_golomb_jpegls(pb, v, k, limit, esc_len);
|
|
-}
|
|
-
|
|
#endif /* AVCODEC_GOLOMB_H */
|
|
Index: libavcodec/get_bits.h
|
|
IDEA additional info:
|
|
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
|
<+>UTF-8
|
|
===================================================================
|
|
diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h
|
|
--- a/libavcodec/get_bits.h (revision a77521cd5d27e955b16e8097eecefc779ffdcb6d)
|
|
+++ b/libavcodec/get_bits.h (date 1647179363911)
|
|
@@ -29,13 +29,9 @@
|
|
|
|
#include <stdint.h>
|
|
|
|
-#include "libavutil/common.h"
|
|
-#include "libavutil/intreadwrite.h"
|
|
-#include "libavutil/log.h"
|
|
-#include "libavutil/avassert.h"
|
|
-#include "avcodec.h"
|
|
-#include "mathops.h"
|
|
-#include "vlc.h"
|
|
+#ifndef NEG_USR32
|
|
+# define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s)))
|
|
+#endif
|
|
|
|
/*
|
|
* Safe bitstream reading:
|
|
@@ -312,73 +308,13 @@
|
|
s->bits_left -= n;
|
|
}
|
|
#endif
|
|
-
|
|
-/**
|
|
- * Read MPEG-1 dc-style VLC (sign bit + mantissa with no MSB).
|
|
- * if MSB not set it is negative
|
|
- * @param n length in bits
|
|
- */
|
|
-static inline int get_xbits(GetBitContext *s, int n)
|
|
-{
|
|
-#if CACHED_BITSTREAM_READER
|
|
- int32_t cache = show_bits(s, 32);
|
|
- int sign = ~cache >> 31;
|
|
- skip_remaining(s, n);
|
|
-
|
|
- return ((((uint32_t)(sign ^ cache)) >> (32 - n)) ^ sign) - sign;
|
|
-#else
|
|
- register int sign;
|
|
- register int32_t cache;
|
|
- OPEN_READER(re, s);
|
|
- av_assert2(n>0 && n<=25);
|
|
- UPDATE_CACHE(re, s);
|
|
- cache = GET_CACHE(re, s);
|
|
- sign = ~cache >> 31;
|
|
- LAST_SKIP_BITS(re, s, n);
|
|
- CLOSE_READER(re, s);
|
|
- return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
|
|
-#endif
|
|
-}
|
|
-
|
|
-#if !CACHED_BITSTREAM_READER
|
|
-static inline int get_xbits_le(GetBitContext *s, int n)
|
|
-{
|
|
- register int sign;
|
|
- register int32_t cache;
|
|
- OPEN_READER(re, s);
|
|
- av_assert2(n>0 && n<=25);
|
|
- UPDATE_CACHE_LE(re, s);
|
|
- cache = GET_CACHE(re, s);
|
|
- sign = sign_extend(~cache, n) >> 31;
|
|
- LAST_SKIP_BITS(re, s, n);
|
|
- CLOSE_READER(re, s);
|
|
- return (zero_extend(sign ^ cache, n) ^ sign) - sign;
|
|
-}
|
|
-#endif
|
|
-
|
|
-static inline int get_sbits(GetBitContext *s, int n)
|
|
-{
|
|
- register int tmp;
|
|
-#if CACHED_BITSTREAM_READER
|
|
- av_assert2(n>0 && n<=25);
|
|
- tmp = sign_extend(get_bits(s, n), n);
|
|
-#else
|
|
- OPEN_READER(re, s);
|
|
- av_assert2(n>0 && n<=25);
|
|
- UPDATE_CACHE(re, s);
|
|
- tmp = SHOW_SBITS(re, s, n);
|
|
- LAST_SKIP_BITS(re, s, n);
|
|
- CLOSE_READER(re, s);
|
|
-#endif
|
|
- return tmp;
|
|
-}
|
|
|
|
/**
|
|
* Read 1-25 bits.
|
|
*/
|
|
static inline unsigned int get_bits(GetBitContext *s, int n)
|
|
{
|
|
- register unsigned int tmp;
|
|
+ unsigned int tmp;
|
|
#if CACHED_BITSTREAM_READER
|
|
|
|
av_assert2(n>0 && n<=32);
|
|
@@ -409,61 +345,6 @@
|
|
return tmp;
|
|
}
|
|
|
|
-/**
|
|
- * Read 0-25 bits.
|
|
- */
|
|
-static av_always_inline int get_bitsz(GetBitContext *s, int n)
|
|
-{
|
|
- return n ? get_bits(s, n) : 0;
|
|
-}
|
|
-
|
|
-static inline unsigned int get_bits_le(GetBitContext *s, int n)
|
|
-{
|
|
-#if CACHED_BITSTREAM_READER
|
|
- av_assert2(n>0 && n<=32);
|
|
- if (n > s->bits_left) {
|
|
- refill_32(s, 1);
|
|
- if (s->bits_left < 32)
|
|
- s->bits_left = n;
|
|
- }
|
|
-
|
|
- return get_val(s, n, 1);
|
|
-#else
|
|
- register int tmp;
|
|
- OPEN_READER(re, s);
|
|
- av_assert2(n>0 && n<=25);
|
|
- UPDATE_CACHE_LE(re, s);
|
|
- tmp = SHOW_UBITS_LE(re, s, n);
|
|
- LAST_SKIP_BITS(re, s, n);
|
|
- CLOSE_READER(re, s);
|
|
- return tmp;
|
|
-#endif
|
|
-}
|
|
-
|
|
-/**
|
|
- * Show 1-25 bits.
|
|
- */
|
|
-static inline unsigned int show_bits(GetBitContext *s, int n)
|
|
-{
|
|
- register unsigned int tmp;
|
|
-#if CACHED_BITSTREAM_READER
|
|
- if (n > s->bits_left)
|
|
-#ifdef BITSTREAM_READER_LE
|
|
- refill_32(s, 1);
|
|
-#else
|
|
- refill_32(s, 0);
|
|
-#endif
|
|
-
|
|
- tmp = show_val(s, n);
|
|
-#else
|
|
- OPEN_READER_NOSIZE(re, s);
|
|
- av_assert2(n>0 && n<=25);
|
|
- UPDATE_CACHE(re, s);
|
|
- tmp = SHOW_UBITS(re, s, n);
|
|
-#endif
|
|
- return tmp;
|
|
-}
|
|
-
|
|
static inline void skip_bits(GetBitContext *s, int n)
|
|
{
|
|
#if CACHED_BITSTREAM_READER
|
|
@@ -530,11 +411,6 @@
|
|
#endif
|
|
}
|
|
|
|
-static inline unsigned int show_bits1(GetBitContext *s)
|
|
-{
|
|
- return show_bits(s, 1);
|
|
-}
|
|
-
|
|
static inline void skip_bits1(GetBitContext *s)
|
|
{
|
|
skip_bits(s, 1);
|
|
@@ -584,31 +460,6 @@
|
|
}
|
|
}
|
|
|
|
-/**
|
|
- * Read 0-32 bits as a signed integer.
|
|
- */
|
|
-static inline int get_sbits_long(GetBitContext *s, int n)
|
|
-{
|
|
- // sign_extend(x, 0) is undefined
|
|
- if (!n)
|
|
- return 0;
|
|
-
|
|
- return sign_extend(get_bits_long(s, n), n);
|
|
-}
|
|
-
|
|
-/**
|
|
- * Show 0-32 bits.
|
|
- */
|
|
-static inline unsigned int show_bits_long(GetBitContext *s, int n)
|
|
-{
|
|
- if (n <= MIN_CACHE_BITS) {
|
|
- return show_bits(s, n);
|
|
- } else {
|
|
- GetBitContext gb = *s;
|
|
- return get_bits_long(&gb, n);
|
|
- }
|
|
-}
|
|
-
|
|
static inline int check_marker(void *logctx, GetBitContext *s, const char *msg)
|
|
{
|
|
int bit = get_bits1(s);
|
|
@@ -772,62 +623,6 @@
|
|
SKIP_BITS(name, gb, n); \
|
|
} while (0)
|
|
|
|
-/* Return the LUT element for the given bitstream configuration. */
|
|
-static inline int set_idx(GetBitContext *s, int code, int *n, int *nb_bits,
|
|
- VLC_TYPE (*table)[2])
|
|
-{
|
|
- unsigned idx;
|
|
-
|
|
- *nb_bits = -*n;
|
|
- idx = show_bits(s, *nb_bits) + code;
|
|
- *n = table[idx][1];
|
|
-
|
|
- return table[idx][0];
|
|
-}
|
|
-
|
|
-/**
|
|
- * Parse a vlc code.
|
|
- * @param bits is the number of bits which will be read at once, must be
|
|
- * identical to nb_bits in init_vlc()
|
|
- * @param max_depth is the number of times bits bits must be read to completely
|
|
- * read the longest vlc code
|
|
- * = (max_vlc_length + bits - 1) / bits
|
|
- * @returns the code parsed or -1 if no vlc matches
|
|
- */
|
|
-static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2],
|
|
- int bits, int max_depth)
|
|
-{
|
|
-#if CACHED_BITSTREAM_READER
|
|
- int nb_bits;
|
|
- unsigned idx = show_bits(s, bits);
|
|
- int code = table[idx][0];
|
|
- int n = table[idx][1];
|
|
-
|
|
- if (max_depth > 1 && n < 0) {
|
|
- skip_remaining(s, bits);
|
|
- code = set_idx(s, code, &n, &nb_bits, table);
|
|
- if (max_depth > 2 && n < 0) {
|
|
- skip_remaining(s, nb_bits);
|
|
- code = set_idx(s, code, &n, &nb_bits, table);
|
|
- }
|
|
- }
|
|
- skip_remaining(s, n);
|
|
-
|
|
- return code;
|
|
-#else
|
|
- int code;
|
|
-
|
|
- OPEN_READER(re, s);
|
|
- UPDATE_CACHE(re, s);
|
|
-
|
|
- GET_VLC(code, re, s, table, bits, max_depth);
|
|
-
|
|
- CLOSE_READER(re, s);
|
|
-
|
|
- return code;
|
|
-#endif
|
|
-}
|
|
-
|
|
static inline int decode012(GetBitContext *gb)
|
|
{
|
|
int n;
|
|
@@ -865,4 +660,14 @@
|
|
return 0;
|
|
}
|
|
|
|
+static inline unsigned int show_bits_long(GetBitContext *s, int n)
|
|
+{
|
|
+ if (n <= MIN_CACHE_BITS) {
|
|
+ return show_bits(s, n);
|
|
+ } else {
|
|
+ GetBitContext gb = *s;
|
|
+ return get_bits_long(&gb, n);
|
|
+ }
|
|
+}
|
|
+
|
|
#endif /* AVCODEC_GET_BITS_H */
|