From: Øyvind Kolås Date: Sat, 10 Dec 2016 15:10:45 +0000 (+0100) Subject: extensions/simple: improve u16 fast paths X-Git-Tag: archive/raspbian/1%0.1.106-3+rpi1^2~139^2^2~305 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b07b273e641b3541c4553e88cd3ac7938497c126;p=babl.git extensions/simple: improve u16 fast paths --- diff --git a/extensions/simple.c b/extensions/simple.c index 31ec455..1430ab1 100644 --- a/extensions/simple.c +++ b/extensions/simple.c @@ -240,7 +240,7 @@ u32_to_float_x2 (unsigned char *src_char, unsigned char *dst_char, long samples) static inline long u16_to_float (unsigned char *src_char, unsigned char *dst_char, long samples) { - uint32_t *src = (uint32_t *)src_char; + uint16_t *src = (uint16_t *)src_char; float *dst = (float *)dst_char; long n = samples; while (n--) @@ -274,6 +274,24 @@ u16_to_float_x2 (unsigned char *src_char, unsigned char *dst_char, long samples) return samples; } +static inline long +yau16_rgbaf (unsigned char *src_char, unsigned char *dst_char, long samples) +{ + uint16_t *src = (uint16_t *)src_char; + float *dst = (float *)dst_char; + long n = samples; + while (n--) + { + dst[0] = src[0] / 65535.0f; + dst[1] = src[0] / 65535.0f; + dst[2] = src[0] / 65535.0f; + dst[3] = src[1] / 65535.0f; + dst +=4; + src +=2; + } + return samples; +} + int init (void) @@ -520,6 +538,10 @@ init (void) "linear", u16_to_float_x3, NULL); - + babl_conversion_new (babl_format ("Y'A u16"), + babl_format ("R'G'B'A float"), + "linear", + yau16_rgbaf, + NULL); return 0; }