Go to the documentation of this file.
51 0, 0, 0, 0, 1, 1, 1, 1,
52 2, 2, 2, 2, 3, 3, 3, 3,
53 4, 4, 5, 5, 6, 6, 7, 7,
54 8, 9,10,11,12,13,14,15,
55 16,17,18,19,20,21,22,23,
71 int words = length >> 4;
72 int bits = length & 15;
81 for (
i = 0;
i < words;
i++)
96 #define GET_DATA(v, table, i, wrap, size) \
98 const uint8_t *ptr = (const uint8_t *)table + i * wrap; \
101 v = *(const uint8_t *)ptr; \
104 v = *(const uint16_t *)ptr; \
108 av_assert1(size == 4); \
109 v = *(const uint32_t *)ptr; \
135 #define LOCALBUF_ELEMS 1500 // the maximum currently needed is 1296 by rv34
150 (*vlc)->
bits = nb_bits;
153 *localvlc = *vlc_arg;
157 (*vlc)->table =
NULL;
158 (*vlc)->table_allocated = 0;
159 (*vlc)->table_size = 0;
173 return (sa->
code >> 1) - (sb->code >> 1);
193 int i, j, k, n, nb, inc;
197 if (table_nb_bits > 30)
199 table_size = 1 << table_nb_bits;
201 ff_dlog(
NULL,
"new table index=%d size=%d\n", table_index, table_size);
207 for (
i = 0;
i < nb_codes;
i++) {
212 if (n <= table_nb_bits) {
214 j =
code >> (32 - table_nb_bits);
215 nb = 1 << (table_nb_bits - n);
221 for (k = 0; k < nb; k++) {
223 int oldsym =
table[j][0];
225 if ((
bits || oldsym) && (
bits != n || oldsym != symbol)) {
230 table[j][0] = symbol;
240 for (k =
i+1; k < nb_codes; k++) {
241 n = codes[k].
bits - table_nb_bits;
248 codes[k].
code =
code << table_nb_bits;
249 subtable_bits =
FFMAX(subtable_bits, n);
251 subtable_bits =
FFMIN(subtable_bits, table_nb_bits);
253 table[j][1] = -subtable_bits;
255 j, codes[
i].
bits + table_nb_bits);
270 for (
i = 0;
i < table_size;
i++) {
290 if (codes != localbuf)
324 const void *
bits,
int bits_wrap,
int bits_size,
325 const void *codes,
int codes_wrap,
int codes_size,
326 const void *symbols,
int symbols_wrap,
int symbols_size,
340 #define COPY(condition)\
341 for (i = 0; i < nb_codes; i++) { \
343 GET_DATA(len, bits, i, bits_wrap, bits_size); \
346 if (len > 3*nb_bits || len > 32) { \
347 av_log(NULL, AV_LOG_ERROR, "Too long VLC (%u) in init_vlc\n", len);\
348 if (buf != localbuf) \
350 return AVERROR(EINVAL); \
353 GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \
354 if (buf[j].code >= (1LL<<buf[j].bits)) { \
355 av_log(NULL, AV_LOG_ERROR, "Invalid code %"PRIx32" for %d in " \
356 "init_vlc\n", buf[j].code, i); \
357 if (buf != localbuf) \
359 return AVERROR(EINVAL); \
361 if (flags & INIT_VLC_INPUT_LE) \
362 buf[j].code = bitswap_32(buf[j].code); \
364 buf[j].code <<= 32 - buf[j].bits; \
366 GET_DATA(buf[j].symbol, symbols, i, symbols_wrap, symbols_size) \
378 flags, vlc_arg, localbuf);
382 const int8_t *lens,
int lens_wrap,
383 const void *symbols,
int symbols_wrap,
int symbols_size,
389 int ret, j, len_max =
FFMIN(32, 3 * nb_bits);
397 for (
int i = 0;
i < nb_codes;
i++, lens += lens_wrap) {
404 GET_DATA(sym, symbols,
i, symbols_wrap, symbols_size)
409 }
else if (
len < 0) {
413 if (
len > len_max ||
code & ((1
U << (32 -
len)) - 1)) {
418 if (
code > UINT32_MAX + 1ULL) {
424 flags, vlc_arg, localbuf);
static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, VLCcode *codes, int flags)
Build VLC decoding tables suitable for use with get_vlc().
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static av_always_inline uint32_t bitswap_32(uint32_t x)
#define INIT_VLC_OUTPUT_LE
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static const uint16_t table[]
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
static int put_bits_left(PutBitContext *s)
int ff_init_vlc_from_lengths(VLC *vlc_arg, int nb_bits, int nb_codes, const int8_t *lens, int lens_wrap, const void *symbols, int symbols_wrap, int symbols_size, int offset, int flags, void *logctx)
Build VLC decoding tables suitable for use with get_vlc2()
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void ff_put_string(PutBitContext *pb, const char *string, int terminate_string)
Put the string string in the bitstream.
void ff_free_vlc(VLC *vlc)
#define av_realloc_f(p, o, n)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
const uint8_t ff_log2_run[41]
static int vlc_common_end(VLC *vlc, int nb_bits, int nb_codes, VLCcode *codes, int flags, VLC *vlc_arg, VLCcode localbuf[LOCALBUF_ELEMS])
#define INIT_VLC_USE_NEW_STATIC
int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
static int vlc_common_init(VLC *vlc_arg, int nb_bits, int nb_codes, VLC **vlc, VLC *localvlc, VLCcode **buf, int flags)
#define GET_DATA(v, table, i, wrap, size)
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
static const unsigned code_prefix[]
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
static int put_bits_count(PutBitContext *s)
#define AV_QSORT(p, num, type, cmp)
Quicksort This sort is fast, and fully inplace but not stable and it is possible to construct input t...
#define av_malloc_array(a, b)
uint32_t code
codeword, with the first bit-to-be-read in the msb (even if intended for a little-endian bitstream re...
static int alloc_table(VLC *vlc, int size, int use_static)
#define INIT_VLC_STATIC_OVERLONG
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
static void skip_put_bytes(PutBitContext *s, int n)
Skip the given number of bytes.
#define avpriv_request_sample(...)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static int compare_vlcspec(const void *a, const void *b)
#define flags(name, subs,...)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
VLC_TYPE(* table)[2]
code, bits
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16