Update of /cvsroot/pure-data/externals/gridflow/format In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18681
Modified Files: aalib.c dc1394.c jpeg.c main.rb mpeg3.c png.c quartz.m quicktimeapple.c quicktimehw.c sdl.c videodev.c x11.c Log Message: 0.8.1
Index: main.rb =================================================================== RCS file: /cvsroot/pure-data/externals/gridflow/format/main.rb,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** main.rb 4 Oct 2005 02:02:15 -0000 1.1 --- main.rb 15 Mar 2006 04:37:46 -0000 1.2 *************** *** 238,242 **** def _0_reset; check_file_open; @format.seek 0; end def _1_grid(*a) send_out 0,:grid,*a end ! def _0_load name; _0_open name; _0_bang; _0_close end }
--- 238,242 ---- def _0_reset; check_file_open; @format.seek 0; end def _1_grid(*a) send_out 0,:grid,*a end ! def _0_load(*a); _0_open(*a); _0_bang; _0_close end }
*************** *** 351,356 **** r.close STDOUT.reopen w ! STDIN.reopen @stream ! @stream = File.open filename, "r" exec "gzip", "-dc" end --- 351,355 ---- r.close STDOUT.reopen w ! STDIN.reopen filename, "r" exec "gzip", "-dc" end *************** *** 365,370 **** w.close STDIN.reopen r ! STDOUT.reopen @stream ! @stream = File.open filename, "w" exec "gzip", "-c" end --- 364,368 ---- w.close STDIN.reopen r ! STDOUT.reopen filename, "w" exec "gzip", "-c" end *************** *** 376,380 **** when :out; "w" else raise "bad mode" end ! close case source when :file --- 374,378 ---- when :out; "w" else raise "bad mode" end ! @stream.close if @stream case source when :file *************** *** 722,725 **** --- 720,744 ---- def _0_rgrid_flow(data) @stream.write @bp.pack(data) end def _0_rgrid_end; @stream.flush end + self + }.subclass("#io:tk",1,1) { + install_rgrid 0 + def initialize(mode) + if mode!=:out then raise "only #out" end + super(mode,:file,"/tmp/tk-#{$$}-#{object_id}.ppm") + GridFlow.gui "toplevel .#{object_id}\n" + GridFlow.gui "wm title . GridFlow/Tk\n" + GridFlow.gui "image create photo #{object_id} -width 320 -height 240\n" + GridFlow.gui "pack [label .#{object_id}.im -image #{object_id}]\n" + end + def _0_rgrid_end + super + @stream.seek 0,IO::SEEK_SET + GridFlow.gui "image create photo #{object_id} -file /tmp/tk-#{$$}-#{object_id}.ppm\n" + end + def delete + GridFlow.gui "destroy .#{object_id}\n" + GridFlow.gui "image delete #{object_id}\n" + end + alias close delete }
Index: x11.c =================================================================== RCS file: /cvsroot/pure-data/externals/gridflow/format/x11.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** x11.c 4 Oct 2005 02:02:15 -0000 1.1 --- x11.c 15 Mar 2006 04:37:46 -0000 1.2 *************** *** 3,7 ****
GridFlow ! Copyright (c) 2001,2002,2003 by Mathieu Bouchard
This program is free software; you can redistribute it and/or --- 3,7 ----
GridFlow ! Copyright (c) 2001,2002,2003,2004,2005 by Mathieu Bouchard
This program is free software; you can redistribute it and/or *************** *** 20,25 **** along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */
#include "../base/grid.h.fcs" #include <ctype.h> --- 20,26 ---- along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ Note: some of the code was adapted from PDP's (the XVideo stuff). + */ #include "../base/grid.h.fcs" #include <ctype.h> *************** *** 29,40 **** #include <errno.h> #include <sys/time.h> - #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/StringDefs.h> - - /* X11 Error Handler type */ - typedef int (*XEH)(Display *, XErrorEvent *); - #ifdef HAVE_X11_SHARED_MEMORY #include <sys/ipc.h> --- 30,36 ---- *************** *** 42,49 **** #include <X11/extensions/XShm.h> #endif
\class FormatX11 < Format struct FormatX11 : Format { - template <class T> void frame_by_type (T bogus); /* at the Display/Screen level */ Display *display; /* connection to xserver */ --- 38,54 ---- #include <X11/extensions/XShm.h> #endif + #ifdef HAVE_X11_XVIDEO + #include <X11/extensions/Xv.h> + #include <X11/extensions/Xvlib.h> + #endif + + #undef L + #define L gfpost("%s:%d in %s",__FILE__,__LINE__,__PRETTY_FUNCTION__); + + /* X11 Error Handler type */ + typedef int (*XEH)(Display *, XErrorEvent *);
\class FormatX11 < Format struct FormatX11 : Format { /* at the Display/Screen level */ Display *display; /* connection to xserver */ *************** *** 51,84 **** Window root_window; Colormap colormap; /* for 256-color mode */ - long black,white; /* color numbers in default colormap */ short depth; ! bool use_shm; /* should use shared memory? */ bool use_stripes; /* use alternate conversion in 256-color mode */ - /* at the Window level */ - int autodraw; /* how much to send to the display at once */ Window window; /* X11 window number */ Window parent; /* X11 window number of the parent */ GC imagegc; /* X11 graphics context (like java.awt.Graphics) */ XImage *ximage; /* X11 image descriptor */ - char *name; /* window name (for use by window manager) */ Pt<uint8> image; /* the real data (that XImage binds to) */ bool is_owner; ! int pos_x, pos_y; ! P<BitPacking> bit_packing; P<Dim> dim; bool lock_size; bool override_redirect; - #ifdef HAVE_X11_SHARED_MEMORY XShmSegmentInfo *shm_info; /* to share memory with X11/Unix */ #endif ! ! Atom wmProtocolsAtom; ! Atom wmDeleteAtom; ! ! FormatX11 () : use_stripes(false), ! autodraw(1), window(0), ximage(0), name(0), image(Pt<uint8>()), is_owner(true), dim(0), lock_size(false), override_redirect(false) #ifdef HAVE_X11_SHARED_MEMORY --- 56,86 ---- Window root_window; Colormap colormap; /* for 256-color mode */ short depth; ! int transfer; /* 0=plain 1=xshm 2=xvideo */ bool use_stripes; /* use alternate conversion in 256-color mode */ /* at the Window level */ Window window; /* X11 window number */ Window parent; /* X11 window number of the parent */ GC imagegc; /* X11 graphics context (like java.awt.Graphics) */ XImage *ximage; /* X11 image descriptor */ Pt<uint8> image; /* the real data (that XImage binds to) */ bool is_owner; ! int32 pos[2]; P<BitPacking> bit_packing; P<Dim> dim; bool lock_size; bool override_redirect; #ifdef HAVE_X11_SHARED_MEMORY XShmSegmentInfo *shm_info; /* to share memory with X11/Unix */ #endif ! #ifdef HAVE_X11_XVIDEO ! int xv_format; ! int xv_port; ! XvImage *xvi; ! unsigned char *data; ! int last_encoding; ! #endif ! FormatX11 () : transfer(0), use_stripes(false), ! window(0), ximage(0), image(Pt<uint8>()), is_owner(true), dim(0), lock_size(false), override_redirect(false) #ifdef HAVE_X11_SHARED_MEMORY *************** *** 86,92 **** #endif {} ! void show_section(int x, int y, int sx, int sy); ! void set_wm_hints (int sx, int sy); void dealloc_image (); bool alloc_image (int sx, int sy); --- 88,94 ---- #endif {} ! template <class T> void frame_by_type (T bogus); void show_section(int x, int y, int sx, int sy); ! void set_wm_hints (); void dealloc_image (); bool alloc_image (int sx, int sy); *************** *** 96,100 **** void prepare_colormap(); Window FormatX11::search_window_tree (Window xid, Atom key, const char *value, int level=0); - \decl void initialize (...); \decl void frame (); --- 98,101 ---- *************** *** 102,111 **** \decl void call (); \decl void _0_out_size (int sy, int sx); - \decl void _0_draw (); - \decl void _0_autodraw (int autodraw); \decl void _0_setcursor (int shape); \decl void _0_hidecursor (); \decl void _0_set_geometry (int y, int x, int sy, int sx); \decl void _0_fall_thru (int flag); \grin 0 int }; --- 103,112 ---- \decl void call (); \decl void _0_out_size (int sy, int sx); \decl void _0_setcursor (int shape); \decl void _0_hidecursor (); \decl void _0_set_geometry (int y, int x, int sy, int sx); \decl void _0_fall_thru (int flag); + \decl void _0_transfer (Symbol s); + \decl void _0_title (String s=Qnil); \grin 0 int }; *************** *** 113,149 **** /* ---------------------------------------------------------------- */
void FormatX11::show_section(int x, int y, int sx, int sy) { ! if (y>dim->get(0)||x>dim->get(1)) return; ! if (y+sy>dim->get(0)) sy=dim->get(0)-y; ! if (x+sx>dim->get(1)) sx=dim->get(1)-x; #ifdef HAVE_X11_SHARED_MEMORY ! if (use_shm) { ! XSync(display,False); XShmPutImage(display,window,imagegc,ximage,x,y,x,y,sx,sy,False); ! /* should completion events be waited for? looks like a bug */ ! } else #endif ! XPutImage(display,window,imagegc,ximage,x,y,x,y,sx,sy); ! XFlush(display); }
/* window manager hints, defines the window as non-resizable */ ! void FormatX11::set_wm_hints (int sx, int sy) { if (!is_owner) return; ! XWMHints wmhints; ! XTextProperty window_name, icon_name; ! XSizeHints hints; ! // enable recommended, maximum and minimum size ! hints.flags=PSize|PMaxSize|PMinSize; ! // set those ! hints.min_width = hints.max_width = hints.width = sx; ! hints.min_height = hints.max_height = hints.height = sy; ! ! wmhints.input = True; ! wmhints.flags = InputHint; ! XStringListToTextProperty((char **)&name, 1, &window_name); ! XStringListToTextProperty((char **)&name, 1, &icon_name); ! XSetWMProperties(display, window, ! &window_name, &icon_name, NULL, 0, &hints, &wmhints, NULL); }
--- 114,163 ---- /* ---------------------------------------------------------------- */
+ static const char *xfers[3] = {"plain","xshm","xvideo"}; + void FormatX11::show_section(int x, int y, int sx, int sy) { ! int zy=dim->get(0), zx=dim->get(1); ! if (y>zy||x>zx) return; ! if (y+sy>zy) sy=zy-y; ! if (x+sx>zx) sx=zx-x; ! switch (transfer) { ! case 0: XPutImage(display,window,imagegc,ximage,x,y,x,y,sx,sy); ! XFlush(display); ! break; #ifdef HAVE_X11_SHARED_MEMORY ! case 1: XSync(display,False); XShmPutImage(display,window,imagegc,ximage,x,y,x,y,sx,sy,False); ! XFlush(display); ! //XPutImage( display,window,imagegc,ximage,x,y,x,y,sx,sy); ! // should completion events be waited for? looks like a bug ! break; #endif ! #ifdef HAVE_X11_XVIDEO ! case 2: ! break; ! #endif ! default: RAISE("transfer mode '%s' not available", xfers[transfer]); ! } }
/* window manager hints, defines the window as non-resizable */ ! void FormatX11::set_wm_hints () { ! Ruby title = rb_ivar_get(rself,SI(@title)); if (!is_owner) return; ! XWMHints wmh; ! char buf[256],*bufp=buf; ! if (title==Qnil) { ! sprintf(buf,"GridFlow (%d,%d,%d)",dim->get(0),dim->get(1),dim->get(2)); ! } else { ! sprintf(buf,"%.255s",rb_str_ptr(title)); ! } ! XTextProperty wtitle; XStringListToTextProperty((char **)&bufp, 1, &wtitle); ! XSizeHints sh; ! sh.flags=PSize|PMaxSize|PMinSize; ! sh.min_width = sh.max_width = sh.width = dim->get(1); ! sh.min_height = sh.max_height = sh.height = dim->get(0); ! wmh.input = True; ! wmh.flags = InputHint; ! XSetWMProperties(display,window,&wtitle,&wtitle,0,0,&sh,&wmh,0); }
*************** *** 203,218 **** }break; case ConfigureNotify:break; // as if we cared - case ClientMessage:{ - // tnx to vektor&walken - /* - if (e.xclient.message_type==wmProtocolsAtom - && e.xclient.format==32 - && (Atom)(e.xclient.data.l[0])==wmDeleteAtom) { - gfpost("This window is being closed, so this handler will close too!"); - rb_funcall(rself,SI(close),0); - return; - } - */ - }break; } } --- 217,220 ---- *************** *** 221,230 ****
\def void frame () { ! XGetSubImage(display, window, ! 0, 0, dim->get(1), dim->get(0), (unsigned)-1, ZPixmap, ximage, 0, 0); GridOutlet out(this,0,dim,NumberTypeE_find(rb_ivar_get(rself,SI(@cast)))); ! int sy=dim->get(0), sx=dim->get(1); ! int bs=dim->prod(1); STACK_ARRAY(uint8,b2,bs); for(int y=0; y<sy; y++) { --- 223,230 ----
\def void frame () { ! XGetSubImage(display, window, 0, 0, dim->get(1), dim->get(0), (unsigned)-1, ZPixmap, ximage, 0, 0); GridOutlet out(this,0,dim,NumberTypeE_find(rb_ivar_get(rself,SI(@cast)))); ! int sy=dim->get(0), sx=dim->get(1), bs=dim->prod(1); STACK_ARRAY(uint8,b2,bs); for(int y=0; y<sy; y++) { *************** *** 239,310 **** static FormatX11 *current_x11; static int FormatX11_error_handler (Display *d, XErrorEvent *xee) { ! gfpost("X11 reports Error: display=0x%08x",(int)d); ! gfpost("serial=0x%08x error=0x%08x request=0x%08lx minor=0x%08x", xee->serial, xee->error_code, xee->request_code, xee->minor_code); ! current_x11->use_shm = false; ! return 42; /* it seems that the return value is ignored. */ ! } ! ! void FormatX11::dealloc_image () { ! if (!ximage) return; ! if (use_shm) { ! #ifdef HAVE_X11_SHARED_MEMORY ! shmdt(ximage->data); ! XShmDetach(display,shm_info); ! if (shm_info) {delete shm_info; shm_info=0;} ! //ximage->data = new char[1]; // bogus ! //ximage->data = 0; ! //XDestroyImage(ximage); ! XFree(ximage); ! ximage = 0; ! image = Pt<uint8>(); ! #endif ! } else { ! //XDestroyImage(ximage); ! XFree(ximage); ! ximage = 0; ! image = Pt<uint8>(); } }
bool FormatX11::alloc_image (int sx, int sy) { ! dim = new Dim(sy, sx, 3); dealloc_image(); if (sx==0 || sy==0) return false; #ifdef HAVE_X11_SHARED_MEMORY ! if (use_shm) { shm_info = new XShmSegmentInfo; ximage = XShmCreateImage(display,visual,depth,ZPixmap,0,shm_info,sx,sy); ! if (!ximage) { ! gfpost("shm got disabled (1), retrying..."); ! return alloc_image(sx,sy);} ! shm_info->shmid = shmget(IPC_PRIVATE, ! ximage->bytes_per_line*ximage->height, IPC_CREAT|0777); ! if(shm_info->shmid < 0) ! RAISE("ERROR: shmget failed: %s",strerror(errno)); ! ximage->data = shm_info->shmaddr = ! (char *)shmat(shm_info->shmid,0,0); ! image = Pt<uint8>((uint8 *)ximage->data, ! ximage->bytes_per_line*sy); shm_info->readOnly = False; - current_x11 = this; - //XSetErrorHandler(FormatX11_error_handler); if (!XShmAttach(display, shm_info)) RAISE("ERROR: XShmAttach: big problem"); XSync(display,0); // make sure the server picks it up ! //XSetErrorHandler(0); ! /* yes, this can be done now. should cause auto-cleanup. */ shmctl(shm_info->shmid,IPC_RMID,0); ! if (!use_shm) { ! gfpost("shm got disabled (2), retrying..."); ! return alloc_image(sx,sy);} ! } else #endif ! ximage = XCreateImage(display,visual,depth,ZPixmap,0,0,sx,sy,8,0); ! if (!ximage) RAISE("can't create image"); ! image = ARRAY_NEW(uint8,ximage->bytes_per_line*sy); ! ximage->data = (int8 *)image; int status = XInitImage(ximage); if (status!=1) gfpost("XInitImage returned: %d", status); return true; }
--- 239,356 ---- static FormatX11 *current_x11; static int FormatX11_error_handler (Display *d, XErrorEvent *xee) { ! gfpost("XErrorEvent: type=0x%08x display=0x%08x xid=0x%08x", ! xee->type, xee->display, xee->resourceid); ! gfpost("... serial=0x%08x error=0x%08x request=0x%08lx minor=0x%08x", xee->serial, xee->error_code, xee->request_code, xee->minor_code); ! if (current_x11->transfer==1) { ! gfpost("(note: turning shm off)"); ! current_x11->transfer = 0; } + return 42; /* it seems that the return value is ignored. */ }
bool FormatX11::alloc_image (int sx, int sy) { ! dim = new Dim(sy,sx,3); dealloc_image(); if (sx==0 || sy==0) return false; + current_x11 = this; + switch (transfer) { + case 0: { + ximage = XCreateImage(display,visual,depth,ZPixmap,0,0,sx,sy,8,0); + int size = ximage->bytes_per_line*ximage->height; + if (!ximage) RAISE("can't create image"); + image = ARRAY_NEW(uint8,size); + ximage->data = (int8 *)image; + } break; #ifdef HAVE_X11_SHARED_MEMORY ! case 1: { shm_info = new XShmSegmentInfo; ximage = XShmCreateImage(display,visual,depth,ZPixmap,0,shm_info,sx,sy); ! if (!ximage) {gfpost("shm got disabled, retrying..."); transfer=0;} ! XSync(display,0); ! if (transfer==0) return alloc_image(sx,sy); ! int size = ximage->bytes_per_line*ximage->height; ! gfpost("size = %d",size); ! shm_info->shmid = shmget(IPC_PRIVATE,size,IPC_CREAT|0777); ! if(shm_info->shmid < 0) RAISE("shmget() failed: %s",strerror(errno)); ! ximage->data = shm_info->shmaddr = (char *)shmat(shm_info->shmid,0,0); ! if ((long)(shm_info->shmaddr) == -1) RAISE("shmat() failed: %s",strerror(errno)); ! gfpost("shmaddr=%p",shm_info->shmaddr); ! image = Pt<uint8>((uint8 *)ximage->data,size); shm_info->readOnly = False; if (!XShmAttach(display, shm_info)) RAISE("ERROR: XShmAttach: big problem"); XSync(display,0); // make sure the server picks it up ! // yes, this can be done now. should cause auto-cleanup. shmctl(shm_info->shmid,IPC_RMID,0); ! if (transfer==0) return alloc_image(sx,sy); ! } break; #endif ! #ifdef HAVE_X11_XVIDEO ! case 2: { ! unsigned int ver, rel, req, ev, err, i, j, adaptors, formats; ! XvAdaptorInfo *ai; ! if (Success != XvQueryExtension(display,&ver,&rel,&req,&ev,&err)) RAISE("XvQueryExtension problem"); ! /* find + lock port */ ! if (Success != XvQueryAdaptors(display,DefaultRootWindow(display),&adaptors,&ai)) RAISE("XvQueryAdaptors problem"); ! for (i = 0; i < adaptors; i++) { ! if (ai[i].type&XvInputMask && ai[i].type&XvImageMask) { ! for (j=0; j<ai[i].num_ports; j++) { ! if (Success != XvGrabPort(display,ai[i].base_id+j,CurrentTime)) RAISE("XvGrabPort problem"); ! xv_port = ai[i].base_id + j; ! goto breakout; ! } ! } ! } ! breakout: ! XFree(ai); ! if (!xv_port) RAISE("no xv_port"); ! /* unsigned int encn; ! XvEncodingInfo *enc; ! XvQueryEncodings(display,xv_port,&encn,&enc); ! for (i=0; i<encn; i++) gfpost("XvEncodingInfo: name='%s' encoding_id=0x%08x",enc[i].name,enc[i].encoding_id);*/ ! gfpost("pdp_xvideo: grabbed port %d on adaptor %d",xv_port,i); ! size_t size = sx*sy*4; ! data = new uint8[size]; ! for (i=0; i<size; i++) data[i]=0; ! xvi = XvCreateImage(display,xv_port,0x51525762,(char *)data,sx,sy); ! last_encoding=-1; ! if (!xvi) RAISE("XvCreateImage problem"); ! } break; ! #endif ! default: RAISE("transfer mode '%s' not available", xfers[transfer]); ! } int status = XInitImage(ximage); if (status!=1) gfpost("XInitImage returned: %d", status); return true; + retry: + gfpost("shm got disabled, retrying..."); + return alloc_image(sx,sy); + } + + void FormatX11::dealloc_image () { + if (!ximage) return; + switch (transfer) { + case 0: XFree(ximage); ximage=0; image=Pt<uint8>(); break; + #ifdef HAVE_X11_SHARED_MEMORY + case 1: + shmdt(ximage->data); + XShmDetach(display,shm_info); + if (shm_info) {delete shm_info; shm_info=0;} + XFree(ximage); + ximage = 0; + image = Pt<uint8>(); + break; + #endif + #ifdef HAVE_X11_XVIDEO + case 2: { + if (data) delete[] data; + if (xvi) XFree(xvi); + xvi=0; + data=0; + } + break; + #endif + default: RAISE("transfer mode '%s' not available",xfers[transfer]); + } }
*************** *** 313,322 **** if (sx<16) sx=16; if (sx>4096) RAISE("width too big"); alloc_image(sx,sy); - if (name) delete name; - name = new char[64]; - sprintf(name,"GridFlow (%d,%d,3)",sy,sx); if (window) { if (is_owner && !lock_size) { ! set_wm_hints(sx,sy); XResizeWindow(display,window,sx,sy); } --- 359,365 ---- if (sx<16) sx=16; if (sx>4096) RAISE("width too big"); alloc_image(sx,sy); if (window) { if (is_owner && !lock_size) { ! set_wm_hints(); XResizeWindow(display,window,sx,sy); } *************** *** 326,346 **** xswa.override_redirect = override_redirect; //#!@#$ window = XCreateWindow(display, ! parent, pos_x, pos_y, sx, sy, 0, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect|CWDontPropagate, &xswa); if(!window) RAISE("can't create window"); ! set_wm_hints(sx,sy); ! if (is_owner) { ! // fall_thru 0 ! XSelectInput(display, window, ! ExposureMask | StructureNotifyMask | PointerMotionMask | ! ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | ! KeyPressMask | KeyReleaseMask); ! XMapRaised(display, window); ! } else { ! // fall_thru 1 ! XSelectInput(display, window, ! ExposureMask | StructureNotifyMask); ! } imagegc = XCreateGC(display, window, 0, NULL); if (visual->c_class == PseudoColor) prepare_colormap(); --- 369,379 ---- xswa.override_redirect = override_redirect; //#!@#$ window = XCreateWindow(display, ! parent, pos[1], pos[0], sx, sy, 0, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect|CWDontPropagate, &xswa); if(!window) RAISE("can't create window"); ! set_wm_hints(); ! _0_fall_thru(0,0,is_owner); ! if (is_owner) XMapRaised(display, window); imagegc = XCreateGC(display, window, 0, NULL); if (visual->c_class == PseudoColor) prepare_colormap(); *************** *** 381,387 **** } } - if (autodraw==2) show_section(0,oy,sx,y-oy); } GRID_FINISH { ! if (autodraw==1) show_section(0,0,in->dim->get(1),in->dim->get(0)); } GRID_END
--- 414,419 ---- } } } GRID_FINISH { ! show_section(0,0,in->dim->get(1),in->dim->get(0)); } GRID_END
*************** *** 399,409 ****
\def void _0_out_size (int sy, int sx) { resize_window(sx,sy); } - \def void _0_draw () { show_section(0,0,dim->get(1),dim->get(0)); } - - \def void _0_autodraw (int autodraw) { - if (autodraw<0 || autodraw>2) - RAISE("autodraw=%d is out of range",autodraw); - this->autodraw = autodraw; - }
\def void _0_setcursor (int shape) { --- 431,434 ---- *************** *** 449,468 ****
void FormatX11::open_display(const char *disp_string) { - int screen_num; - Screen *screen; - - // Open an X11 connection display = XOpenDisplay(disp_string); if(!display) RAISE("ERROR: opening X11 display: %s",strerror(errno)); - // btw don't expect too much from Xlib error handling. // Xlib, you are so free of the ravages of intelligence... XSetErrorHandler(FormatX11_error_handler); ! ! screen = DefaultScreenOfDisplay(display); ! screen_num = DefaultScreen(display); visual = DefaultVisual(display, screen_num); - white = XWhitePixel(display,screen_num); - black = XBlackPixel(display,screen_num); root_window = DefaultRootWindow(display); depth = DefaultDepthOfScreen(screen); --- 474,485 ----
void FormatX11::open_display(const char *disp_string) { display = XOpenDisplay(disp_string); if(!display) RAISE("ERROR: opening X11 display: %s",strerror(errno)); // btw don't expect too much from Xlib error handling. // Xlib, you are so free of the ravages of intelligence... XSetErrorHandler(FormatX11_error_handler); ! Screen *screen = DefaultScreenOfDisplay(display); ! int screen_num = DefaultScreen(display); visual = DefaultVisual(display, screen_num); root_window = DefaultRootWindow(display); depth = DefaultDepthOfScreen(screen); *************** *** 470,488 ****
switch(visual->c_class) { ! case TrueColor: case DirectColor: /* without colormap */ ! break; ! case PseudoColor: /* with colormap */ ! if (depth!=8) ! RAISE("ERROR: with colormap, only supported depth is 8 (got %d)", ! depth); ! break; ! default: RAISE("ERROR: visual type not supported (got %d)", ! visual->c_class); }
! #ifdef HAVE_X11_SHARED_MEMORY ! use_shm = !! XShmQueryExtension(display); #else ! use_shm = false; #endif } --- 487,503 ----
switch(visual->c_class) { ! // without colormap ! case TrueColor: case DirectColor: break; ! // with colormap ! case PseudoColor: if (depth!=8) RAISE("ERROR: with colormap, only supported depth is 8 (got %d)", depth); break; ! default: RAISE("ERROR: visual type not supported (got %d)", visual->c_class); }
! #if defined(HAVE_X11_XVIDEO) ! transfer = 2; ! #elif defined(HAVE_X11_SHARED_MEMORY) ! transfer = !! XShmQueryExtension(display); #else ! transfer = 0; #endif } *************** *** 515,520 ****
\def void _0_set_geometry (int y, int x, int sy, int sx) { ! pos_x = x; ! pos_y = y; XMoveWindow(display,window,x,y); resize_window(sx,sy); --- 530,534 ----
\def void _0_set_geometry (int y, int x, int sy, int sx) { ! pos[0]=y; pos[1]=x; XMoveWindow(display,window,x,y); resize_window(sx,sy); *************** *** 523,546 ****
\def void _0_fall_thru (int flag) { ! if (flag) { ! gfpost("falling through!"); ! XSelectInput(display, window, ! ExposureMask | StructureNotifyMask); ! } else { ! gfpost("NOT falling through!"); ! XSelectInput(display, window, ! ExposureMask | StructureNotifyMask | ! PointerMotionMask | ! ButtonPressMask | ButtonReleaseMask | ButtonMotionMask); ! } XFlush(display); }
\def void initialize (...) { int sy=240, sx=320; // defaults rb_call_super(argc,argv); argv++, argc--; VALUE domain = argc<1 ? SYM(here) : argv[0]; int i; if (domain==SYM(here)) { open_display(0); --- 537,568 ----
\def void _0_fall_thru (int flag) { ! int mask = ExposureMask | StructureNotifyMask; ! if (flag) mask |= ExposureMask|StructureNotifyMask|PointerMotionMask| ! ButtonPressMask|ButtonReleaseMask|ButtonMotionMask| ! KeyPressMask|KeyReleaseMask; ! XSelectInput(display, window, mask); XFlush(display); }
+ \def void _0_transfer (Symbol s) { + if (s==SYM(plain)) transfer=0; + else if (s==SYM(xshm)) transfer=1; + else if (s==SYM(xvideo)) transfer=2; + else RAISE("unknown transfer mode (possible: plain xshm xvideo)"); + } + + \def void _0_title (String s=Qnil) { + rb_ivar_set(rself,SI(@title),s); + set_wm_hints(); + } + \def void initialize (...) { int sy=240, sx=320; // defaults rb_call_super(argc,argv); + rb_ivar_set(rself,SI(@title),Qnil); argv++, argc--; VALUE domain = argc<1 ? SYM(here) : argv[0]; int i; + char host[256]; if (domain==SYM(here)) { open_display(0); *************** *** 548,567 **** } else if (domain==SYM(local)) { if (argc<2) RAISE("open x11 local: not enough args"); ! char host[256]; ! int dispnum = NUM2INT(argv[1]); ! sprintf(host,":%d",dispnum); open_display(host); i=2; } else if (domain==SYM(remote)) { if (argc<3) RAISE("open x11 remote: not enough args"); ! char host[256]; ! strcpy(host,rb_sym_name(argv[1])); ! int dispnum = NUM2INT(argv[2]); ! sprintf(host+strlen(host),":%d",dispnum); open_display(host); i=3; } else if (domain==SYM(display)) { if (argc<2) RAISE("open x11 display: not enough args"); - char host[256]; strcpy(host,rb_sym_name(argv[1])); for (int k=0; host[k]; k++) if (host[k]=='%') host[k]==':'; --- 570,583 ---- } else if (domain==SYM(local)) { if (argc<2) RAISE("open x11 local: not enough args"); ! sprintf(host,":%ld",NUM2LONG(argv[1])); open_display(host); i=2; } else if (domain==SYM(remote)) { if (argc<3) RAISE("open x11 remote: not enough args"); ! sprintf(host,"%s:%ld",rb_sym_name(argv[1]),NUM2LONG(argv[2])); open_display(host); i=3; } else if (domain==SYM(display)) { if (argc<2) RAISE("open x11 display: not enough args"); strcpy(host,rb_sym_name(argv[1])); for (int k=0; host[k]; k++) if (host[k]=='%') host[k]==':'; *************** *** 575,588 **** for(;i<argc;i++) { Ruby a=argv[i]; ! if (a==SYM(override_redirect)) { ! override_redirect = true; ! } else if (a==SYM(use_stripes)){ ! use_stripes = true; ! } else { ! break; ! } }
! pos_x=pos_y=0; parent = root_window; if (i>=argc) { --- 591,600 ---- for(;i<argc;i++) { Ruby a=argv[i]; ! if (a==SYM(override_redirect)) override_redirect = true; ! else if (a==SYM(use_stripes)) use_stripes = true; ! else RAISE("argument '%s' not recognized",rb_sym_name(argv[i])); }
! pos[1]=pos[0]=0; parent = root_window; if (i>=argc) { *************** *** 595,599 **** Ruby title_s = rb_funcall(argv[i+1],SI(to_s),0); char *title = strdup(rb_str_ptr(title_s)); ! sy = sx = pos_y = pos_x = 0; parent = search_window_tree(root_window,XInternAtom(display,"WM_NAME",0),title); free(title); --- 607,611 ---- Ruby title_s = rb_funcall(argv[i+1],SI(to_s),0); char *title = strdup(rb_str_ptr(title_s)); ! sy = sx = pos[0] = pos[1] = 0; parent = search_window_tree(root_window,XInternAtom(display,"WM_NAME",0),title); free(title); *************** *** 618,622 **** } is_owner = false; ! sy = sx = pos_y = pos_x = 0; } } --- 630,634 ---- } is_owner = false; ! sy = sx = pos[0] = pos[1] = 0; } } *************** *** 626,631 ****
if (is_owner) { ! wmProtocolsAtom = XInternAtom(display, "WM_PROTOCOLS", False); ! wmDeleteAtom = XInternAtom(display, "WM_DELETE_WINDOW", False); XSetWMProtocols(display,window,&wmDeleteAtom,1); } --- 638,642 ----
if (is_owner) { ! Atom wmDeleteAtom = XInternAtom(display, "WM_DELETE_WINDOW", False); XSetWMProtocols(display,window,&wmDeleteAtom,1); } *************** *** 643,652 **** bit_packing = new BitPacking(disp_is_le, bpp/8, 3, masks); } break; } IEVAL(rself,"@clock = Clock.new self; @clock.delay 0"); }
\classinfo { ! IEVAL(rself,"install '#io:x11',1,1;@mode=6;@comment='X Window System Version 11.5'"); } \end class FormatX11 --- 654,665 ---- bit_packing = new BitPacking(disp_is_le, bpp/8, 3, masks); } break; + default: { RAISE("huh?"); } } IEVAL(rself,"@clock = Clock.new self; @clock.delay 0"); + show_section(0,0,sx,sy); }
\classinfo { ! IEVAL(rself,"install '#io:x11',1,1;@mode=6;@comment='X Window System Version 11.x'"); } \end class FormatX11 *************** *** 654,655 **** --- 667,669 ---- \startall } +
Index: mpeg3.c =================================================================== RCS file: /cvsroot/pure-data/externals/gridflow/format/mpeg3.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mpeg3.c 4 Oct 2005 02:02:15 -0000 1.1 --- mpeg3.c 15 Mar 2006 04:37:46 -0000 1.2 *************** *** 89,93 ****
\classinfo { ! IEVAL(rself,"install '#in:mpeg',1,1;@flags=4;" "@comment='Motion Picture Expert Group Format" " (using HeroineWarrior\'s)';suffixes_are'mpg,mpeg'"); --- 89,93 ----
\classinfo { ! IEVAL(rself,"install '#io:mpeg',1,1;@flags=4;" "@comment='Motion Picture Expert Group Format" " (using HeroineWarrior\'s)';suffixes_are'mpg,mpeg'");
Index: jpeg.c =================================================================== RCS file: /cvsroot/pure-data/externals/gridflow/format/jpeg.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** jpeg.c 4 Oct 2005 02:02:15 -0000 1.1 --- jpeg.c 15 Mar 2006 04:37:46 -0000 1.2 *************** *** 43,46 **** --- 43,47 ---- FILE *f; \decl Ruby frame (); + \decl void quality (short quality); \decl void initialize (Symbol mode, Symbol source, String filename); \grin 0 int *************** *** 109,112 **** --- 110,120 ---- }
+ \def void quality (short quality) { + quality = min(max((int)quality,0),100); + // should the last arg ("baseline") be set to true ? + // and what is it for? is it for accuracy of the DC component? + jpeg_set_quality(&cjpeg,quality,false); + } + \def void initialize (Symbol mode, Symbol source, String filename) { rb_call_super(argc,argv); *************** *** 122,126 **** \classinfo { IEVAL(rself, ! "install '#in:jpeg',1,1;@mode=6;" "include GridFlow::EventIO; suffixes_are'jpeg','jpg'"); } --- 130,134 ---- \classinfo { IEVAL(rself, ! "install '#io:jpeg',1,1;@mode=6;" "include GridFlow::EventIO; suffixes_are'jpeg','jpg'"); }
Index: quicktimehw.c =================================================================== RCS file: /cvsroot/pure-data/externals/gridflow/format/quicktimehw.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** quicktimehw.c 4 Oct 2005 02:02:15 -0000 1.1 --- quicktimehw.c 15 Mar 2006 04:37:46 -0000 1.2 *************** *** 3,7 ****
GridFlow ! Copyright (c) 2001,2002,2003 by Mathieu Bouchard
This program is free software; you can redistribute it and/or --- 3,7 ----
GridFlow ! Copyright (c) 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
This program is free software; you can redistribute it and/or *************** *** 22,37 **** */
#include "../base/grid.h.fcs" #include <stdlib.h> #include <string.h> #include <errno.h> - #include <quicktime/quicktime.h> - #include <quicktime/colormodels.h> - - #include <quicktime/lqt_version.h> - #ifdef LQT_VERSION - #include <quicktime/lqt.h> - #include <quicktime/lqt_codecinfo.h> - #endif
\class FormatQuickTimeHW < Format --- 22,30 ---- */
+ #define QUICKTIMEHW_INCLUDE_HERE #include "../base/grid.h.fcs" #include <stdlib.h> #include <string.h> #include <errno.h>
\class FormatQuickTimeHW < Format *************** *** 219,222 **** --- 212,217 ---- );
+ //#define L fprintf(stderr,"%s:%d in %s\n",__FILE__,__LINE__,__PRETTY_FUNCTION__); + #ifdef LQT_VERSION lqt_registry_init(); *************** *** 226,229 **** --- 221,228 ---- for (int i=0; i<n; i++) { const lqt_codec_info_t *s = lqt_get_video_codec_info(i); + if (!s->name) { + fprintf(stderr,"[#in quicktime]: skipping codec with null name!\n"); + continue; + } Ruby name = rb_str_new2(s->name); Ruby f = rb_ary_new2(s->num_fourccs);