X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=common%2Fhost_fb.c;h=46cd03379f0ac2ebb702c13ef3812ab5ff83a744;hp=94910ec8b31abd23b6868de63adc44afd6a04c58;hb=eb058b482d306017c5efa176351c36180c6c8b85;hpb=6ca083930098ee075c8f61cf2c04d616349959c3 diff --git a/common/host_fb.c b/common/host_fb.c index 94910ec..46cd033 100644 --- a/common/host_fb.c +++ b/common/host_fb.c @@ -11,7 +11,7 @@ static int host_stride; #if defined(PND) -#include "fbdev.c" +#include "linux/fbdev.c" static struct vout_fbdev *fbdev; static unsigned short host_pal[256]; @@ -31,6 +31,7 @@ int host_video_init(int *stride, int no_dblbuf) if (fbdev_name == NULL) fbdev_name = "/dev/fb1"; + w = h = 0; fbdev = vout_fbdev_init(fbdev_name, &w, &h, no_dblbuf); if (fbdev == NULL) return -1; @@ -49,7 +50,12 @@ void host_video_finish(void) fbdev = NULL; } -void host_video_update_pal(unsigned int *pal) +void host_video_update_pal16(unsigned short *pal) +{ + memcpy(host_pal, pal, sizeof(host_pal)); +} + +void host_video_update_pal32(unsigned int *pal) { unsigned short *dstp = host_pal; int i; @@ -64,54 +70,54 @@ void host_video_change_bpp(int bpp) { } -void host_video_blit4(const unsigned char *src, int w, int h) +void host_video_blit4(const unsigned char *src, int w, int h, int stride) { unsigned short *dst = host_screen; unsigned short *hpal = host_pal; int i, u; - for (i = 0; i < 240; i++, dst += host_stride / 2 - 320) { - for (u = 320 / 2; u > 0; u--, src++) { - *dst++ = hpal[*src >> 4]; - *dst++ = hpal[*src & 0x0f]; + for (i = 0; i < 240; i++, dst += host_stride / 2, src += stride) { + for (u = 0; i < w / 2; u++) { + dst[u*2 + 0] = hpal[src[u] >> 4]; + dst[u*2 + 1] = hpal[src[u] & 0x0f]; } } host_video_flip(); } -void host_video_blit8(const unsigned char *src, int w, int h) +void host_video_blit8(const unsigned char *src, int w, int h, int stride) { unsigned short *dst = host_screen; unsigned short *hpal = host_pal; int i, u; - for (i = 0; i < 240; i++, dst += host_stride / 2 - 320) { - for (u = 320 / 4; u > 0; u--) { - *dst++ = hpal[*src++]; - *dst++ = hpal[*src++]; - *dst++ = hpal[*src++]; - *dst++ = hpal[*src++]; + for (i = 0; i < 240; i++, dst += host_stride / 2, src += stride) { + for (u = 0; u < w; u += 4) { + dst[u + 0] = hpal[src[u + 0]]; + dst[u + 1] = hpal[src[u + 1]]; + dst[u + 2] = hpal[src[u + 2]]; + dst[u + 3] = hpal[src[u + 3]]; } } host_video_flip(); } -void host_video_blit16(const unsigned short *src, int w, int h) +void host_video_blit16(const unsigned short *src, int w, int h, int stride) { unsigned short *dst = host_screen; int i; - for (i = 0; i < 240; i++, dst += host_stride / 2, src += 320) - memcpy(dst, src, 320*2); + for (i = 0; i < 240; i++, dst += host_stride / 2, src += stride / 2) + memcpy(dst, src, w*2); host_video_flip(); } #elif defined(WIZ) -#include "warm.c" +#include "warm/warm.c" #include "wiz_video.c" void *host_video_flip(void) @@ -143,9 +149,14 @@ void host_video_finish(void) vout_gp2x_finish(); } -void host_video_update_pal(unsigned int *pal) +void host_video_update_pal16(unsigned short *pal) +{ + vout_gp2x_set_palette16(pal, 256); +} + +void host_video_update_pal32(unsigned int *pal) { - vout_gp2x_set_palette(pal, 256); + vout_gp2x_set_palette32(pal, 256); } void host_video_change_bpp(int bpp) @@ -154,13 +165,13 @@ void host_video_change_bpp(int bpp) } #ifdef LOADER -void host_video_blit4(const unsigned char *src, int w, int h) +void host_video_blit4(const unsigned char *src, int w, int h, int stride) { memcpy(host_screen, src, 320*240/2); // FIXME host_video_flip(); } -void host_video_blit8(const unsigned char *src, int w, int h) +void host_video_blit8(const unsigned char *src, int w, int h, int stride) { extern void rotated_blit8(void *dst, const void *linesx4); @@ -168,7 +179,7 @@ void host_video_blit8(const unsigned char *src, int w, int h) host_video_flip(); } -void host_video_blit16(const unsigned short *src, int w, int h) +void host_video_blit16(const unsigned short *src, int w, int h, int stride) { extern void rotated_blit16(void *dst, const void *linesx4);