FFmpeg
|
Codebook Generator using the ELBG algorithm. More...
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/common.h"
#include "libavutil/lfg.h"
#include "elbg.h"
#include "avcodec.h"
Go to the source code of this file.
Data Structures | |
struct | cell |
In the ELBG jargon, a cell is the set of points that are closest to a codebook entry. More... | |
struct | elbg_data |
ELBG internal data. More... | |
Macros | |
#define | DELTA_ERR_MAX 0.1 |
Precision of the ELBG algorithm (as percentual error) More... | |
#define | BIG_PRIME 433494437LL |
Functions | |
static int | distance_limited (int *a, int *b, int dim, int limit) |
static void | vect_division (int *res, int *vect, int div, int dim) |
static int | eval_error_cell (elbg_data *elbg, int *centroid, cell *cells) |
static int | get_closest_codebook (elbg_data *elbg, int index) |
static int | get_high_utility_cell (elbg_data *elbg) |
static int | simple_lbg (elbg_data *elbg, int dim, int *centroid[3], int newutility[3], int *points, cell *cells) |
Implementation of the simple LBG algorithm for just two codebooks. More... | |
static void | get_new_centroids (elbg_data *elbg, int huc, int *newcentroid_i, int *newcentroid_p) |
static void | shift_codebook (elbg_data *elbg, int *indexes, int *newcentroid[3]) |
Add the points in the low utility cell to its closest cell. More... | |
static void | evaluate_utility_inc (elbg_data *elbg) |
static void | update_utility_and_n_cb (elbg_data *elbg, int idx, int newutility) |
static void | try_shift_candidate (elbg_data *elbg, int idx[3]) |
Evaluate if a shift lower the error. More... | |
static void | do_shiftings (elbg_data *elbg) |
Implementation of the ELBG block. More... | |
int | avpriv_init_elbg (int *points, int dim, int numpoints, int *codebook, int numCB, int max_steps, int *closest_cb, AVLFG *rand_state) |
Initialize the **codebook vector for the elbg algorithm. More... | |
int | avpriv_do_elbg (int *points, int dim, int numpoints, int *codebook, int numCB, int max_steps, int *closest_cb, AVLFG *rand_state) |
Implementation of the Enhanced LBG Algorithm Based on the paper "Neural Networks 14:1219-1237" that can be found in http://citeseer.ist.psu.edu/patan01enhanced.html . More... | |
Codebook Generator using the ELBG algorithm.
Definition in file elbg.c.
#define DELTA_ERR_MAX 0.1 |
Precision of the ELBG algorithm (as percentual error)
Definition at line 34 of file elbg.c.
Referenced by avpriv_do_elbg().
#define BIG_PRIME 433494437LL |
Definition at line 335 of file elbg.c.
Referenced by avpriv_init_elbg().
|
inlinestatic |
Definition at line 61 of file elbg.c.
Referenced by avpriv_do_elbg(), eval_error_cell(), get_closest_codebook(), shift_codebook(), and simple_lbg().
|
inlinestatic |
Definition at line 73 of file elbg.c.
Referenced by avpriv_do_elbg(), simple_lbg(), and try_shift_candidate().
Definition at line 84 of file elbg.c.
Referenced by try_shift_candidate().
|
static |
Definition at line 93 of file elbg.c.
Referenced by do_shiftings().
|
static |
Definition at line 107 of file elbg.c.
Referenced by do_shiftings().
|
static |
Implementation of the simple LBG algorithm for just two codebooks.
Definition at line 132 of file elbg.c.
Referenced by try_shift_candidate().
|
static |
Definition at line 173 of file elbg.c.
Referenced by try_shift_candidate().
Add the points in the low utility cell to its closest cell.
Split the high utility cell, putting the separate points in the (now empty) low utility cell.
elbg | Internal elbg data |
indexes | {luc, huc, cluc} |
newcentroid | A vector with the position of the new centroids |
Definition at line 209 of file elbg.c.
Referenced by try_shift_candidate().
Definition at line 237 of file elbg.c.
Referenced by do_shiftings(), and try_shift_candidate().
Definition at line 250 of file elbg.c.
Referenced by try_shift_candidate().
Evaluate if a shift lower the error.
If it does, call shift_codebooks and update elbg->error, elbg->utility and elbg->nearest_cb.
elbg | Internal elbg data |
idx | {luc (low utility cell, huc (high utility cell), cluc (closest cell to low utility cell)} |
Definition at line 266 of file elbg.c.
Referenced by do_shiftings().
Implementation of the ELBG block.
Definition at line 316 of file elbg.c.
Referenced by avpriv_do_elbg().
int avpriv_init_elbg | ( | int * | points, |
int | dim, | ||
int | numpoints, | ||
int * | codebook, | ||
int | numCB, | ||
int | num_steps, | ||
int * | closest_cb, | ||
AVLFG * | rand_state | ||
) |
Initialize the **codebook vector for the elbg algorithm.
If you have already a codebook and you want to refine it, you shouldn't call this function. If numpoints < 8*numCB this function fills **codebook with random numbers. If not, it calls avpriv_do_elbg for a (smaller) random sample of the points in **points. Get the same parameters as avpriv_do_elbg.
Definition at line 337 of file elbg.c.
Referenced by a64multi_encode_frame(), avpriv_init_elbg(), encode_frame(), filter_frame(), generate_codebook(), and quantize().
int avpriv_do_elbg | ( | int * | points, |
int | dim, | ||
int | numpoints, | ||
int * | codebook, | ||
int | numCB, | ||
int | num_steps, | ||
int * | closest_cb, | ||
AVLFG * | rand_state | ||
) |
Implementation of the Enhanced LBG Algorithm Based on the paper "Neural Networks 14:1219-1237" that can be found in http://citeseer.ist.psu.edu/patan01enhanced.html .
points | Input points. |
dim | Dimension of the points. |
numpoints | Num of points in **points. |
codebook | Pointer to the output codebook. Must be allocated. |
numCB | Number of points in the codebook. |
num_steps | The maximum number of steps. One step is already a good compromise between time and quality. |
closest_cb | Return the closest codebook to each point. Must be allocated. |
rand_state | A random number generator state. Should be already initialized by av_lfg_init(). |
Definition at line 371 of file elbg.c.
Referenced by a64multi_encode_frame(), avpriv_init_elbg(), encode_frame(), filter_frame(), generate_codebook(), and quantize().