diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-08-16 22:19:27 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-08-16 22:19:27 +0000 |
commit | 3595be7592f013cf2b9bd02d0bc6d4c99942771b (patch) | |
tree | 0721945ef8921f3951a835f383cfe4d3df0b9ffe /src/video_out/vidix/drivers/pm3_vid.c | |
parent | 6972e5c32cdb4e32c910f2e03937d46815866919 (diff) | |
download | xine-lib-3595be7592f013cf2b9bd02d0bc6d4c99942771b.tar.gz xine-lib-3595be7592f013cf2b9bd02d0bc6d4c99942771b.tar.bz2 |
update vidix
CVS patchset: 2466
CVS date: 2002/08/16 22:19:27
Diffstat (limited to 'src/video_out/vidix/drivers/pm3_vid.c')
-rw-r--r-- | src/video_out/vidix/drivers/pm3_vid.c | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/src/video_out/vidix/drivers/pm3_vid.c b/src/video_out/vidix/drivers/pm3_vid.c index 73c30c543..2078113cc 100644 --- a/src/video_out/vidix/drivers/pm3_vid.c +++ b/src/video_out/vidix/drivers/pm3_vid.c @@ -34,6 +34,9 @@ #include "pm3_regs.h" +/* MBytes of video memory to use */ +#define PM3_VIDMEM 24 + #if 0 #define TRACE_ENTER() fprintf(stderr, "%s: enter\n", __FUNCTION__) #define TRACE_EXIT() fprintf(stderr, "%s: exit\n", __FUNCTION__) @@ -47,6 +50,8 @@ pciinfo_t pci_info; void *pm3_reg_base; void *pm3_mem; +int pm3_vidmem = PM3_VIDMEM; + static vidix_capability_t pm3_cap = { "3DLabs GLINT R3/Permedia3 driver", @@ -131,8 +136,12 @@ int vixProbe(int verbose, int force) int vixInit(void) { + char *vm; pm3_reg_base = map_phys_mem(pci_info.base0, 0x20000); - pm3_mem = map_phys_mem(pci_info.base2, 0x2000000); + pm3_mem = map_phys_mem(pci_info.base1, 0x2000000); + if((vm = getenv("PM3_VIDMEM"))){ + pm3_vidmem = strtol(vm, NULL, 0); + } return 0; } @@ -235,9 +244,6 @@ int vixConfigPlayback(vidix_playback_t *info) TRACE_ENTER(); - if(!is_supported_fourcc(info->fourcc)) - return -1; - switch(info->fourcc){ case IMGFMT_YUY2: format = FORMAT_YUV422; @@ -257,22 +263,31 @@ int vixConfigPlayback(vidix_playback_t *info) pitch = src_w; - /* Assume we have 16 MB to play with */ - info->num_frames = 0x1000000 / (pitch * src_h * 2); + info->num_frames = pm3_vidmem*1024*1024 / (pitch * src_h * 2); if(info->num_frames > VID_PLAY_MAXFRAMES) info->num_frames = VID_PLAY_MAXFRAMES; - /* Start at 16 MB. Let's hope it's not in use. */ - base0 = 0x1000000; + /* Use end of video memory. Assume the card has 32 MB */ + base0 = (32-pm3_vidmem)*1024*1024; info->dga_addr = pm3_mem + base0; - info->dest.pitch.y = 2; - info->dest.pitch.u = 0; - info->dest.pitch.v = 0; - info->offset.y = 0; - info->offset.v = 0; - info->offset.u = 0; + if(info->fourcc == IMGFMT_YV12){ + info->dest.pitch.y = 2; + info->dest.pitch.u = 2; + info->dest.pitch.y = 2; + info->offset.y = 0; + info->offset.v = src_w * src_h; + info->offset.u = src_w * src_h * 3/2; + } else { + info->dest.pitch.y = 2; + info->dest.pitch.u = 0; + info->dest.pitch.v = 0; + info->offset.y = 0; + info->offset.v = 0; + info->offset.u = 0; + } info->frame_size = pitch * src_h * 2; + for(i = 0; i < info->num_frames; i++){ info->offsets[i] = info->frame_size * i; frames[i] = (base0 + info->offsets[i]) >> 1; @@ -280,6 +295,20 @@ int vixConfigPlayback(vidix_playback_t *info) compute_scale_factor(&src_w, &drw_w, &shrink, &zoom); +#if 0 + aperture_mode = READ_REG(PM3ByAperture1Mode); + if(info->fourcc == IMGFMT_YV12){ +/* WRITE_REG(PM3Aperture0, base0 >> 1); */ + WRITE_REG(PM3ByAperture1Mode, + PM3ByApertureMode_FORMAT_YUYV | + PM3ByApertureMode_PIXELSIZE_32BIT); + WRITE_REG(PM3Aperture1Stride, pitch); + WRITE_REG(PM3Aperture1YStart, base0 / 16); + WRITE_REG(PM3Aperture1VStart, (base0 + info->offset.v) / 16); + WRITE_REG(PM3Aperture1UStart, (base0 + info->offset.u) / 16); + } +#endif + WRITE_REG(PM3VideoOverlayBase0, base0 >> 1); WRITE_REG(PM3VideoOverlayStride, PM3VideoOverlayStride_STRIDE(pitch)); WRITE_REG(PM3VideoOverlayWidth, PM3VideoOverlayWidth_WIDTH(src_w)); @@ -327,7 +356,7 @@ int vixConfigPlayback(vidix_playback_t *info) overlay_control = PM3RD_VideoOverlayControl_KEY_COLOR | - PM3RD_VideoOverlayControl_MODE_MAINKEY | + PM3RD_VideoOverlayControl_MODE_OVERLAYKEY | PM3RD_VideoOverlayControl_DIRECTCOLOR_ENABLED; TRACE_EXIT(); @@ -366,5 +395,6 @@ int vixPlaybackOff(void) int vixPlaybackFrameSelect(unsigned int frame) { WRITE_REG(PM3VideoOverlayBase0, frames[frame]); +/* WRITE_REG(PM3Aperture0, frames[frame]); */ return 0; } |