Skip to content

Commit bb0e79c

Browse files
orangecmsvifino
authored andcommitted
out_fb: add 16-bit support
Signed-off-by: Daniel Maslowski <[email protected]>
1 parent 6f58e9f commit bb0e79c

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/modules/out_fb.c

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ static byte* buf;
2626
#define SLEDFB_BGR 8
2727
// Planar
2828
#define SLEDFB_PLANAR 16
29+
// 16bpp
30+
#define SLEDFB_P2EN 32
2931

3032
static int fbdev_w, fbdev_h, fbdev_fd;
3133
static int fbdev_flags;
@@ -112,11 +114,16 @@ static int query_device(char* device) {
112114
int bpp = 24; //vinfo.bpp;
113115
#endif
114116
if (bpp != 24) {
115-
if (bpp != 32) {
116-
fprintf(stderr, "FB: Expected 24/32-bit display, got %i\n", bpp);
117-
return 1;
117+
if (bpp == 32) {
118+
fbdev_flags |= SLEDFB_P4EN;
119+
} else {
120+
if (bpp == 16) {
121+
fbdev_flags |= SLEDFB_P2EN;
122+
} else {
123+
fprintf(stderr, "FB: Expected 16/24/32-bit display, got %i\n", bpp);
124+
return 1;
125+
}
118126
}
119-
fbdev_flags |= SLEDFB_P4EN;
120127
#ifdef __linux__
121128
if (ifo.transp.length) {
122129
fbdev_flags |= SLEDFB_P4AI;
@@ -150,6 +157,8 @@ int init (int moduleno, char* argstr) {
150157
return 2;
151158
if (fbdev_flags & SLEDFB_P4EN) {
152159
buf = malloc(fbdev_w * fbdev_h * 4);
160+
} else if (fbdev_flags & SLEDFB_P2EN) {
161+
buf = malloc(fbdev_w * fbdev_h * 2);
153162
} else {
154163
buf = malloc(fbdev_w * fbdev_h * 3);
155164
}
@@ -179,7 +188,15 @@ int set(int _modno, int x, int y, RGB color) {
179188
assert(x < fbdev_w);
180189
assert(y < fbdev_h);
181190

182-
if (!(fbdev_flags & SLEDFB_PLANAR)) {
191+
if (fbdev_flags & SLEDFB_P2EN) {
192+
int i = x + (y * fbdev_w);
193+
int r = color.red >> 3;
194+
int g = color.green >> 2;
195+
int b = color.blue >> 3;
196+
int p = (r << 11) | (g << 5) | b;
197+
buf[2*i] = p & 0xff;
198+
buf[2*i + 1] = p >> 8;
199+
} else if (!(fbdev_flags & SLEDFB_PLANAR)) {
183200
int i = (x + (y * fbdev_w)) * ((fbdev_flags & SLEDFB_P4EN) ? 4 : 3);
184201
if (fbdev_flags & SLEDFB_P4AF)
185202
i++;

0 commit comments

Comments
 (0)