FFmpeg
|
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/common.h"
#include "libavutil/lfg.h"
#include "elbg.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 | ELBGContext |
ELBG internal data. More... | |
Macros | |
#define | DELTA_ERR_MAX 0.1 |
Precision of the ELBG algorithm (as percentage error) More... | |
#define | BIG_PRIME 433494437LL |
#define | ALLOCATE_IF_NECESSARY(field, new_elements, multiplicator) |
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 (ELBGContext *elbg, int *centroid, cell *cells) |
static int | get_closest_codebook (ELBGContext *elbg, int index) |
static int | get_high_utility_cell (ELBGContext *elbg) |
static int | simple_lbg (ELBGContext *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 (ELBGContext *elbg, int huc, int *newcentroid_i, int *newcentroid_p) |
static void | shift_codebook (ELBGContext *elbg, int *indexes, int *newcentroid[3]) |
Add the points in the low utility cell to its closest cell. More... | |
static void | evaluate_utility_inc (ELBGContext *elbg) |
static void | update_utility_and_n_cb (ELBGContext *elbg, int idx, int newutility) |
static void | try_shift_candidate (ELBGContext *elbg, int idx[3]) |
Evaluate if a shift lower the error. More... | |
static void | do_shiftings (ELBGContext *elbg) |
Implementation of the ELBG block. More... | |
static void | do_elbg (ELBGContext *av_restrict elbg, int *points, int numpoints, int max_steps) |
static void | init_elbg (ELBGContext *av_restrict elbg, int *points, int *temp_points, int numpoints, int max_steps) |
Initialize the codebook vector for the elbg algorithm. More... | |
int | avpriv_elbg_do (ELBGContext **elbgp, int *points, int dim, int numpoints, int *codebook, int num_cb, int max_steps, int *closest_cb, AVLFG *rand_state, uintptr_t flags) |
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... | |
av_cold void | avpriv_elbg_free (ELBGContext **elbgp) |
Free an ELBGContext and reset the pointer to it. More... | |
#define DELTA_ERR_MAX 0.1 |
#define ALLOCATE_IF_NECESSARY | ( | field, | |
new_elements, | |||
multiplicator | |||
) |
Definition at line 74 of file elbg.c.
Referenced by do_elbg(), eval_error_cell(), get_closest_codebook(), shift_codebook(), and simple_lbg().
Definition at line 86 of file elbg.c.
Referenced by do_elbg(), simple_lbg(), and try_shift_candidate().
|
static |
Definition at line 97 of file elbg.c.
Referenced by try_shift_candidate().
|
static |
Definition at line 106 of file elbg.c.
Referenced by do_shiftings().
|
static |
Definition at line 121 of file elbg.c.
Referenced by do_shiftings().
|
static |
Implementation of the simple LBG algorithm for just two codebooks.
Definition at line 146 of file elbg.c.
Referenced by try_shift_candidate().
|
static |
Definition at line 187 of file elbg.c.
Referenced by try_shift_candidate().
|
static |
Add the points in the low utility cell to its closest cell.
Split the high utility cell, putting the separated 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 223 of file elbg.c.
Referenced by try_shift_candidate().
|
static |
Definition at line 251 of file elbg.c.
Referenced by do_shiftings(), and try_shift_candidate().
|
static |
Definition at line 263 of file elbg.c.
Referenced by try_shift_candidate().
|
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 279 of file elbg.c.
Referenced by do_shiftings().
|
static |
|
static |
Definition at line 349 of file elbg.c.
Referenced by avpriv_elbg_do(), and init_elbg().
|
static |
Initialize the codebook vector for the elbg algorithm.
If numpoints <= 24 * num_cb this function fills codebook with random numbers. If not, it calls do_elbg for a (smaller) random sample of the points in points.
Definition at line 422 of file elbg.c.
Referenced by avpriv_elbg_do().
int avpriv_elbg_do | ( | struct ELBGContext ** | ctx, |
int * | points, | ||
int | dim, | ||
int | numpoints, | ||
int * | codebook, | ||
int | num_cb, | ||
int | num_steps, | ||
int * | closest_cb, | ||
AVLFG * | rand_state, | ||
uintptr_t | flags | ||
) |
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 .
ctx | A pointer to a pointer to an already allocated ELBGContext or a pointer to NULL. In the latter case, this function will allocate an ELBGContext and put a pointer to it in *ctx . |
points | Input points. |
dim | Dimension of the points. |
numpoints | Num of points in **points. |
codebook | Pointer to the output codebook. Must be allocated. |
num_cb | 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(). |
flags | Currently unused; must be set to 0. |
Definition at line 446 of file elbg.c.
Referenced by a64multi_encode_frame(), encode_frame(), filter_frame(), generate_codebook(), and quantize().
av_cold void avpriv_elbg_free | ( | ELBGContext ** | elbgp | ) |
Free an ELBGContext and reset the pointer to it.
Definition at line 499 of file elbg.c.
Referenced by a64multi_close_encoder(), cinepak_encode_end(), encode_end(), roq_encode_end(), and uninit().