1 #include "framebuffer-pixfmt-rgb15.hpp"
6 _pixfmt_rgb15
<uvswap
>::~_pixfmt_rgb15() throw()
11 void _pixfmt_rgb15
<uvswap
>::decode(uint32_t* target
, const uint8_t* src
, size_t width
)
14 const uint16_t* _src
= reinterpret_cast<const uint16_t*>(src
);
15 for(size_t i
= 0; i
< width
; i
++) {
16 uint32_t word
= _src
[i
];
17 uint64_t r
= ((word
>> (uvswap
? 10 : 0)) & 0x1F);
18 uint64_t g
= ((word
>> 5) & 0x1F);
19 uint64_t b
= ((word
>> (uvswap
? 0 : 10)) & 0x1F);
20 target
[i
] = (((r
<< 8) - r
+ 15) / 31) << 16;
21 target
[i
] |= (((g
<< 8) - g
+ 15) / 31) << 8;
22 target
[i
] |= (((b
<< 8) - b
+ 15) / 31);
27 void _pixfmt_rgb15
<uvswap
>::decode(uint32_t* target
, const uint8_t* src
, size_t width
,
28 const auxpalette
<false>& auxp
) throw()
30 const uint16_t* _src
= reinterpret_cast<const uint16_t*>(src
);
31 for(size_t i
= 0; i
< width
; i
++)
32 target
[i
] = auxp
.pcache
[_src
[i
] & 0x7FFF];
36 void _pixfmt_rgb15
<uvswap
>::decode(uint64_t* target
, const uint8_t* src
, size_t width
,
37 const auxpalette
<true>& auxp
) throw()
39 const uint16_t* _src
= reinterpret_cast<const uint16_t*>(src
);
40 for(size_t i
= 0; i
< width
; i
++)
41 target
[i
] = auxp
.pcache
[_src
[i
] & 0x7FFF];
45 void _pixfmt_rgb15
<uvswap
>::set_palette(auxpalette
<false>& auxp
, uint8_t rshift
, uint8_t gshift
,
46 uint8_t bshift
) throw(std::bad_alloc
)
48 auxp
.pcache
.resize(0x8000);
49 for(size_t i
= 0; i
< 0x8000; i
++) {
50 uint32_t r
= ((i
>> (uvswap
? 10 : 0)) & 0x1F);
51 uint32_t g
= ((i
>> 5) & 0x1F);
52 uint32_t b
= ((i
>> (uvswap
? 0 : 10)) & 0x1F);
53 auxp
.pcache
[i
] = (((r
<< 8) - r
+ 15) / 31) << rshift
;
54 auxp
.pcache
[i
] += (((g
<< 8) - g
+ 15) / 31) << gshift
;
55 auxp
.pcache
[i
] += (((b
<< 8) - b
+ 15) / 31) << bshift
;
63 void _pixfmt_rgb15
<uvswap
>::set_palette(auxpalette
<true>& auxp
, uint8_t rshift
, uint8_t gshift
,
64 uint8_t bshift
) throw(std::bad_alloc
)
66 auxp
.pcache
.resize(0x8000);
67 for(size_t i
= 0; i
< 0x8000; i
++) {
68 uint64_t r
= ((i
>> (uvswap
? 10 : 0)) & 0x1F);
69 uint64_t g
= ((i
>> 5) & 0x1F);
70 uint64_t b
= ((i
>> (uvswap
? 0 : 10)) & 0x1F);
71 auxp
.pcache
[i
] = (((r
<< 16) - r
+ 15) / 31) << rshift
;
72 auxp
.pcache
[i
] += (((g
<< 16) - g
+ 15) / 31) << gshift
;
73 auxp
.pcache
[i
] += (((b
<< 16) - b
+ 15) / 31) << bshift
;
81 uint8_t _pixfmt_rgb15
<uvswap
>::get_bpp() throw()
87 uint8_t _pixfmt_rgb15
<uvswap
>::get_ss_bpp() throw()
93 uint32_t _pixfmt_rgb15
<uvswap
>::get_magic() throw()
101 _pixfmt_rgb15
<false> pixfmt_rgb15
;
102 _pixfmt_rgb15
<true> pixfmt_bgr15
;