95 from->item_idx[0] = 0;
98 for (times = 0; times <= max_length; times++) {
105 if (times < max_length) {
108 while (i < size || j + 1 < from->nitems) {
112 (j + 1 >= from->nitems ||
114 from->probability[j] + from->probability[j + 1])) {
119 for (k = from->item_idx[j]; k < from->item_idx[j + 2]; k++) {
123 from->probability[j] + from->probability[j + 1];
132 min = (size - 1 < from->nitems) ? size - 1 : from->nitems;
133 for (i = 0; i < from->item_idx[
min]; i++) {
134 nbits[from->items[i]]++;
139 for (i = 0; i < 256; i++) {
141 distincts[j].
code = i;
142 distincts[j].
length = nbits[i];
169 for (i = 0; i < 256; i++) {
175 for (i = 0; i < 256; i++) {
177 val_counts[j].
value = i;
182 val_counts[j].
value = 256;
183 val_counts[j].
prob = 0;
187 memset(bits, 0,
sizeof(bits[0]) * 17);
188 for (i = 0; i < nval; i++) {
189 val[i] = distincts[i].
code;
190 bits[distincts[i].
length]++;
const char const char void * val
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void ff_mjpeg_encode_huffman_close(MJpegEncHuffmanContext *s, uint8_t bits[17], uint8_t val[], int max_nval)
Produces a Huffman encoding with a given input.
int nitems
number of items in the list and probability ex. 4
simple assert() macros that are a bit more flexible than ISO C assert().
int64_t prob
number of occurences of this value in input
int length
length of the encoding
int item_idx[515]
index range for each item in items 0, 2, 5, 9, 13
int code
code is the input value
Used to store intermediate lists in the package merge algorithm.
void ff_mjpegenc_huffman_compute_bits(PTable *prob_table, HuffTable *distincts, int size, int max_length)
Computes the length of the Huffman encoding for each distinct input value.
Used to store optimal huffman encoding results.
Used to assign a occurrence count or "probability" to an input value.
Huffman table generation for MJPEG encoder.
int probability[514]
probability of each item 3, 8, 18, 46
static int compare_by_prob(const void *a, const void *b)
Comparison function for two PTables by prob.
common internal and external API header
static int compare_by_length(const void *a, const void *b)
Comparison function for two HuffTables by length.
int items[257 *16]
chain of all individual values that make up items A, B, A, B, C, A, B, C, D, C, D, D, E
void ff_mjpeg_encode_huffman_init(MJpegEncHuffmanContext *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...