CVS: main/libvo vo_dga.c,1.6,1.7
Update of /cvsroot/mplayer/main/libvo In directory usw-pr-cvs1:/tmp/cvs-serv29578 Modified Files: vo_dga.c Log Message: - added double buffering :-) Index: vo_dga.c =================================================================== RCS file: /cvsroot/mplayer/main/libvo/vo_dga.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** vo_dga.c 2001/03/30 22:09:38 1.6 --- vo_dga.c 2001/03/30 23:12:31 1.7 *************** *** 30,33 **** --- 30,38 ---- * movies things could be different, but I was too lazy to implement * it ... + * o you may define VO_DGA_FORCE_DEPTH to the depth you desire + * if you don't like the choice the driver makes + * Beware: unless you can use DGA2.0 this has to be your X Servers + * depth!!! + * o Added double buffering :-)) */ *************** *** 43,46 **** --- 48,52 ---- #include "yuv2rgb.h" + //#undef HAVE_DGA2 LIBVO_EXTERN( dga ) *************** *** 68,72 **** static int vo_dga_src_offset=0; // offset in src static int vo_dga_vp_offset=0; // offset in dest ! static int vo_dga_bytes_per_line; // longwords per line to copy static int vo_dga_src_skip; // bytes to skip after copying one line // (not supported yet) in src --- 74,78 ---- static int vo_dga_src_offset=0; // offset in src static int vo_dga_vp_offset=0; // offset in dest ! static int vo_dga_bytes_per_line; // bytes per line to copy static int vo_dga_src_skip; // bytes to skip after copying one line // (not supported yet) in src *************** *** 76,79 **** --- 82,92 ---- static int vo_dga_planes; // bits per pixel on screen + static int vo_dga_dbf_mem_offset; // offset in bytes for alternative + // framebuffer (0 if dbf is not + // possible) + static int vo_dga_dbf_y_offset; // y offset (in scanlines) + static int + vo_dga_dbf_current; // current buffer (0 or 1) + static unsigned char *vo_dga_base; static Display *vo_dga_dpy; *************** *** 117,129 **** char *s, *d; ! if( vo_dga_src_format==IMGFMT_YV12 ){ ! // We'll never reach this point, because YV12 codecs always ! // calls draw_slice ! printf("vo_dga: draw_frame() doesn't support IMGFMT_YV12 (yet?)\n"); ! }else{ ! s = *src; ! d = (&((char *)vo_dga_base)[vo_dga_vp_offset]); ! rep_movsl(d, s, lpl, vo_dga_vp_skip, numlines ); ! } return 0; --- 130,136 ---- char *s, *d; ! s = *src; ! d = (&((char *)vo_dga_base)[vo_dga_vp_offset + vo_dga_dbf_current * vo_dga_dbf_mem_offset]); ! rep_movsl(d, s, lpl, vo_dga_vp_skip, numlines ); return 0; *************** *** 140,143 **** --- 147,164 ---- static void flip_page( void ){ + + + if(vo_dga_dbf_mem_offset != 0){ + + #ifdef HAVE_DGA2 + XDGASetViewport (vo_dga_dpy, XDefaultScreen(vo_dga_dpy), + 0, vo_dga_dbf_current * vo_dga_dbf_y_offset, + XDGAFlipRetrace); + #else + XF86DGASetViewPort (vo_dga_dpy, XDefaultScreen(vo_dga_dpy), + 0, vo_dga_dbf_current * vo_dga_dbf_y_offset); + #endif + vo_dga_dbf_current = 1 - vo_dga_dbf_current; + } check_events(); } *************** *** 227,230 **** --- 248,255 ---- } #endif + #ifdef VO_DGA_FORCE_DEPTH + dga_depths = 1<<(VO_DGA_FORCE_DEPTH-1); + #endif + dga_depths_init = 1; *************** *** 278,335 **** - #if 0 - if ( - (modelines[i].viewportWidth >= X) && - (modelines[i].viewportHeight >= Y) && - ( - // prefer a better resolution either in X or in Y - // as long as the other dimension is at least the same - // - // hmm ... MAYBE it would be more clever to focus on the - // x-resolution; I had 712x400 and 640x480 and the movie - // was 640x360; 640x480 would be the 'right thing' here - // but since 712x400 was queried first I got this one. - // I think there should be a cmd-line switch to let the - // user choose the mode he likes ... (acki2) - - ( - ((modelines[i].viewportWidth < mX) && - !(modelines[i].viewportHeight > mY)) || - ((modelines[i].viewportHeight < mY) && - !(modelines[i].viewportWidth > mX)) - ) - // but if we get an identical resolution choose - // the one with the lower refreshrate (saves bandwidth !!!) - // as long as it's above 50 Hz (acki2 on 30/3/2001) - || - ( - (modelines[i].viewportWidth == mX) && - (modelines[i].viewportHeight == mY) && - ( - ( - modelines[i].verticalRefresh >= mVBI && mVBI < 50 - ) - || - ( - mVBI >= 50 && - modelines[i].verticalRefresh < mVBI && - modelines[i].verticalRefresh >= 50 - ) - ) - ) - ) - ) - { - mX=modelines[i].viewportWidth; - mY=modelines[i].viewportHeight; - mVBI = modelines[i].verticalRefresh; - j=i; - printf(".ok!!\n"); - }else{ - printf(".no\n"); - } - #endif - - //---------------------------------------------------------- --- 303,306 ---- *************** *** 578,585 **** ButtonPressMask,GrabModeAsync, GrabModeAsync, None, None, CurrentTime); ! // now clear screen ! memset(vo_dga_base, 0, vo_dga_width * vo_dga_vp_height * vo_dga_bpp); vo_dga_is_running = 1; --- 549,570 ---- ButtonPressMask,GrabModeAsync, GrabModeAsync, None, None, CurrentTime); ! ! // TODO: chekc if mem of graphics adaptor is large enough for dbf ! ! ! // set up variables for double buffering ... ! ! vo_dga_dbf_y_offset = y_off + vo_dga_src_height; ! vo_dga_dbf_mem_offset = vo_dga_width * vo_dga_bpp * vo_dga_dbf_y_offset; ! vo_dga_dbf_current = 0; ! ! if(format ==IMGFMT_YV12 )vo_dga_dbf_mem_offset = 0; ! // disable doublebuffering for YV12 ! // now clear screen ! memset(vo_dga_base, 0, vo_dga_width * ! (vo_dga_vp_height + (vo_dga_dbf_mem_offset != 0 ? (vo_dga_src_height+y_off) : 0)) * ! vo_dga_bpp); vo_dga_is_running = 1; _______________________________________________ Mplayer-cvslog mailing list Mplayer-cvslog@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog
participants (1)
-
Andreas Ackermann