diff options
author | cehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-05-06 10:18:25 +0000 |
---|---|---|
committer | cehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-05-06 10:18:25 +0000 |
commit | 02641f54eee3ef4117489ba96cc16dce2c20d8c1 (patch) | |
tree | 26e8c838795818a960f193176087440fd22578e4 /libvo/osd.c | |
parent | 84de3e95a808dcff4456d67a29dfb50a9152e5df (diff) | |
download | mpv-02641f54eee3ef4117489ba96cc16dce2c20d8c1.tar.bz2 mpv-02641f54eee3ef4117489ba96cc16dce2c20d8c1.tar.xz |
Add support for 12-bit color mode on framebuffer devices.
Patch Janusz Krzysztofik, jkrzyszt A tis icnet pl
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31139 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/osd.c')
-rw-r--r-- | libvo/osd.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libvo/osd.c b/libvo/osd.c index a3664dadb3..54854c785f 100644 --- a/libvo/osd.c +++ b/libvo/osd.c @@ -329,6 +329,39 @@ void vo_draw_alpha_init(void){ } } +void vo_draw_alpha_rgb12(int w, int h, unsigned char* src, unsigned char *srca, + int srcstride, unsigned char* dstbase, int dststride) { + int y; + for (y = 0; y < h; y++) { + register unsigned short *dst = (unsigned short*) dstbase; + register int x; + for (x = 0; x < w; x++) { + if(srca[x]){ +#ifdef FAST_OSD +#ifdef FAST_OSD_TABLE + dst[x] = fast_osd_12bpp_table[src[x]]; +#else + register unsigned int a = src[x] >> 4; + dst[x] = (a << 8) | (a << 4) | a; +#endif +#else + unsigned char r = dst[x] & 0x0F; + unsigned char g = (dst[x] >> 4) & 0x0F; + unsigned char b = (dst[x] >> 8) & 0x0F; + r = (((r*srca[x]) >> 4) + src[x]) >> 4; + g = (((g*srca[x]) >> 4) + src[x]) >> 4; + b = (((b*srca[x]) >> 4) + src[x]) >> 4; + dst[x] = (b << 8) | (g << 4) | r; +#endif + } + } + src += srcstride; + srca += srcstride; + dstbase += dststride; + } + return; +} + void vo_draw_alpha_rgb15(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ int y; for(y=0;y<h;y++){ |