#include <string.h>
#include "libavutil/lfg.h"
#include "elbg.h"
#include "avcodec.h"
Go to the source code of this file.
Data Structures | |
struct | cell_s |
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... | |
Defines | |
#define | DELTA_ERR_MAX 0.1 |
Precision of the ELBG algorithm (as percentual error). | |
#define | BIG_PRIME 433494437LL |
Typedefs | |
typedef struct cell_s | cell |
In the ELBG jargon, a cell is the set of points that are closest to a codebook entry. | |
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. | |
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. | |
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. | |
static void | do_shiftings (elbg_data *elbg) |
Implementation of the ELBG block. | |
void | ff_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. | |
void | ff_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 . |
Definition in file elbg.c.
#define BIG_PRIME 433494437LL |
#define DELTA_ERR_MAX 0.1 |
Precision of the ELBG algorithm (as percentual error).
Definition at line 32 of file elbg.c.
Referenced by ff_do_elbg().
In the ELBG jargon, a cell is the set of points that are closest to a codebook entry.
Not to be confused with a RoQ Video cell.
static int distance_limited | ( | int * | a, | |
int * | b, | |||
int | dim, | |||
int | limit | |||
) | [inline, static] |
Definition at line 59 of file elbg.c.
Referenced by eval_error_cell(), ff_do_elbg(), get_closest_codebook(), shift_codebook(), and simple_lbg().
static void do_shiftings | ( | elbg_data * | elbg | ) | [static] |
Implementation of the ELBG block.
Definition at line 304 of file elbg.c.
Referenced by ff_do_elbg().
static void evaluate_utility_inc | ( | elbg_data * | elbg | ) | [static] |
void ff_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 352 of file elbg.c.
Referenced by a64multi_encode_frame(), encode_frame(), ff_init_elbg(), and generate_codebook().
void ff_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 ff_do_elbg for a (smaller) random sample of the points in **points. Get the same parameters as ff_do_elbg.
Definition at line 325 of file elbg.c.
Referenced by a64multi_encode_frame(), encode_frame(), ff_init_elbg(), and generate_codebook().
static int get_closest_codebook | ( | elbg_data * | elbg, | |
int | index | |||
) | [static] |
static int get_high_utility_cell | ( | elbg_data * | elbg | ) | [static] |
static void get_new_centroids | ( | elbg_data * | elbg, | |
int | huc, | |||
int * | newcentroid_i, | |||
int * | newcentroid_p | |||
) | [static] |
static void shift_codebook | ( | elbg_data * | elbg, | |
int * | indexes, | |||
int * | newcentroid[3] | |||
) | [static] |
Add the points in the low utility cell to its closest cell.
Split the high utility cell, putting the separed 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 198 of file elbg.c.
Referenced by try_shift_candidate().
static int simple_lbg | ( | elbg_data * | elbg, | |
int | dim, | |||
int * | centroid[3], | |||
int | newutility[3], | |||
int * | points, | |||
cell * | cells | |||
) | [static] |
Implementation of the simple LBG algorithm for just two codebooks.
Definition at line 121 of file elbg.c.
Referenced by try_shift_candidate().
static void try_shift_candidate | ( | elbg_data * | elbg, | |
int | idx[3] | |||
) | [static] |
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 254 of file elbg.c.
Referenced by do_shiftings().
static void update_utility_and_n_cb | ( | elbg_data * | elbg, | |
int | idx, | |||
int | newutility | |||
) | [static] |
static void vect_division | ( | int * | res, | |
int * | vect, | |||
int | div, | |||
int | dim | |||
) | [inline, static] |
Definition at line 71 of file elbg.c.
Referenced by ff_do_elbg(), simple_lbg(), and try_shift_candidate().