changeset 7679:e4e70b0e1786

some cleanup
author arpi
date Wed, 09 Oct 2002 13:25:13 +0000
parents 693a19e1c98e
children d60cfb1f8b37
files libvo/mga_common.c libvo/vo_mga.c libvo/vo_xmga.c
diffstat 3 files changed, 69 insertions(+), 123 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/mga_common.c	Wed Oct 09 13:16:27 2002 +0000
+++ b/libvo/mga_common.c	Wed Oct 09 13:25:13 2002 +0000
@@ -319,7 +319,33 @@
 }
 
 
-static int mga_init(){
+static int mga_init(int width,int height,unsigned int format){
+
+        switch(format){
+        case IMGFMT_YV12:
+	    width+=width&1;height+=height&1;
+	    mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
+            mga_vid_config.format=MGA_VID_FORMAT_I420; break;
+        case IMGFMT_I420:
+        case IMGFMT_IYUV:
+	    width+=width&1;height+=height&1;
+	    mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
+            mga_vid_config.format=MGA_VID_FORMAT_YV12; break;
+        case IMGFMT_YUY2:
+	    mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
+            mga_vid_config.format=MGA_VID_FORMAT_YUY2; break;
+        case IMGFMT_UYVY:
+	    mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
+            mga_vid_config.format=MGA_VID_FORMAT_UYVY; break;
+        default: 
+            printf("mga: invalid output format %0X\n",format);
+            return (-1);
+        }
+
+	mga_vid_config.src_width = width;
+	mga_vid_config.src_height= height;
+	mga_vid_config.dest_width = width;
+	mga_vid_config.dest_height= height;
 
 	mga_vid_config.num_frames=(vo_directrendering && !vo_doublebuffering)?1:3;
 	mga_vid_config.version=MGA_VID_VERSION;
@@ -329,7 +355,6 @@
                 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
 		return -1;
 	}
-	ioctl(f,MGA_VID_ON,0);
 	
 	printf("[mga] Using %d buffers.\n",mga_vid_config.num_frames);
 
@@ -343,15 +368,19 @@
 	//clear the buffer
 	memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
 
+	ioctl(f,MGA_VID_ON,0);
+
   return 0;
 
 }
 
 static int mga_uninit(){
+  if(f>=0){
 	ioctl( f,MGA_VID_OFF,0 );
 	munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames);
 	close(f);
 	f = -1;
+  }
   return 0;
 }
 
@@ -366,6 +395,11 @@
 		printf("vo_mga: Couldn't open %s\n",devname);
 		return(-1);
 	}
+
+#ifdef VO_XMGA
+  if (!vo_init()) return -1;
+#endif
+
   return 0;
 }
 
--- a/libvo/vo_mga.c	Wed Oct 09 13:16:27 2002 +0000
+++ b/libvo/vo_mga.c	Wed Oct 09 13:25:13 2002 +0000
@@ -1,27 +1,5 @@
-
-//#define memcpy(a,b,c)
-
 /* 
- *    video_out_mga.c
- *
- *	Copyright (C) Aaron Holtzman - Aug 1999
- *
- *  This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
- *	
- *  mpeg2dec is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *   
- *  mpeg2dec is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *   
- *  You should have received a copy of the GNU General Public License
- *  along with GNU Make; see the file COPYING.  If not, write to
- *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
- *
+ *    output through mga_vid kernel driver
  */
 
 #include <stdio.h>
@@ -46,10 +24,10 @@
 
 static vo_info_t vo_info = 
 {
-	"Matrox G200/G400 overlay (/dev/mga_vid)",
+	"Matrox G200/G4x0/G550 overlay (/dev/mga_vid)",
 	"mga",
-	"Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
-	""
+	"A'rpi",
+	"Based on some code by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>"
 };
 
 
@@ -57,8 +35,7 @@
 
 #define FBDEV	"/dev/fb0"
 
-static uint32_t
-config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
+static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
 {
 
 //	if (f >= 0) mga_uninit();
@@ -94,32 +71,8 @@
 		printf("vo_mga aspect(): resized to %dx%d\n",d_width,d_height);
 	}
 
-
-        switch(format){
-        case IMGFMT_YV12:
-	    width+=width&1;height+=height&1;
-	    mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
-            mga_vid_config.format=MGA_VID_FORMAT_I420; break;
-        case IMGFMT_I420:
-        case IMGFMT_IYUV:
-	    width+=width&1;height+=height&1;
-	    mga_vid_config.frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
-            mga_vid_config.format=MGA_VID_FORMAT_YV12; break;
-        case IMGFMT_YUY2:
-	    mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
-            mga_vid_config.format=MGA_VID_FORMAT_YUY2; break;
-        case IMGFMT_UYVY:
-	    mga_vid_config.frame_size = ((width + 31) & ~31) * height * 2;
-            mga_vid_config.format=MGA_VID_FORMAT_UYVY; break;
-        default: 
-            printf("mga: invalid output format %0X\n",format);
-            return (-1);
-        }
-
         mga_vid_config.colkey_on=0;
 
-	mga_vid_config.src_width = width;
-	mga_vid_config.src_height= height;
 	mga_vid_config.dest_width = d_width;
 	mga_vid_config.dest_height= d_height;
 	mga_vid_config.x_org= 0; // (720-mga_vid_config.dest_width)/2;
