Mercurial > mplayer.hg
changeset 2331:9e8585a7182e
Final fix of libmpeg2 zooming: flipping page support
author | nick |
---|---|
date | Sun, 21 Oct 2001 12:42:17 +0000 |
parents | 8f0861360325 |
children | 66b69c384a67 |
files | libvo/vo_vesa.c |
diffstat | 1 files changed, 7 insertions(+), 40 deletions(-) [+] |
line wrap: on
line diff
--- a/libvo/vo_vesa.c Sun Oct 21 12:18:45 2001 +0000 +++ b/libvo/vo_vesa.c Sun Oct 21 12:42:17 2001 +0000 @@ -72,8 +72,6 @@ static int vesa_zoom=0; /* software scaling */ static unsigned int scale_xinc=0; static unsigned int scale_yinc=0; -static float aspect_factor; - static uint32_t image_width, image_height; /* source image dimension */ static int32_t x_offset,y_offset; /* to center image on screen */ @@ -83,6 +81,7 @@ static uint8_t *yuv_buffer = NULL; /* for yuv2rgb and sw_scaling */ static unsigned video_mode; /* selected video mode for playback */ static struct VesaModeInfoBlock video_mode_info; +static int flip_trigger = 0; #define MOVIE_MODE (MODE_ATTR_COLOR | MODE_ATTR_GRAPHICS) #define FRAME_MODE (MODE_WIN_RELOCATABLE | MODE_WIN_READABLE | MODE_WIN_WRITEABLE) @@ -236,32 +235,6 @@ } } -static void __vbeCopySliceData(uint8_t *image,int x, int y, int w, int h) -{ - unsigned long i,j,image_offset,offset; - unsigned pixel_size,image_line_size,screen_line_size,x_shift; - pixel_size = (video_mode_info.BitsPerPixel+7)/8; - screen_line_size = video_mode_info.XResolution*pixel_size; - image_line_size = w*pixel_size; -#if 0 - if(image_width == video_mode_info.XResolution && w == image_width) - { - /* Special case for zooming */ - __vbeCopyBlock((y_offset+y)*screen_line_size,image,image_line_size*image_height); - } - else -#endif - { - x_shift = (x_offset+x)*pixel_size; - for(j=0,i=y_offset+y;j<h;i++,j++) - { - offset = i*screen_line_size+x_shift; - image_offset = j*image_line_size; - __vbeCopyBlock(offset,&image[image_offset],image_line_size); - } - } -} - /* is called for yuv only */ static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) { @@ -272,23 +245,16 @@ image_width*((video_mode_info.BitsPerPixel+7)/8), image_width, video_mode_info.BitsPerPixel, scale_xinc, scale_yinc); - if(y || x || w != image_width || h != image_height) - { - w = image_width; - h = image_height; - y = 0; - x = 0; - } } else { - yuv2rgb(yuv_buffer, image[0], image[1], image[2], w, h, + uint8_t *yuv_slice; + yuv_slice=yuv_buffer+(image_width*y+x)*((video_mode_info.BitsPerPixel+7)/8); + yuv2rgb(yuv_slice, image[0], image[1], image[2], w, h, image_width * ((video_mode_info.BitsPerPixel+7)/8), stride[0], stride[1]); } - if(y || x || w != image_width || h != image_height) - __vbeCopySliceData((uint8_t*)yuv_buffer,x,y,w,h); - else __vbeCopyData((uint8_t *)yuv_buffer); + flip_trigger = 1; return 0; } @@ -299,7 +265,7 @@ static void flip_page(void) { -/*Is not required*/ + if(flip_trigger) { __vbeCopyData(yuv_buffer); flip_trigger = 0; } } /* is called for rgb only */ @@ -342,6 +308,7 @@ uint32_t xres,uint32_t yres, uint32_t *image_width,uint32_t *image_height) { + float aspect_factor; aspect_factor = (float)width / height; *image_width = xres; *image_height = xres /aspect_factor;