From c9948174b9048e634cdeb88818cd17a5e6ee046d Mon Sep 17 00:00:00 2001 From: arpi Date: Tue, 1 Oct 2002 21:47:32 +0000 Subject: [PATCH] flickering fix, patch by Fredrik Noring git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7576 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/vo_dga.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/libvo/vo_dga.c b/libvo/vo_dga.c index 46d0f3bb00..b1f16449ca 100644 --- a/libvo/vo_dga.c +++ b/libvo/vo_dga.c @@ -262,14 +262,8 @@ static int vo_dga_XServer_mode = 0;// index in mode list for resolution #define MAX_NR_VIDEO_BUFFERS 3 -#define VIDEO_BUFFER_DRAW \ - (vo_dga_video_buffer[vo_dga_current_video_buffer % \ - vo_dga_nr_video_buffers]) - -#define VIDEO_BUFFER_DISPLAY \ - (vo_dga_video_buffer[(vo_dga_current_video_buffer + \ - vo_dga_nr_video_buffers - 1) % \ - vo_dga_nr_video_buffers]) +#define CURRENT_VIDEO_BUFFER \ + (vo_dga_video_buffer[vo_dga_current_video_buffer]) static int vo_dga_nr_video_buffers; // Total number of frame buffers. static int vo_dga_current_video_buffer; // Buffer available for rendering. @@ -298,7 +292,7 @@ static void draw_alpha( int x0,int y0, int w,int h, unsigned char* src, unsigned offset = vo_dga_width * y0 +x0; buffer_stride = vo_dga_width; - d = VIDEO_BUFFER_DRAW.data + vo_dga_vp_offset; + d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset; switch( HW_MODE.vdm_mplayer_depth ){ @@ -345,7 +339,7 @@ static uint32_t draw_frame( uint8_t *src[] ){ char *s, *d; s = *src; - d = VIDEO_BUFFER_DRAW.data + vo_dga_vp_offset; + d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset; switch(SRC_MODE.vdm_conversion_func){ case VDM_CONV_NATIVE: @@ -360,7 +354,7 @@ static uint32_t draw_frame( uint8_t *src[] ){ // DBG-COde #if 0 - d = VIDEO_BUFFER_DRAW.data + vo_dga_vp_offset; + d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset; fillblock(d, 0, 10, 0x800000ff); fillblock(d, 10, 10, 0x8000ff00); fillblock(d, 20, 10, 0x80ff0000); @@ -429,7 +423,7 @@ static void flip_page( void ) #ifdef HAVE_DGA2 XDGASetViewport(vo_dga_dpy, XDefaultScreen(vo_dga_dpy), 0, - VIDEO_BUFFER_DISPLAY.y, + CURRENT_VIDEO_BUFFER.y, XDGAFlipRetrace); #else XF86DGASetViewPort(vo_dga_dpy, XDefaultScreen(vo_dga_dpy), @@ -448,7 +442,7 @@ static uint32_t draw_slice( uint8_t *src[],int stride[], if (scale_srcW) { uint8_t *dst[3] = { - VIDEO_BUFFER_DRAW.data + vo_dga_vp_offset, + CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset, 0, 0 }; @@ -457,7 +451,7 @@ static uint32_t draw_slice( uint8_t *src[],int stride[], /*scale_dstW*/ vo_dga_width * HW_MODE.vdm_bytespp, HW_MODE.vdm_bitspp, scale_srcW, scale_srcH, scale_dstW, scale_dstH); } else { - yuv2rgb(VIDEO_BUFFER_DRAW.data + vo_dga_vp_offset + + yuv2rgb(CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset + (vo_dga_width * y +x) * HW_MODE.vdm_bytespp, src[0], src[1], src[2], w,h, vo_dga_width * HW_MODE.vdm_bytespp,