[Mplayer-cvslog] CVS: main/libvo vo_vesa.c,1.10,1.11
Nick Kurshev
nick at mplayer.dev.hu
Sun Oct 21 09:03:00 CEST 2001
Update of /cvsroot/mplayer/main/libvo
In directory mplayer:/var/tmp.root/cvs-serv10617/main/libvo
Modified Files:
vo_vesa.c
Log Message:
Bad fix of libmpeg2 zooming
Index: vo_vesa.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_vesa.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- vo_vesa.c 20 Oct 2001 16:56:24 -0000 1.10
+++ vo_vesa.c 21 Oct 2001 07:02:40 -0000 1.11
@@ -72,6 +72,8 @@
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 uint32_t x_offset,y_offset; /* to center image on screen */
@@ -233,10 +235,36 @@
}
}
}
+
+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)
{
- uint8_t *yuv_slice;
if(vesa_zoom)
{
SwScale_YV12slice_brg24(image,stride,y,h,
@@ -244,29 +272,22 @@
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
{
- 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,
+ yuv2rgb(yuv_buffer, 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)
- {
- 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;
- 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,&yuv_slice[image_offset],image_line_size);
- }
- }
+ __vbeCopySliceData((uint8_t*)yuv_buffer,x,y,w,h);
else __vbeCopyData((uint8_t *)yuv_buffer);
return 0;
}
@@ -321,15 +342,14 @@
uint32_t xres,uint32_t yres,
uint32_t *image_width,uint32_t *image_height)
{
- float factor;
- factor = (float)width / height;
+ aspect_factor = (float)width / height;
*image_width = xres;
- *image_height = xres / factor;
- if(verbose) printf("vo_vesa: aspect factor = %f(%ux%u) *image=%ux%u screen=%ux%u\n",factor,width,height,*image_width,*image_height,xres,yres);
+ *image_height = xres /aspect_factor;
+ if(verbose) printf("vo_vesa: aspect factor = %f(%ux%u) *image=%ux%u screen=%ux%u\n",aspect_factor,width,height,*image_width,*image_height,xres,yres);
if((*image_height) > yres)
{
*image_height = yres;
- *image_width = yres * factor;
+ *image_width = yres * aspect_factor;
if(verbose) printf("vo_vesa: Y > X tehrefore *image=%ux%u\n",*image_width,*image_height);
}
}
More information about the MPlayer-cvslog
mailing list