@@ -129,22 +82,18 @@
 		mga_vid_config.y_org=(vo_screenheight-d_height)/2;
 	}
 	
-	mga_vid_config.version=MGA_VID_VERSION;
-
-  return mga_init();
+    return mga_init(width,height,format);
 }
 
-static const vo_info_t*
-get_info(void)
+static const vo_info_t* get_info(void)
 {
-	return &vo_info;
+    return &vo_info;
 }
 
-static void
-uninit(void)
+static void uninit(void)
 {
- mga_uninit();
- printf("vo: uninit!\n");
+    printf("vo: uninit!\n");
+    mga_uninit();
 }
 
 static void draw_osd(void)
--- a/libvo/vo_xmga.c	Wed Oct 09 13:16:27 2002 +0000
+++ b/libvo/vo_xmga.c	Wed Oct 09 13:25:13 2002 +0000
@@ -205,38 +205,9 @@
 {
  char                 * mTitle=(title == NULL) ? "XMGA render" : title;
  XVisualInfo            vinfo;
-
  unsigned long          xswamask;
 
- if (!vo_init()) return -1;
-
- width+=width&1;
-
- switch(format)
-  {
-   case IMGFMT_YV12:
-	height+=height&1;
-        mga_vid_config.format=MGA_VID_FORMAT_IYUV;
-        mga_vid_config.frame_size=( ( width + 31 ) & ~31 ) * height + ( ( ( width + 31 ) & ~31 ) * height ) / 2;
-        break;
-   case IMGFMT_I420:
-   case IMGFMT_IYUV:
-	height+=height&1;
-        mga_vid_config.format=MGA_VID_FORMAT_YV12;
-        mga_vid_config.frame_size=( ( width + 31 ) & ~31 ) * height + ( ( ( width + 31 ) & ~31 ) * height ) / 2;
-        break;
-   case IMGFMT_YUY2:
-        mga_vid_config.format=MGA_VID_FORMAT_YUY2;
-        mga_vid_config.frame_size=( ( width + 31 ) & ~31 ) * height * 2;
-        break;
-   case IMGFMT_UYVY:
-        mga_vid_config.format=MGA_VID_FORMAT_UYVY;
-        mga_vid_config.frame_size=( ( width + 31 ) & ~31 ) * height * 2;
-        break;
-   default:
-       mp_msg(MSGT_VO,MSGL_ERR,"mga: invalid output format %0X\n",format);
-       return -1;
-  }
+ if(mga_init(width,height,format)) return -1; // ioctl errors?
 
  aspect_save_orig(width,height);
  aspect_save_prescale(d_width,d_height);
@@ -246,7 +217,8 @@
 
  vo_panscan_x=vo_panscan_y=vo_panscan_amount=0;
 
- vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
+ vo_dx=( vo_screenwidth - d_width ) / 2;
+ vo_dy=( vo_screenheight - d_height ) / 2;
  vo_dwidth=d_width; vo_dheight=d_height;
  vo_mouse_autohide=1;
 
@@ -269,9 +241,7 @@
   else
 #endif
   {
-#ifdef X11_FULLSCREEN
    if ( flags&1 ) aspect(&dwidth,&dheight,A_ZOOM);
-#endif
 
    XGetWindowAttributes( mDisplay,mRootWin,&attribs );
    mDepth=attribs.depth;
@@ -294,8 +264,8 @@
         vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
        } else XSelectInput( mDisplay,vo_window,ExposureMask );
        
-    } else 
-     {
+    } else {
+
       vo_window=XCreateWindow( mDisplay,mRootWin,
          vo_dx,vo_dy,
          vo_dwidth,vo_dheight,
@@ -317,45 +287,38 @@
       vo_x11_xinerama_move(mDisplay,vo_window);
 #endif
      }
+
     vo_gc=XCreateGC( mDisplay,vo_window,GCForeground,&wGCV );
-  }
+
+  } // !GUI
 
  if ( ( flags&1 )&&( !WinID ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; }
 
  panscan_calc();
- 
- set_window();
+
+ mga_vid_config.colkey_on=1;
+ mga_vid_config.colkey_red=255;
+ mga_vid_config.colkey_green=0;
+ mga_vid_config.colkey_blue=255;
+
+ set_window();	// set up mga_vid_config.dest_width etc
 
  saver_off(mDisplay);
 
  XFlush( mDisplay );
  XSync( mDisplay,False );
 
- mga_vid_config.src_width=width;
- mga_vid_config.src_height=height;
-
- mga_vid_config.colkey_on=1;
- mga_vid_config.colkey_red=255;
- mga_vid_config.colkey_green=0;
- mga_vid_config.colkey_blue=255;
- 
- mga_vid_config.version=MGA_VID_VERSION;
-
- return mga_init();
+ return 0;
 }
 
-static const vo_info_t* get_info( void )
-{ return &vo_info; }
-
+static const vo_info_t* get_info( void ){ return &vo_info; }
 
-static void
-uninit(void)
-{
- if(!inited) return;
+static void uninit(void){
+ mp_msg(MSGT_VO,MSGL_V,"vo: uninit!\n");
+ mga_uninit();
+ if(!inited) return; // no window?
  inited=0;
- mga_uninit();
  saver_on(mDisplay);
- vo_x11_uninit();
- mp_msg(MSGT_VO,MSGL_V,"vo: uninit!\n");
+ vo_x11_uninit(); // destroy the window
 }