FFmpeg
Data Structures | Functions
mjpegenc_huffman.h File Reference
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  MJpegEncHuffmanContext
 
struct  PTable
 Used to assign a occurrence count or "probability" to an input value. More...
 
struct  PackageMergerList
 Used to store intermediate lists in the package merge algorithm. More...
 
struct  HuffTable
 Used to store optimal huffman encoding results. More...
 

Functions

void ff_mjpeg_encode_huffman_init (MJpegEncHuffmanContext *s)
 
static void ff_mjpeg_encode_huffman_increment (MJpegEncHuffmanContext *s, uint8_t val)
 
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. More...
 
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. More...
 

Detailed Description

Huffman table generation for MJPEG encoder.

Definition in file mjpegenc_huffman.h.

Function Documentation

◆ ff_mjpeg_encode_huffman_init()

void ff_mjpeg_encode_huffman_init ( MJpegEncHuffmanContext s)

Definition at line 148 of file mjpegenc_huffman.c.

◆ ff_mjpeg_encode_huffman_increment()

static void ff_mjpeg_encode_huffman_increment ( MJpegEncHuffmanContext s,
uint8_t  val 
)
inlinestatic

Definition at line 38 of file mjpegenc_huffman.h.

◆ ff_mjpeg_encode_huffman_close()

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.

Parameters
sinput to encode
bitsoutput array where the ith character represents how many input values have i length encoding
valoutput array of input values sorted by their encoded length
max_nvalmaximum number of distinct input values

Definition at line 161 of file mjpegenc_huffman.c.

◆ ff_mjpegenc_huffman_compute_bits()

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.

Uses package merge algorithm as follows:

  1. start with an empty list, lets call it list(0), set i = 0
  2. add 1 entry to list(i) for each symbol we have and give each a score equal to the probability of the respective symbol
  3. merge the 2 symbols of least score and put them in list(i+1), and remove them from list(i). The new score will be the sum of the 2 scores
  4. if there is more than 1 symbol left in the current list(i), then goto 3
  5. i++
  6. if i < 16 goto 2
  7. select the n-1 elements in the last list with the lowest score (n = the number of symbols)
  8. the length of the huffman code for symbol s will be equal to the number of times the symbol occurs in the select elements Go to guru.multimedia.cx/small-tasks-for-ffmpeg/ for more details

All probabilities should be positive integers. The output is sorted by code, not by length.

Parameters
prob_tableinput array of a PTable for each distinct input value
distinctsoutput array of a HuffTable that will be populated by this function
sizesize of the prob_table array
max_lengthmax length of an encoding

Definition at line 80 of file mjpegenc_huffman.c.

Referenced by check_lengths(), ff_mjpeg_encode_huffman_close(), and main().