Hi,<div><br></div><div>For a test project, i was creating a CFFI interface to the OpenCV library and my limited knowledge of CFFI has left me wondering how to achieve something.</div><div><br></div><div>According to the documentation on the OpenCV wiki, in order to start capturing from a webcam one would call the following function:</div>


<div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>CvCapture* cvCreateCameraCapture (int index)</div><div><br></div></blockquote><div>
The CvCapture is an opaque structure without public interface, so i simply store the pointer returned by the function.</div><div>To end the image capturing, one would release the capture through the function:</div>
<div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>void cvReleaseCapture(CvCapture** capture)</div></blockquote><div><br></div><div>On the OpenCV wiki there is a sample program (<a href="http://opencv.willowgarage.com/wiki/CameraCapture" target="_blank">http://opencv.willowgarage.com/wiki/CameraCapture</a>) that basically has:</div>


<div><br></div><div><br></div><div>int main()</div><div>{</div><div>    ...</div><div><br></div><div>    CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );</div><div><br></div><div>    ...</div><div><br></div><div>    cvReleaseCapture( &capture );</div>


<div><br></div><div>    ...</div><div>}</div><div><br></div><div>I've defined the foreign functions as:</div><div><br></div><div><div>(cffi:defcfun ("cvCreateCameraCapture" create-camera-capture) :pointer</div>


<div>  (index :int))</div><div><br></div><div>(cffi:defcfun ("cvReleaseCapture" %release-capture) :void</div><div>  (capture :pointer))</div></div><div><br></div><div>Then in my program i call 'create-camera-capture and it works, the webcam lights up and starts capturing. I even managed to simulate the &capture behavior by renaming the previous declaration of release-capture to %release-capture and creating a new definition like:</div>

<div><br></div><div><div>(defun release-capture (capture*)</div><div>  (cffi:with-foreign-object (capture** :long)</div><div>    (setf (cffi:mem-ref capture** :long)</div><div>          (cffi:pointer-address capture*))</div>

<div>    (%release-capture capture**)))</div><div><br></div><div>It works but it doesn't feel all that nice, is this the best/correct way of achieving the same as the C code?</div><div><br></div><div>Cheers,</div><div>
<br></div><div>Alex Paes</div></div>