gephex--main--0.4--patch-1871
[email protected] Sat, 2 Apr 2005 01:23:48 +0200 (CEST)
| Newsgroups | gmane.comp.video.gephex.devel |
|---|---|
| Message-ID | <[email protected]> |
Archive: [email protected] New revision: gephex--main--0.4--patch-1871 -- Revision: gephex--main--0.4--patch-1871 Archive: [email protected] Creator: The Gephex Source Archive <[email protected]> Date: Sat Apr 2 01:20:47 CEST 2005 Standard-date: 2005-04-01 23:20:47 GMT Modified-files: modules/pluc.py modules/src/frboutmodule/x11output.c New-patches: [email protected]/gephex--main--0.4--patch-1871 [email protected]/gephex--martin--0.4--patch-65 [email protected]/gephex--martin--0.4--patch-66 Summary: [MERGE-REQUEST] pluc fix from michael Keywords: Patches applied: * [email protected]/gephex--martin--0.4--patch-65 sync with main * [email protected]/gephex--martin--0.4--patch-66 pluc.py patch from michael (part of bug #94) * added files {arch}/gephex/gephex--main/gephex--main--0.4/[email protected]/patch-log/patch-1871 {arch}/gephex/gephex--martin/gephex--martin--0.4/[email protected]/patch-log/patch-65 {arch}/gephex/gephex--martin/gephex--martin--0.4/[email protected]/patch-log/patch-66 * modified files --- orig/modules/pluc.py +++ mod/modules/pluc.py @@ -217,7 +217,7 @@ def createInputSpec(input): (id,options) = input if options.has_key('default'): - default = 'default='+options['default'] + default = 'default=['+options['default']+']' else: default = '' --- orig/modules/src/frboutmodule/x11output.c +++ mod/modules/src/frboutmodule/x11output.c @@ -65,7 +65,7 @@ char* error_text, int text_len); */ static int init_xshm_stuff(struct DriverInstance* sh, char* error_text, - int text_len); + int text_len, unsigned int size); static void deinit_xshm_stuff(struct DriverInstance* sh); @@ -103,6 +103,7 @@ XShmSegmentInfo shminfo; int completion_type; int event_pending; + unsigned int shm_size; // used if Xv extension is available XvPortID xv_port; @@ -187,6 +188,7 @@ sh->xv_port = 0xffffffff; sh->xv_format_id = -1; sh->xv_image = 0; + sh->shm_size = 0; if (strcmp(server_name,"default") == 0) server_name_ptr = getenv("DISPLAY"); //use the DISPLAY environment variable @@ -270,6 +272,15 @@ if ((sh->used_extensions & USE_XSHM) == USE_XSHM) { + if (init_xshm_stuff(sh, error_text, text_len, + 640 * 480 * 4) == 0) + { + deinit_xv_stuff(sh); + XDestroyWindow(sh->display, sh->win); + free(sh); + return 0; + } + if ((sh->used_extensions & USE_XV) == 0) { /* create shared memory ximage */ @@ -446,6 +457,14 @@ convert_to_16_inplace(sh->ximage->data, sh->width, sh->height); // blit shared mem image + + // todo handle the error message + if ( sh->shm_size != sh->width * sh->height * 4 ) + { + deinit_xshm_stuff(sh); + init_xshm_stuff( sh, 0, 0, sh->width * sh->height * 4 ); + } + XShmPutImage(sh->display, sh->win, sh->gc, sh->ximage, 0, 0, 0, 0, sh->width, sh->height, True); sh->event_pending = 1; @@ -484,8 +503,14 @@ height != sh->image_height) { if (sh->xv_image) - XFree(sh->xv_image); + { + XFree(sh->xv_image); + deinit_xshm_stuff(sh); + } + + // todo handle the error message + init_xshm_stuff(sh,0 ,0 ,width*height*4); sh->xv_image = XvShmCreateImage(sh->display, sh->xv_port, sh->xv_format_id, @@ -925,28 +950,26 @@ /***************************************************************************/ static int init_xshm_stuff(struct DriverInstance* sh, char* error_text, - int text_len) + int text_len, unsigned int size) { sh->completion_type = XShmGetEventBase(sh->display) + ShmCompletion; sh->event_pending = 0; /* allocate shared memory */ - - // changed flags from 0777 to 0666, see - // http://lists.apple.com/archives/unix-porting/2004/Apr/msg00081.html sh->shminfo.shmid = shmget (IPC_PRIVATE, - MAX_RES_X * MAX_RES_Y * 4, - 0666 | IPC_CREAT); + size, + IPC_CREAT|0777); if (sh->shminfo.shmid == -1) { - snprintf(error_text, text_len, "shmget() failed, errno=%i!", errno); + snprintf(error_text, text_len, "shmget() failed!"); return 0; } /* attach shared memory to our process */ sh->shminfo.shmaddr = shmat (sh->shminfo.shmid, 0, 0); - if (sh->shminfo.shmaddr == (void*) -1) // TODO + + if (sh->shminfo.shmaddr == -1) { shmctl (sh->shminfo.shmid, IPC_RMID, 0); snprintf(error_text, text_len, "shmat() failed!"); @@ -967,6 +990,8 @@ return 0; } + sh->shm_size=size; // remember the size og the shm segment + return 1; } @@ -981,6 +1006,8 @@ sh->shminfo.shmaddr = 0; } + + sh->shm_size=0; // remember the size og the shm segment } static int init_xv_stuff(struct DriverInstance* sh, char* error_text,