diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-10-09 13:25:13 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-10-09 13:25:13 +0000 |
commit | 96bda1810f7f191cdae39ba8e533e0ad56517629 (patch) | |
tree | 085a95e0b0ff6f05651d8f207278d5a280afc72e /libvo | |
parent | bc4055d60c44f62fb162ccfd2f3a2b17f7451862 (diff) | |
download | mpv-96bda1810f7f191cdae39ba8e533e0ad56517629.tar.bz2 mpv-96bda1810f7f191cdae39ba8e533e0ad56517629.tar.xz |
some cleanup
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7680 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/mga_common.c | 38 | ||||
-rw-r--r-- | libvo/vo_mga.c | 73 | ||||
-rw-r--r-- | libvo/vo_xmga.c | 81 |
3 files changed, 69 insertions, 123 deletions
diff --git a/libvo/mga_common.c b/libvo/mga_common.c index 8da4846880..6cacfe8c16 100644 --- a/libvo/mga_common.c +++ b/libvo/mga_common.c @@ -319,7 +319,33 @@ static uint32_t control(uint32_t request, void *data, ...) } -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 @@ static int mga_init(){ 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 @@ static int mga_init(){ //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 @@ static uint32_t preinit(const char *vo_subdevice) printf("vo_mga: Couldn't open %s\n",devname); return(-1); } + +#ifdef VO_XMGA + if (!vo_init()) return -1; +#endif + return 0; } diff --git a/libvo/vo_mga.c b/libvo/vo_mga.c index dc9ce0acb0..5a3b8dc037 100644 --- a/libvo/vo_mga.c +++ b/libvo/vo_mga.c @@ -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 @@ LIBVO_EXTERN(mga) 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 @@ static vo_info_t vo_info = #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 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin 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 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin 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) diff --git a/libvo/vo_xmga.c b/libvo/vo_xmga.c index e25617229d..72ab267eb4 100644 --- a/libvo/vo_xmga.c +++ b/libvo/vo_xmga.c @@ -205,38 +205,9 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 { 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 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 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 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 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 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 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 @@ static uint32_t config( uint32_t width, uint32_t height, uint32_t d_width, uint3 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(); - - 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(); -} + set_window(); // set up mga_vid_config.dest_width etc -static const vo_info_t* get_info( void ) -{ return &vo_info; } + saver_off(mDisplay); + XFlush( mDisplay ); + XSync( mDisplay,False ); -static void -uninit(void) -{ - if(!inited) return; - inited=0; + return 0; +} + +static const vo_info_t* get_info( void ){ return &vo_info; } + +static void uninit(void){ + mp_msg(MSGT_VO,MSGL_V,"vo: uninit!\n"); mga_uninit(); + if(!inited) return; // no window? + inited=0; saver_on(mDisplay); - vo_x11_uninit(); - mp_msg(MSGT_VO,MSGL_V,"vo: uninit!\n"); + vo_x11_uninit(); // destroy the window } |