comparison libvo/vo_dga.c @ 7515:72dd0b05d562

DGA1 fix by Fredrik Noring <noring@nocrew.org>
author arpi
date Fri, 27 Sep 2002 20:48:06 +0000
parents 5dd2cdd760fa
children abc3b12165b7
comparison
equal deleted inserted replaced
7514:d71300143887 7515:72dd0b05d562
684 684
685 685
686 686
687 //--------------------------------------------------------- 687 //---------------------------------------------------------
688 688
689 static void init_video_buffers(XDGAMode *modeline, uint8_t *buffer_base, 689 static void init_video_buffers(uint8_t *buffer_base,
690 int view_port_height,
691 int bytes_per_scanline,
692 int max_view_port_y,
690 int use_multiple_buffers) 693 int use_multiple_buffers)
691 { 694 {
692 int bytes_per_buffer = 695 int bytes_per_buffer = view_port_height * bytes_per_scanline;
693 modeline->viewportHeight * modeline->bytesPerScanline;
694 int i; 696 int i;
695 697
696 if(use_multiple_buffers) 698 if(use_multiple_buffers)
697 vo_dga_nr_video_buffers = 699 vo_dga_nr_video_buffers = max_view_port_y / view_port_height;
698 modeline->pixmapHeight / modeline->viewportHeight;
699 else 700 else
700 vo_dga_nr_video_buffers = 1; 701 vo_dga_nr_video_buffers = 1;
701 702
702 vo_dga_current_video_buffer = 0; 703 vo_dga_current_video_buffer = 0;
703 704
704 if(MAX_NR_VIDEO_BUFFERS < vo_dga_nr_video_buffers) 705 if(MAX_NR_VIDEO_BUFFERS < vo_dga_nr_video_buffers)
705 vo_dga_nr_video_buffers = MAX_NR_VIDEO_BUFFERS; 706 vo_dga_nr_video_buffers = MAX_NR_VIDEO_BUFFERS;
706 707
707 for(i = 0; i < vo_dga_nr_video_buffers; i++) 708 for(i = 0; i < vo_dga_nr_video_buffers; i++)
708 { 709 {
709 vo_dga_video_buffer[i].y = i * modeline->viewportHeight; 710 vo_dga_video_buffer[i].y = i * view_port_height;
710 vo_dga_video_buffer[i].data = 711 vo_dga_video_buffer[i].data =
711 buffer_base + i * bytes_per_buffer; 712 buffer_base + i * bytes_per_buffer;
712 713
713 // Clear video buffer. 714 // Clear video buffer.
714 memset(vo_dga_video_buffer[i].data, 0, bytes_per_buffer); 715 memset(vo_dga_video_buffer[i].data, 0, bytes_per_buffer);
728 int modecount, mX=VO_DGA_INVALID_RES, mY=VO_DGA_INVALID_RES , mVBI=100000, mMaxY=0, i,j=0; 729 int modecount, mX=VO_DGA_INVALID_RES, mY=VO_DGA_INVALID_RES , mVBI=100000, mMaxY=0, i,j=0;
729 int dga_modenum; 730 int dga_modenum;
730 XDGAMode *modelines=NULL, *modeline; 731 XDGAMode *modelines=NULL, *modeline;
731 XDGADevice *dgadevice; 732 XDGADevice *dgadevice;
732 unsigned char *vo_dga_base; 733 unsigned char *vo_dga_base;
733 int max_vpy_pos;
734 #else 734 #else
735 #ifdef HAVE_XF86VM 735 #ifdef HAVE_XF86VM
736 unsigned int vm_event, vm_error; 736 unsigned int vm_event, vm_error;
737 unsigned int vm_ver, vm_rev; 737 unsigned int vm_ver, vm_rev;
738 int i, j=0, have_vm=0; 738 int i, j=0, have_vm=0;
864 height = scale_dstH; 864 height = scale_dstH;
865 } 865 }
866 866
867 vo_dga_width = modelines[j].bytesPerScanline / HW_MODE.vdm_bytespp ; 867 vo_dga_width = modelines[j].bytesPerScanline / HW_MODE.vdm_bytespp ;
868 dga_modenum = modelines[j].num; 868 dga_modenum = modelines[j].num;
869 max_vpy_pos = modelines[j].maxViewportY;
870 modeline = modelines + j; 869 modeline = modelines + j;
871 870
872 XFree(modelines); 871 XFree(modelines);
873 modelines = NULL; 872 modelines = NULL;
874 873
1040 GrabModeAsync,GrabModeAsync, CurrentTime); 1039 GrabModeAsync,GrabModeAsync, CurrentTime);
1041 XGrabPointer (vo_dga_dpy, DefaultRootWindow(vo_dga_dpy), True, 1040 XGrabPointer (vo_dga_dpy, DefaultRootWindow(vo_dga_dpy), True,
1042 ButtonPressMask,GrabModeAsync, GrabModeAsync, 1041 ButtonPressMask,GrabModeAsync, GrabModeAsync,
1043 None, None, CurrentTime); 1042 None, None, CurrentTime);
1044 1043
1045 init_video_buffers(modeline, vo_dga_base, vo_doublebuffering); 1044 init_video_buffers(vo_dga_base,
1045 vo_dga_vp_height,
1046 vo_dga_width * HW_MODE.vdm_bytespp,
1047 #if HAVE_DGA2
1048 modeline->maxViewportY,
1049 #else
1050 vo_dga_vp_height,
1051 #endif
1052 vo_doublebuffering);
1046 1053
1047 mp_msg(MSGT_VO, MSGL_V, "vo_dga: Using %d frame buffer%s.\n", 1054 mp_msg(MSGT_VO, MSGL_V, "vo_dga: Using %d frame buffer%s.\n",
1048 vo_dga_nr_video_buffers, vo_dga_nr_video_buffers == 1 ? "" : "s"); 1055 vo_dga_nr_video_buffers, vo_dga_nr_video_buffers == 1 ? "" : "s");
1049 1056
1050 vo_dga_is_running = 1; 1057 vo_dga_is_running = 1;