Mercurial > mplayer.hg
diff libvo/vo_svga.c @ 6456:f0b64210ce97
1bpp support
author | michael |
---|---|
date | Mon, 17 Jun 2002 12:40:40 +0000 |
parents | 7f06ef0d58a6 |
children | 6850df500b8c |
line wrap: on
line diff
--- a/libvo/vo_svga.c Mon Jun 17 08:18:45 2002 +0000 +++ b/libvo/vo_svga.c Mon Jun 17 12:40:40 2002 +0000 @@ -423,7 +423,11 @@ WIDTH=vga_getxdim(); HEIGHT=vga_getydim(); BYTESPERPIXEL=(bpp+4)>>3; - LINEWIDTH=WIDTH*BYTESPERPIXEL; + if(bpp==1) + LINEWIDTH=(WIDTH+7)/8; + else + LINEWIDTH=WIDTH*BYTESPERPIXEL; + vga_setlinearaddressing(); if(oldmethod) { buffer=malloc(HEIGHT*LINEWIDTH); @@ -453,7 +457,11 @@ if (pformat == IMGFMT_YV12) { yuv2rgb_init(bpp, MODE_RGB); - yuvbuf = malloc(maxw * maxh * BYTESPERPIXEL); + if(bpp==1) + yuvbuf = malloc((maxw+7)/8 * maxh); + else + yuvbuf = malloc(maxw * maxh * BYTESPERPIXEL); + if (yuvbuf == NULL) { printf("vo_svga: yuvbuf -> Not enough memory for buffering!\n"); uninit(); @@ -476,7 +484,10 @@ static uint32_t draw_frame(uint8_t *src[]) { if (pformat == IMGFMT_YV12) { - yuv2rgb(yuvbuf, src[0], src[1], src[2], orig_w, orig_h, orig_w * BYTESPERPIXEL, orig_w, orig_w / 2); + if(bpp==1) + yuv2rgb(yuvbuf, src[0], src[1], src[2], orig_w, orig_h, (orig_w+7)/8, orig_w, orig_w / 2); + else + yuv2rgb(yuvbuf, src[0], src[1], src[2], orig_w, orig_h, orig_w * BYTESPERPIXEL, orig_w, orig_w / 2); src[0] = yuvbuf; } if (bpp_conv) { @@ -509,8 +520,11 @@ int w, int h, int x, int y) { uint8_t *src = yuvbuf; uint32_t sw, sh; - - yuv2rgb(yuvbuf, image[0], image[1], image[2], w, h, orig_w * BYTESPERPIXEL, stride[0], stride[1]); + if(bpp==1) + yuv2rgb(yuvbuf, image[0], image[1], image[2], w, h, (orig_w+7)/8, stride[0], stride[1]); + else + yuv2rgb(yuvbuf, image[0], image[1], image[2], w, h, orig_w * BYTESPERPIXEL, stride[0], stride[1]); + putbox(x + x_pos, y + y_pos, w, h, src, 1); return (0); @@ -699,15 +713,21 @@ static void putbox(int x, int y, int w, int h, uint8_t *buf, int prog) { int base, add, wid; + if(bpp==1) + wid=(w+7)/8; + else + wid=w*BYTESPERPIXEL; + if(oldmethod) { - wid=w*BYTESPERPIXEL; add=wid*prog; while( (h--) > 0 ) { - memcpy(buffer+x*BYTESPERPIXEL+(y++)*LINEWIDTH, buf, wid); + if(bpp==1) + memcpy(buffer+(x+7)/8+(y++)*LINEWIDTH, buf, wid); + else + memcpy(buffer+x*BYTESPERPIXEL+(y++)*LINEWIDTH, buf, wid); buf+=add; } } else { - wid=w*BYTESPERPIXEL; add=wid*prog; base=frame*HEIGHT; while( (h--) > 0 ) {