summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-05-07 22:13:35 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-05-07 22:13:35 +0300
commite1cd86076fc830bf2d475539543cf3dacc287ca7 (patch)
tree3651783063fcca8af4645f61f4196276d6f7f6a9 /libvo
parent4c6e3ac01bb158ddaa5603dc93fc7efb91b367b1 (diff)
parent1292c8adc351b1bf461354cd632b39ec3303a8f2 (diff)
downloadmpv-e1cd86076fc830bf2d475539543cf3dacc287ca7.tar.bz2
mpv-e1cd86076fc830bf2d475539543cf3dacc287ca7.tar.xz
Merge svn changes up to r31141
Diffstat (limited to 'libvo')
-rw-r--r--libvo/osd.c33
-rw-r--r--libvo/osd.h2
-rw-r--r--libvo/vo_directfb2.c19
-rw-r--r--libvo/vo_fbdev.c13
-rw-r--r--libvo/vo_fbdev2.c8
5 files changed, 74 insertions, 1 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++){
diff --git a/libvo/osd.h b/libvo/osd.h
index 7773149b79..4d79e854c8 100644
--- a/libvo/osd.h
+++ b/libvo/osd.h
@@ -29,6 +29,8 @@ void vo_draw_alpha_yuy2(int w, int h, unsigned char* src, unsigned char *srca,
void vo_draw_alpha_uyvy(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb24(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb32(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
+void vo_draw_alpha_rgb12(int w, int h, unsigned char* src, unsigned char *srca,
+ int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb15(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb16(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
diff --git a/libvo/vo_directfb2.c b/libvo/vo_directfb2.c
index 673882dd49..0c2fb9b423 100644
--- a/libvo/vo_directfb2.c
+++ b/libvo/vo_directfb2.c
@@ -317,9 +317,13 @@ DFBSurfacePixelFormat convformat(uint32_t format)
#if DIRECTFBVERSION > DFB_VERSION(0,9,15)
case IMGFMT_RGB15: return DSPF_ARGB1555; break;
case IMGFMT_BGR15: return DSPF_ARGB1555; break;
+ case IMGFMT_RGB12: return DSPF_ARGB4444; break;
+ case IMGFMT_BGR12: return DSPF_ARGB4444; break;
#else
case IMGFMT_RGB15: return DSPF_RGB15; break;
case IMGFMT_BGR15: return DSPF_RGB15; break;
+ case IMGFMT_RGB12: return DSPF_RGB12; break;
+ case IMGFMT_BGR12: return DSPF_RGB12; break;
#endif
case IMGFMT_YUY2: return DSPF_YUY2; break;
case IMGFMT_UYVY: return DSPF_UYVY; break;
@@ -539,6 +543,8 @@ static int config(uint32_t s_width, uint32_t s_height, uint32_t d_width,
case IMGFMT_BGR16:
case IMGFMT_RGB15:
case IMGFMT_BGR15:
+ case IMGFMT_RGB12:
+ case IMGFMT_BGR12:
params.bpp=16;
break;
default: params.bpp=0;
@@ -663,8 +669,10 @@ static int config(uint32_t s_width, uint32_t s_height, uint32_t d_width,
case DSPF_RGB16: bpp=16;break;
#if DIRECTFBVERSION > DFB_VERSION(0,9,15)
case DSPF_ARGB1555: bpp=15;break;
+ case DSPF_ARGB4444: bpp=12; break;
#else
case DSPF_RGB15: bpp=15;break;
+ case DSPF_RGB12: bpp=12; break;
#endif
case DSPF_RGB332 : bpp=8;break;
}
@@ -676,8 +684,10 @@ static int config(uint32_t s_width, uint32_t s_height, uint32_t d_width,
case DSPF_RGB16:
#if DIRECTFBVERSION > DFB_VERSION(0,9,15)
case DSPF_ARGB1555:
+ case DSPF_ARGB4444:
#else
case DSPF_RGB15:
+ case DSPF_RGB12:
#endif
case DSPF_RGB332:
mp_msg(MSGT_VO, MSGL_V,"DirectFB: Trying to recover via videomode change (VM).\n");
@@ -1473,6 +1483,15 @@ static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
#endif
vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + 2*x0,pitch);
break;
+#if DIRECTFBVERSION > DFB_VERSION(0,9,15)
+ case DSPF_ARGB4444:
+#else
+ case DSPF_RGB12:
+#endif
+ vo_draw_alpha_rgb12(w, h, src, srca, stride,
+ ((uint8_t *) dst) + pitch * y0 + 2 * x0,
+ pitch);
+ break;
case DSPF_YUY2:
vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) dst) + pitch*y0 + 2*x0,pitch);
diff --git a/libvo/vo_fbdev.c b/libvo/vo_fbdev.c
index 4534b17d9f..0bddd8dfce 100644
--- a/libvo/vo_fbdev.c
+++ b/libvo/vo_fbdev.c
@@ -521,6 +521,13 @@ static void set_bpp(struct fb_var_screeninfo *p, int bpp)
p->green.offset = 5;
p->blue.length = 5;
break;
+ case 12:
+ p->red.offset = 8;
+ p->green.length = 4;
+ p->red.length = 4;
+ p->green.offset = 4;
+ p->blue.length = 4;
+ break;
}
}
@@ -700,7 +707,8 @@ static int fb_preinit(int reset)
}
if (vo_dbpp) {
- if (vo_dbpp != 15 && vo_dbpp != 16 && vo_dbpp != 24 && vo_dbpp != 32) {
+ if (vo_dbpp != 12 && vo_dbpp != 15 && vo_dbpp != 16
+ && vo_dbpp != 24 && vo_dbpp != 32) {
mp_msg(MSGT_VO, MSGL_ERR, "can't switch to %d bpp\n", vo_dbpp);
goto err_out;
}
@@ -850,6 +858,9 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
case 15:
draw_alpha_p = vo_draw_alpha_rgb15;
break;
+ case 12:
+ draw_alpha_p = vo_draw_alpha_rgb12;
+ break;
default:
return 1;
}
diff --git a/libvo/vo_fbdev2.c b/libvo/vo_fbdev2.c
index 491911ad6c..60bdee9a17 100644
--- a/libvo/vo_fbdev2.c
+++ b/libvo/vo_fbdev2.c
@@ -77,6 +77,13 @@ static void set_bpp(struct fb_var_screeninfo *p, int bpp)
p->green.offset = 5;
p->blue.length = 5;
break;
+ case 12:
+ p->red.offset = 8;
+ p->green.length = 4;
+ p->red.length = 4;
+ p->green.offset = 4;
+ p->blue.length = 4;
+ break;
}
}
@@ -247,6 +254,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
case 24: draw_alpha_p = vo_draw_alpha_rgb24; break;
case 16: draw_alpha_p = vo_draw_alpha_rgb16; break;
case 15: draw_alpha_p = vo_draw_alpha_rgb15; break;
+ case 12: draw_alpha_p = vo_draw_alpha_rgb12; break;
default: return 1;
}