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) {
110 to->item_idx[
to->nitems] =
to->item_idx[
to->nitems - 1];
112 (j + 1 >=
from->nitems ||
114 from->probability[j] +
from->probability[j + 1])) {
115 to->items[
to->item_idx[
to->nitems]++] = prob_table[
i].
value;
116 to->probability[
to->nitems - 1] = prob_table[
i].
prob;
119 for (k =
from->item_idx[j]; k < from->item_idx[j + 2]; k++) {
120 to->items[
to->item_idx[
to->nitems]++] =
from->items[k];
122 to->probability[
to->nitems - 1] =
123 from->probability[j] +
from->probability[j + 1];
134 nbits[
from->items[
i]]++;
139 for (
i = 0;
i < 256;
i++) {
141 distincts[j].
code =
i;
142 distincts[j].
length = nbits[
i];
150 memset(
s->val_count, 0,
sizeof(
s->val_count));
169 for (
i = 0;
i < 256;
i++) {
170 if (
s->val_count[
i]) nval++;
175 for (
i = 0;
i < 256;
i++) {
176 if (
s->val_count[
i]) {
178 val_counts[j].
prob =
s->val_count[
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++) {
static double val(void *priv, double ch)
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
common internal and external API header
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.
static int compare_by_prob(const void *a, const void *b)
Comparison function for two PTables by prob.
void ff_mjpeg_encode_huffman_init(MJpegEncHuffmanContext *s)
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.
static int compare_by_length(const void *a, const void *b)
Comparison function for two HuffTables by length.
Huffman table generation for MJPEG encoder.
#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...
Used to store optimal huffman encoding results.
int length
length of the encoding
int code
code is the input value
Used to assign a occurrence count or "probability" to an input value.
int64_t prob
number of occurences of this value in input
Used to store intermediate lists in the package merge algorithm.