summaryrefslogtreecommitdiffstats
path: root/libvo/osd.c
diff options
context:
space:
mode:
authorcehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-05-06 10:18:25 +0000
committercehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-05-06 10:18:25 +0000
commit02641f54eee3ef4117489ba96cc16dce2c20d8c1 (patch)
tree26e8c838795818a960f193176087440fd22578e4 /libvo/osd.c
parent84de3e95a808dcff4456d67a29dfb50a9152e5df (diff)
downloadmpv-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.c33
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++){