Mercurial > mplayer.hg
changeset 10426:c3345a8fbc57
removed yv12 support, but left some swscaler support for fast 15 vs 16bpp conversion
author | alex |
---|---|
date | Sun, 13 Jul 2003 23:33:56 +0000 |
parents | 82387bdeb8b7 |
children | 62e4effc06d7 |
files | libvo/vo_fbdev.c |
diffstat | 1 files changed, 26 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/libvo/vo_fbdev.c Sun Jul 13 23:30:28 2003 +0000 +++ b/libvo/vo_fbdev.c Sun Jul 13 23:33:56 2003 +0000 @@ -28,6 +28,7 @@ #include "fastmemcpy.h" #include "sub.h" #include "../postproc/rgb2rgb.h" +#include "../libmpcodecs/vf_scale.h" #ifdef CONFIG_VIDIX #include "vosub_vidix.h" #endif @@ -576,7 +577,7 @@ static int fb_tty_fd; static size_t fb_size; static uint8_t *frame_buffer; -static uint8_t *L123123875; /* thx .so :) */ +static uint8_t *center; /* thx .so :) */ static struct fb_fix_screeninfo fb_finfo; static struct fb_var_screeninfo fb_orig_vinfo; static struct fb_var_screeninfo fb_vinfo; @@ -609,7 +610,7 @@ * Chris Lawrence's code. * (modified a bit to fit in my code...) */ -struct fb_cmap *make_directcolor_cmap(struct fb_var_screeninfo *var) +static struct fb_cmap *make_directcolor_cmap(struct fb_var_screeninfo *var) { /* Hopefully any DIRECTCOLOR device will have a big enough palette * to handle mapping the full color depth. @@ -684,11 +685,17 @@ } #endif -static int fb_preinit(void) +static int fb_preinit(int reset) { static int fb_preinit_done = 0; static int fb_works = 0; + if (reset) + { + fb_preinit_done = 0; + return 0; + } + if (fb_preinit_done) return fb_works; @@ -1075,14 +1082,14 @@ //FIXME: update geometry code //geometry(&x_offset,&y_offset,fb_xres,fb_yres,out_width,out_height); - L123123875 = frame_buffer + (out_width - in_width) * fb_pixel_size / + center = frame_buffer + (out_width - in_width) * fb_pixel_size / 2 + ( (out_height - in_height) / 2 ) * fb_line_len + x_offset * fb_pixel_size + y_offset * fb_line_len; if (verbose > 0) { if (verbose > 1) { printf(FBDEV "frame_buffer @ %p\n", frame_buffer); - printf(FBDEV "L123123875 @ %p\n", L123123875); + printf(FBDEV "center @ %p\n", center); } printf(FBDEV "pixel per line: %d\n", fb_line_len / fb_pixel_size); } @@ -1093,9 +1100,6 @@ } if (fs || vm) memset(frame_buffer, '\0', fb_line_len * fb_yres); - - if (format == IMGFMT_YV12) - yuv2rgb_init(fb_bpp, MODE_RGB); } if (vt_doit && (vt_fd = open("/dev/tty", O_WRONLY)) == -1) { printf(FBDEV "can't open /dev/tty: %s\n", strerror(errno)); @@ -1109,6 +1113,8 @@ if (vt_doit) vt_set_textarea(last_row, fb_yres); + sws_rgb2rgb_init(get_sws_cpuflags()); + return 0; } @@ -1116,7 +1122,7 @@ { int ret = VFCAP_OSD|VFCAP_CSP_SUPPORTED; /* osd/sub is supported on every bpp */ - if (!fb_preinit()) + if (!fb_preinit(0)) return 0; #ifdef CONFIG_VIDIX if(vidix_name) @@ -1132,8 +1138,6 @@ else if (bpp == 24 && fb_bpp == 32) return ret; } - //if (format == IMGFMT_YV12) - // return ret; return 0; } @@ -1143,35 +1147,15 @@ unsigned char *dst; int dstride; -#ifdef USE_CONVERT2FB - if (pixel_format == IMGFMT_YV12) { - dst = L123123875 + (fb_xres * y0 + x0) * fb_pixel_size; - dstride = fb_xres * fb_pixel_size; - } - else -#endif - { dst = next_frame + (in_width * y0 + x0) * fb_pixel_size; dstride = in_width * fb_pixel_size; - } (*draw_alpha_p)(w, h, src, srca, stride, dst, dstride); } static uint32_t draw_frame(uint8_t *src[]) { - if (pixel_format == IMGFMT_YV12) { -#ifdef USE_CONVERT2FB - yuv2rgb(L123123875, src[0], src[1], src[2], fb_xres, - fb_yres, fb_xres * fb_pixel_size, - in_width, in_width / 2); -#else - yuv2rgb(next_frame, src[0], src[1], src[2], in_width, - in_height, in_width * fb_pixel_size, - in_width, in_width / 2); -#endif - - } else if (flip) { + if (flip) { int h = in_height; int len = in_width * fb_pixel_size; char *d = next_frame + (in_height - 1) * len; @@ -1198,26 +1182,6 @@ static uint32_t draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y) { - uint8_t *dest; - -#ifdef USE_CONVERT2FB - if (pixel_format == IMGFMT_YV12) { - if(x < fb_xres && y < fb_yres) { - if(x+w > fb_xres) w= fb_xres-x; - if(y+h > fb_yres) h= fb_yres-y; - - dest = L123123875 + (fb_xres * y + x) * fb_pixel_size; - yuv2rgb(dest, src[0], src[1], src[2], w, h, fb_xres * fb_pixel_size, - stride[0], stride[1]); - } - - return 0; - } -#endif - - dest = next_frame + (in_width * y + x) * fb_pixel_size; - yuv2rgb(dest, src[0], src[1], src[2], w, h, in_width * fb_pixel_size, - stride[0], stride[1]); return 0; } @@ -1225,23 +1189,6 @@ { } -static void put_frame(void) -{ - int i, out_offset = 0, in_offset = 0; - -#ifdef USE_CONVERT2FB - if(pixel_format == IMGFMT_YV12) - return; -#endif - - for (i = 0; i < in_height; i++) { - memcpy(L123123875 + out_offset, next_frame + in_offset, - in_width * fb_pixel_size); - out_offset += fb_line_len; - in_offset += in_width * fb_pixel_size; - } -} - static void draw_osd(void) { vo_draw_text(in_width, in_height, draw_alpha); @@ -1249,13 +1196,21 @@ static void flip_page(void) { - put_frame(); + int i, out_offset = 0, in_offset = 0; + + for (i = 0; i < in_height; i++) { + memcpy(center + out_offset, next_frame + in_offset, + in_width * fb_pixel_size); + out_offset += fb_line_len; + in_offset += in_width * fb_pixel_size; + } } static void uninit(void) { if (verbose > 0) printf(FBDEV "uninit\n"); + fb_preinit(1); if (fb_cmap_changed) { if (ioctl(fb_dev_fd, FBIOPUTCMAP, &fb_oldcmap)) printf(FBDEV "Can't restore original cmap\n"); @@ -1291,7 +1246,7 @@ if(verbose > 2) printf("vo_subdevice: initialization returns: %i\n",pre_init_err); #endif - if(!pre_init_err) return (pre_init_err=(fb_preinit()?0:-1)); + if(!pre_init_err) return (pre_init_err=(fb_preinit(0)?0:-1)); return(-1); }