# HG changeset patch # User arpi_esp # Date 983927266 0 # Node ID 9d68da5d8a9aa402682e5082defe3033190fd39a # Parent dc43376527232b4f6c3ff3e92d5eca42226e9f43 vsync in mga/xmga diff -r dc4337652723 -r 9d68da5d8a9a libvo/mga_common.c --- a/libvo/mga_common.c Tue Mar 06 17:26:56 2001 +0000 +++ b/libvo/mga_common.c Wed Mar 07 01:07:46 2001 +0000 @@ -1,6 +1,8 @@ // mga_vid drawing functions +extern int mga_next_frame; + static void write_frame_g200(uint8_t *y,uint8_t *cr, uint8_t *cb) { @@ -154,17 +156,15 @@ static void vo_mga_flip_page(void) { -#if 0 - ioctl(f,MGA_VID_FSEL,&next_frame); + +// printf("-- flip to %d --\n",mga_next_frame); - if (next_frame) - vid_data = frame1; - else - vid_data = frame0; +#if 1 + ioctl(f,MGA_VID_FSEL,&mga_next_frame); + mga_next_frame=(mga_next_frame+1)&3; + vid_data=frames[mga_next_frame]; +#endif - next_frame = 2 - next_frame; // switch between fields A1 and B1 - -#endif } diff -r dc4337652723 -r 9d68da5d8a9a libvo/video_out.c --- a/libvo/video_out.c Tue Mar 06 17:26:56 2001 +0000 +++ b/libvo/video_out.c Wed Mar 07 01:07:46 2001 +0000 @@ -35,6 +35,8 @@ // Externally visible list of all vo drivers // +int mga_next_frame=0; + extern vo_functions_t video_out_mga; extern vo_functions_t video_out_xmga; extern vo_functions_t video_out_x11; diff -r dc4337652723 -r 9d68da5d8a9a libvo/vo_mga.c --- a/libvo/vo_mga.c Tue Mar 06 17:26:56 2001 +0000 +++ b/libvo/vo_mga.c Wed Mar 07 01:07:46 2001 +0000 @@ -50,8 +50,7 @@ }; static mga_vid_config_t mga_vid_config; -static uint8_t *vid_data, *frame0, *frame1; -static int next_frame = 0; +static uint8_t *vid_data, *frames[4]; static int f; #include "mga_common.c" @@ -98,14 +97,16 @@ ioctl(f,MGA_VID_ON,0); frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2; - frame_mem = (char*)mmap(0,frame_size*2,PROT_WRITE,MAP_SHARED,f,0); - frame0 = frame_mem; - frame1 = frame_mem + frame_size; - vid_data = frame0; - next_frame = 0; + frame_mem = (char*)mmap(0,frame_size*4,PROT_WRITE,MAP_SHARED,f,0); + frames[0] = frame_mem; + frames[1] = frame_mem + 1*frame_size; + frames[2] = frame_mem + 2*frame_size; + frames[3] = frame_mem + 3*frame_size; + mga_next_frame = 0; + vid_data = frames[mga_next_frame]; //clear the buffer - memset(frame_mem,0x80,frame_size*2); + memset(frame_mem,0x80,frame_size*4); return 0; } diff -r dc4337652723 -r 9d68da5d8a9a libvo/vo_xmga.c --- a/libvo/vo_xmga.c Tue Mar 06 17:26:56 2001 +0000 +++ b/libvo/vo_xmga.c Wed Mar 07 01:07:46 2001 +0000 @@ -55,9 +55,7 @@ static mga_vid_config_t mga_vid_config; static uint8_t * vid_data; -static uint8_t * frame0; -static uint8_t * frame1; -static int next_frame=0; +static uint8_t * frames[4]; static int f; static Display * mDisplay; @@ -277,12 +275,14 @@ #endif frame_size=( ( width + 31 ) & ~31 ) * height + ( ( ( width + 31 ) & ~31 ) * height ) / 2; - frame_mem=(char*)mmap( 0,frame_size*2,PROT_WRITE,MAP_SHARED,f,0 ); - frame0=frame_mem; - frame1=frame_mem + frame_size; - vid_data=frame0; - next_frame=0; - memset( frame_mem,0x80,frame_size * 2 ); + frame_mem=(char*)mmap( 0,frame_size*4,PROT_WRITE,MAP_SHARED,f,0 ); + frames[0] = frame_mem; + frames[1] = frame_mem + 1*frame_size; + frames[2] = frame_mem + 2*frame_size; + frames[3] = frame_mem + 3*frame_size; + mga_next_frame=0; + vid_data=frames[mga_next_frame]; + memset( frame_mem,0x80,frame_size * 4 ); XFlush( mDisplay ); XSync( mDisplay,False );