[Mvpmc-cvs] mvplib/libosd surface.c,1.5,1.6 surface.h,1.2,1.3
Status: Alpha
Brought to you by:
gettler
From: Jon G. <ge...@us...> - 2005-07-06 03:36:59
|
Update of /cvsroot/mvpmc/mvplib/libosd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5376/libosd Modified Files: surface.c surface.h Log Message: Change libosd to reopen /dev/stbgfx for each drawing surface, so that osd_destroy_surface() actually causes the gfx module to release the memory associated with the surface. Index: surface.c =================================================================== RCS file: /cvsroot/mvpmc/mvplib/libosd/surface.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** surface.c 15 Sep 2004 03:30:25 -0000 1.5 --- surface.c 6 Jul 2005 03:36:48 -0000 1.6 *************** *** 70,75 **** { osd_surface_t *surface; ! int ret, num = 0; int i; if (w == -1) --- 70,76 ---- { osd_surface_t *surface; ! int num = 0; int i; + int fd; if (w == -1) *************** *** 85,88 **** --- 86,93 ---- gfx_init(); } + if ((fd=open("/dev/stbgfx", O_RDWR)) < 0) { + printf("dev open failed!\n"); + return NULL; + } PRINTF("%s(): stbgfx %d\n", __FUNCTION__, stbgfx); *************** *** 92,105 **** memset(surface, 0, sizeof(*surface)); - do { - ret = ioctl(stbgfx, GFX_FB_SET_OSD, &num); - } while ((ret != 0) && (num++ < 16)); - - if (ret != 0) - goto err; - - if (ioctl(stbgfx, GFX_FB_OSD_SURFACE, &num) != 0) - goto err; - memset(&surface->sfc, 0, sizeof(surface->sfc)); surface->sfc.width = w; --- 97,100 ---- *************** *** 107,140 **** surface->sfc.flags = 0x3f1533; surface->sfc.unknown = 1; ! if (ioctl(stbgfx, GFX_FB_SFC_ALLOC, &surface->sfc) != 0) goto err; memset(&surface->map, 0, sizeof(surface->map)); surface->map.map[0].unknown = surface->sfc.handle; ! if (ioctl(stbgfx, GFX_FB_MAP, &surface->map) != 0) goto err; - if ((surface->base[0]=mmap(NULL, surface->map.map[0].size, ! PROT_READ|PROT_WRITE, MAP_SHARED, stbgfx, surface->map.map[0].addr)) == MAP_FAILED) goto err; if ((surface->base[1]=mmap(NULL, surface->map.map[1].size, ! PROT_READ|PROT_WRITE, MAP_SHARED, stbgfx, surface->map.map[1].addr)) == MAP_FAILED) goto err; if ((surface->base[2]=mmap(NULL, surface->map.map[2].size, ! PROT_READ|PROT_WRITE, MAP_SHARED, stbgfx, surface->map.map[2].addr)) == MAP_FAILED) goto err; surface->display.num = num; - if ((ret=ioctl(stbgfx, GFX_FB_MOVE_DISPLAY, &surface->display)) != 0) - goto err; - PRINTF("Display width: %ld height: %ld\n", - surface->display.width, surface->display.height); - - if ((ret=ioctl(stbgfx, GFX_FB_SET_DISPLAY, &surface->display)) != 0) - goto err; - PRINTF("surface 0x%.8x created of size %d x %d [%d]\n", surface, w, h, surface->map.map[0].size); --- 102,126 ---- surface->sfc.flags = 0x3f1533; surface->sfc.unknown = 1; ! if (ioctl(fd, GFX_FB_SFC_ALLOC, &surface->sfc) != 0) goto err; memset(&surface->map, 0, sizeof(surface->map)); surface->map.map[0].unknown = surface->sfc.handle; ! if (ioctl(fd, GFX_FB_MAP, &surface->map) != 0) goto err; if ((surface->base[0]=mmap(NULL, surface->map.map[0].size, ! PROT_READ|PROT_WRITE, MAP_SHARED, fd, surface->map.map[0].addr)) == MAP_FAILED) goto err; if ((surface->base[1]=mmap(NULL, surface->map.map[1].size, ! PROT_READ|PROT_WRITE, MAP_SHARED, fd, surface->map.map[1].addr)) == MAP_FAILED) goto err; if ((surface->base[2]=mmap(NULL, surface->map.map[2].size, ! PROT_READ|PROT_WRITE, MAP_SHARED, fd, surface->map.map[2].addr)) == MAP_FAILED) goto err; surface->display.num = num; PRINTF("surface 0x%.8x created of size %d x %d [%d]\n", surface, w, h, surface->map.map[0].size); *************** *** 146,149 **** --- 132,137 ---- all[i] = surface; + surface->fd = fd; + return surface; *************** *** 159,162 **** --- 147,151 ---- { int i; + int fd = surface->fd; i = 0; *************** *** 170,179 **** munmap(surface->base[i], surface->map.map[i].size); - if (ioctl(stbgfx, GFX_FB_SFC_FREE, &surface->sfc) != 0) - return -1; - free(surface); ! ! PRINTF("surface destroyed\n"); return 0; --- 159,164 ---- munmap(surface->base[i], surface->map.map[i].size); free(surface); ! close(fd); return 0; *************** *** 184,192 **** { unsigned long fb_descriptor[2]; fb_descriptor[0] = surface->sfc.handle; fb_descriptor[1] = 1; ! ioctl(stbgfx, GFX_FB_ATTACH, fb_descriptor); } --- 169,178 ---- { unsigned long fb_descriptor[2]; + int fd = surface->fd; fb_descriptor[0] = surface->sfc.handle; fb_descriptor[1] = 1; ! ioctl(fd, GFX_FB_ATTACH, fb_descriptor); } Index: surface.h =================================================================== RCS file: /cvsroot/mvpmc/mvplib/libosd/surface.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** surface.h 22 Jun 2004 04:52:18 -0000 1.2 --- surface.h 6 Jul 2005 03:36:49 -0000 1.3 *************** *** 65,68 **** --- 65,69 ---- stbgfx_sfc_t sfc; unsigned char *base[3]; + int fd; }; |