diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-05-07 22:13:35 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-05-07 22:13:35 +0300 |
commit | e1cd86076fc830bf2d475539543cf3dacc287ca7 (patch) | |
tree | 3651783063fcca8af4645f61f4196276d6f7f6a9 /libvo | |
parent | 4c6e3ac01bb158ddaa5603dc93fc7efb91b367b1 (diff) | |
parent | 1292c8adc351b1bf461354cd632b39ec3303a8f2 (diff) | |
download | mpv-e1cd86076fc830bf2d475539543cf3dacc287ca7.tar.bz2 mpv-e1cd86076fc830bf2d475539543cf3dacc287ca7.tar.xz |
Merge svn changes up to r31141
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/osd.c | 33 | ||||
-rw-r--r-- | libvo/osd.h | 2 | ||||
-rw-r--r-- | libvo/vo_directfb2.c | 19 | ||||
-rw-r--r-- | libvo/vo_fbdev.c | 13 | ||||
-rw-r--r-- | libvo/vo_fbdev2.c | 8 |
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; } |