From: Sam S. <sd...@gn...> - 2008-09-28 05:33:31
|
Hi, > * Dmitri Hrapof <uencbs@pbzzba-yvfc.eh> [2008-09-27 11:46:21 +0000]: > > Out of curiosity I decided to find out which one is the fastest - > CLISP or Corman Lisp. > However, I got "No more room for LISP objects". > Offending function is > > (import-types "System.Drawing" "Bitmap" "Rectangle" "Imaging.ImageLockMode") > (use-namespace "System.Runtime.InteropServices") > (use-namespace "System.Drawing") > (use-namespace "System.Drawing.Imaging") > (use-namespace "System.IO") > (use-namespace "Microsoft.Win32") > (import-type "Microsoft.Win32.Registry") > > (defun decode-jpeg (file-or-stream) > (let ((b (new "Bitmap" file-or-stream))) > (let ((h (property b "Height")) (w (property b "Width")) > (f (property b "PixelFormat"))) > (let ((r (new "Rectangle" 0 0 w h)) > (l (integer-to-enum 2 "ImageLockMode"))) > (let ((bd (invoke b "LockBits" r l f))) > (let ((s (property bd "Stride")) > (sc (property bd "Scan0"))) > (let ((pt (ffi:unsigned-foreign-address (invoke sc "ToInt32"))) > (ft (ffi:parse-c-type `(ffi:c-array ffi:uchar ,(* h s)))) > (a (make-array (* h s) :element-type '(unsigned-byte 8)))) you do know about LET*, don't you? :-) > (dotimes (i h) > (dotimes (j w) > (let ((k (+ (* i w 3) (* j 3))) > (k1 (+ (* i s) (* j 3)))) > (dotimes (y 3) > (setf (aref a (+ k y)) (ffi:memory-as pt ft (+ k1 y))))))) > (invoke b "UnlockBits" bd) > (values a h w 3)))))))) > > with a jpeg image approx. 1500x2200 pixels. It uses RNDZL to decode jpeg, > works with Corman Lisp and LispWorks (with their corresponding FFIs). So maybe > I screwed something in CLISP ffi code. > > I tried to add "-m 256M", but to no avail. Clisp 2.46, Windows XP SP3. well, I cannot reproduce this because I don't have these "use-namespace" at al :-( -- Sam Steingold (http://sds.podval.org/) on Ubuntu 8.04 (hardy) http://jihadwatch.org http://thereligionofpeace.com http://honestreporting.com http://truepeace.org http://camera.org http://openvotingconsortium.org Beauty is only a light switch away. |