[ please post back to the list, not private email ]
It looks like you are confused about the difference in CFFI between a pointer to a struct and a pointer to a pointer to a struct. Unfortunately, CFFI pointers are untyped so you don't get errors by doing the wrong thing.
To call cvFindContours as in the example, you need a pointer to a pointer to a struct (&contour in the C code). Whenever you want to translate C code that uses &variable, you need to allocate a pointer to hold the value and then dereference it after calling the function.
E.g. something like this (untested):
(cffi:with-foreign-object (contour-ptr (:pointer (:struct cv-seq))) ;; contour-ptr has foreign type (:pointer (:pointer (:struct cv-seq))) (cv-find-contours ... contour-ptr ...) (mem-ref contour-ptr '(:pointer (:struct cv-seq))))
__Martin
On Wed, 23 Oct 2013 17:04:07 -0700 (PDT), Joeish W said:
well I'm trying to learn about Sequences in opencv. So this was practice at making the code at this link
http://opencv-srf.blogspot.com/2011/09/object-detection-tracking-using-conto...
under the
Shape Detection & Tracking using Contours heading . in that code there is this line CvSeq* contours; since i dont know how to initialize a struct pointer in lisp as it is done there ive been using CvSeq* contours = cvCreateSeq(0, sizeof(CvSeq),sizeof(CvPoint),storage); which also initializes a CvSeq* and works in that example. if you could advise me initializing structs I would be most grateful.....Basically I'm starting off by mastering the CvSeq parts of the code. .
On Wednesday, October 23, 2013 3:23 AM, Martin Simmons martin@lispworks.com wrote:
On Tue, 22 Oct 2013 15:48:50 -0700 (PDT), Joeish W said:
take this for instance
CvPoint points[2];
id like to be able to cast points[2] to the CvPoint struct more info here http://docs.opencv.org/modules/core/doc/old_basic_structures.html?highlight=...
here is my struct which works for other things
;; (cffi:foreign-type-size '(:struct cv-point)) = 8 (cffi:defcstruct cv-point (x :int) (y :int))
put in a defparameter you cant just go
(defparameter points (cffi:foreign-alloc :int :count 2))
(defparameter a ((:struct cv-point) points))
you get an illegal function call error...any help is appreciated
Your example is inconsistent -- in C, your points variable is an array of two CvPoints, but in Lisp it is an array of two ints.
What are you really trying to do?
I suggest you post the C code that you are trying to convert. The opencv doc for CvPoint doesn't use casting or arrays of ints.
__Martin