pixman_bool_t
_pixman_multiply_overflows_size (size_t a, size_t b)
{ return a >= SIZE_MAX / b;
}
pixman_bool_t
_pixman_multiply_overflows_int (unsignedint a, unsignedint b)
{ return a >= INT32_MAX / b;
}
pixman_bool_t
_pixman_addition_overflows_int (unsignedint a, unsignedint b)
{ return a > INT32_MAX - b;
}
void *
pixman_malloc_ab_plus_c (unsignedint a, unsignedint b, unsignedint c)
{ if (!b || a >= INT32_MAX / b || (a * b) > INT32_MAX - c) return NULL;
return malloc (a * b + c);
}
void *
pixman_malloc_ab (unsignedint a, unsignedint b)
{ if (a >= INT32_MAX / b) return NULL;
return malloc (a * b);
}
void *
pixman_malloc_abc (unsignedint a, unsignedint b, unsignedint c)
{ if (a >= INT32_MAX / b) return NULL; elseif (a * b >= INT32_MAX / c) return NULL; else return malloc (a * b * c);
}
static force_inline float
unorm_to_float (uint16_t u, int n_bits)
{
uint32_t m = ((1 << n_bits) - 1);
return (u & m) * (1.f / (float)m);
}
/* * This function expands images from a8r8g8b8 to argb_t. To preserve * precision, it needs to know from which source format the a8r8g8b8 pixels * originally came. * * For example, if the source was PIXMAN_x1r5g5b5 and the red component * contained bits 12345, then the 8-bit value is 12345123. To correctly * expand this to floating point, it should be 12345 / 31.0 and not * 12345123 / 255.0.
*/ void
pixman_expand_to_float (argb_t *dst, const uint32_t *src,
pixman_format_code_t format, int width)
{ staticconstfloat multipliers[16] = {
0.0f,
1.0f / ((1 << 1) - 1),
1.0f / ((1 << 2) - 1),
1.0f / ((1 << 3) - 1),
1.0f / ((1 << 4) - 1),
1.0f / ((1 << 5) - 1),
1.0f / ((1 << 6) - 1),
1.0f / ((1 << 7) - 1),
1.0f / ((1 << 8) - 1),
1.0f / ((1 << 9) - 1),
1.0f / ((1 << 10) - 1),
1.0f / ((1 << 11) - 1),
1.0f / ((1 << 12) - 1),
1.0f / ((1 << 13) - 1),
1.0f / ((1 << 14) - 1),
1.0f / ((1 << 15) - 1),
}; int a_size, r_size, g_size, b_size; int a_shift, r_shift, g_shift, b_shift; float a_mul, r_mul, g_mul, b_mul;
uint32_t a_mask, r_mask, g_mask, b_mask; int i;
if (!PIXMAN_FORMAT_VIS (format))
format = PIXMAN_a8r8g8b8;
/* * Determine the sizes of each component and the masks and shifts * required to extract them from the source pixel.
*/
a_size = PIXMAN_FORMAT_A (format);
r_size = PIXMAN_FORMAT_R (format);
g_size = PIXMAN_FORMAT_G (format);
b_size = PIXMAN_FORMAT_B (format);
/* This function is exported for the sake of the test suite and not part * of the ABI.
*/
PIXMAN_EXPORT pixman_implementation_t *
_pixman_internal_only_get_implementation (void)
{ return get_implementation ();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.