changeset 22693:b73dca7dbb0f

allow horizontal resolutions >1024 in case we have a G550 (actualy in case mga_vid doesn't deny it)
author attila
date Sun, 18 Mar 2007 11:03:34 +0000
parents 2ccbb18bc99f
children 595f9fb80827
files libvo/mga_common.c
diffstat 1 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/mga_common.c	Sun Mar 18 10:52:41 2007 +0000
+++ b/libvo/mga_common.c	Sun Mar 18 11:03:34 2007 +0000
@@ -372,12 +372,6 @@
             return (-1);
         }
 
-	if(width>1023 || height >1023)
-	{
-		mp_msg(MSGT_VO,MSGL_ERR, MGSTR_LIBVO_MGA_ResolutionTooHigh);
-		return (-1);
-	}
-
 	mga_vid_config.src_width = width;
 	mga_vid_config.src_height= height;
 	if(!mga_vid_config.dest_width)
@@ -389,12 +383,41 @@
 	
 	mga_vid_config.num_frames=(vo_directrendering && !vo_doublebuffering)?1:3;
 	mga_vid_config.version=MGA_VID_VERSION;
+
+	if(width > 1024 && height > 1024)
+	{
+		mp_msg(MSGT_VO,MSGL_ERR, MGSTR_LIBVO_MGA_ResolutionTooHigh);
+		return (-1);
+	} else if(height <= 1024)
+	{
+		// try whether we have a G550
+		int ret;
+		if(ret = ioctl(f,MGA_VID_CONFIG,&mga_vid_config))
+		{
+			if(mga_vid_config.card_type != MGA_G550)
+			{
+				// we don't have a G550, so our resolution is too high
+				mp_msg(MSGT_VO,MSGL_ERR, MGSTR_LIBVO_MGA_ResolutionTooHigh);
+				return (-1);
+			} else {
+				// there is a deeper problem
+				// we have a G550, but still couldn't configure mga_vid
+				perror("Error in mga_vid_config ioctl()");
+				mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_IncompatibleDriverVersion);
+				return -1;
+			}
+			// if we arrived here, then we could successfully configure mga_vid
+			// at this high resolution
+		}
+	} else {
+	// configure mga_vid in case resolution is < 1024x1024 too
 	if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config))
 	{
 		perror("Error in mga_vid_config ioctl()");
                 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_IncompatibleDriverVersion);
 		return -1;
 	}
+	}
 	
 	mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_MGA_UsingBuffers,mga_vid_config.num_frames);