sws: share xyzgamma tables.
They are currently always constant and thus theres no point to store them in the context. This makes the context 16kb smaller Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
4818388e6c
commit
2514b80045
@ -478,8 +478,8 @@ typedef struct SwsContext {
|
||||
/* pre defined color-spaces gamma */
|
||||
#define XYZ_GAMMA (2.6f)
|
||||
#define RGB_GAMMA (2.2f)
|
||||
int16_t xyzgamma[4096];
|
||||
int16_t rgbgamma[4096];
|
||||
int16_t *xyzgamma;
|
||||
int16_t *rgbgamma;
|
||||
int16_t xyz2rgb_matrix[3][4];
|
||||
|
||||
/* function pointers for swScale() */
|
||||
|
@ -904,13 +904,20 @@ static void fill_xyztables(struct SwsContext *c)
|
||||
{13270, -6295, -2041},
|
||||
{-3969, 7682, 170},
|
||||
{ 228, -835, 4329} };
|
||||
static int16_t xyzgamma_tab[4096], rgbgamma_tab[4096];
|
||||
|
||||
memcpy(c->xyz2rgb_matrix, xyz2rgb_matrix, sizeof(c->xyz2rgb_matrix));
|
||||
c->xyzgamma = xyzgamma_tab;
|
||||
c->rgbgamma = rgbgamma_tab;
|
||||
|
||||
if (rgbgamma_tab[4095])
|
||||
return;
|
||||
|
||||
/* set gamma vectors */
|
||||
for (i = 0; i < 4096; i++) {
|
||||
c->xyzgamma[i] = lrint(pow(i / 4095.0, xyzgamma) * 4095.0);
|
||||
c->rgbgamma[i] = lrint(pow(i / 4095.0, rgbgamma) * 4095.0);
|
||||
xyzgamma_tab[i] = lrint(pow(i / 4095.0, xyzgamma) * 4095.0);
|
||||
rgbgamma_tab[i] = lrint(pow(i / 4095.0, rgbgamma) * 4095.0);
|
||||
}
|
||||
memcpy(c->xyz2rgb_matrix, xyz2rgb_matrix, sizeof(c->xyz2rgb_matrix));
|
||||
}
|
||||
|
||||
int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
|
||||
|
Loading…
Reference in New Issue
Block a user