<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I have a few lines to get you going from objc... I use OpenCL and OpenGL in the&nbsp;<span class="Apple-style-span" style="font-family: Menlo; font-size: 11px; ">captureOutput</span>&nbsp;delegate so your on your own there but this would be a start.<div><br><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">- (<span style="color: #cd00a3">void</span>)awakeFromNib</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; NSError *error = <span style="color: #cd00a3">nil</span>;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; <span style="color: #cd00a3">if</span> (!mCaptureSession)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 139, 0); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; </span>// Set up a capture session that outputs raw frames</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">BOOL</span><span class="Apple-tab-span" style="white-space:pre">        </span>success;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; mCaptureSession = [[QTCaptureSession alloc] init];</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 139, 0); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; </span>// Find a video device</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; QTCaptureDevice *device = [QTCaptureDevice defaultInputDeviceWithMediaType: QTMediaTypeVideo];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; success = [device open:&amp;error];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">if</span> (!success)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[NSAlert alertWithError:error] runModal];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">return</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 139, 0); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; </span>// Add a device input for that device to the capture session</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; mCaptureDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:device];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; success = [mCaptureSession addInput:mCaptureDeviceInput error: &amp;error];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">if</span> (!success)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[NSAlert alertWithError:error] runModal];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">return</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 139, 0); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; </span>// Add a decompressed video output that returns raw frames to the session</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; mCaptureDecompressedVideoOutput = [[QTCaptureDecompressedVideoOutput alloc] init];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; [mCaptureDecompressedVideoOutput setDelegate:<span style="color: #cd00a3">self</span>];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; success = [mCaptureSession addOutput:mCaptureDecompressedVideoOutput error: &amp;error];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">if</span> (!success)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[NSAlert alertWithError:error] runModal];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cd00a3">return</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 139, 0); "><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; </span>// Start the session</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; &nbsp; &nbsp; [mCaptureSession startRunning];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">- (<span style="color: #cd00a3">void</span>)dealloc</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; [mCaptureSession release];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; [mCaptureDeviceInput release];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; [mCaptureDecompressedVideoOutput release];</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px">&nbsp;&nbsp; &nbsp;<br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">&nbsp; &nbsp; [<span style="color: #cd00a3">super</span> dealloc];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">}</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 139, 0); ">// This delegate method is called whenever the QTCaptureDecompressedVideoOutput receives a frame</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">- (<span style="color: #cd00a3">void</span>)captureOutput:(QTCaptureOutput *)captureOutput didOutputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection *)connection</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><font class="Apple-style-span" face="'Helvetica Neue'"><span class="Apple-style-span" style="font-size: medium;"><font class="Apple-style-span" face="Menlo" size="3"><span class="Apple-style-span" style="font-size: 11px;">}</span></font></span></font></div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><font class="Apple-style-span" face="'Helvetica Neue'"><span class="Apple-style-span" style="font-size: medium;"><font class="Apple-style-span" face="Menlo" size="3"><span class="Apple-style-span" style="font-size: 11px;"><br></span></font></span></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><font class="Apple-style-span" face="'Helvetica Neue'"><span class="Apple-style-span" style="font-size: medium;"><font class="Apple-style-span" face="Menlo" size="3"><span class="Apple-style-span" style="font-size: 11px;"><br></span></font></span></font></div><div><div>On Jan 11, 2011, at 6:58 AM, Ben Dean wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hmm, thanks, I really appreciate the help. &nbsp;Obviously an oversight on my part, but I'm targeting OSX and the built-in apple "iSight" or whatever they iCall it. It looks like it's on the list for UVC. I'm pretty new to this game, and have very little experience with language interop and device drivers, so I'd really value an overall idea what the interface between a driver and Racket would look like. I think the target audience of the UVC site knows more about this sort of thing than I do, so any additional pointers would be great.&nbsp;<br>

<br><div class="gmail_quote">On Tue, Jan 11, 2011 at 6:51 AM, Neil Van Dyke <span dir="ltr">&lt;<a href="mailto:neil@neilvandyke.org">neil@neilvandyke.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">

Noel Welsh wrote at 01/11/2011 05:31 AM:<div class="im"><br>
<blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
Then depending on the platform and webcam different APIs are available.<br>
 &nbsp;<br>
</blockquote>
<br></div>
Yeah, webcam support has always been a mess, on all platforms.<br>
<br>
If you're on GNU/Linux, I'm not sure of the current best approach, but I guess would probably start with Linux UVC and some popular, high-quality USB camera that is supported by UVC. &nbsp;<a href="http://www.ideasonboard.org/uvc/" target="_blank">http://www.ideasonboard.org/uvc/</a><br>


<br>
I'd have the compatibility list on that page in one hand, and <a href="http://Newegg.com">Newegg.com</a> in the other hand. &nbsp;And before buying, I'd do a quick Google for the make&amp;model and "linux" and "uvc" to see if anyone is reporting problems. &nbsp;It happens.<br>


<br>
You could also do eBay, where I recall there have been some sweet spots of premium cameras that are supported well by Linux but that are inexpensive now. &nbsp;(Sorry, I don't remember particular models anymore.) &nbsp;One of the nice things about slightly-older devices is that there's been time for Linux device support to be implemented and tested.<br>


<br>
If you're using a less-popular slightly-older camera, beware that some manufacturers have made engineering changes to their cameras without changing the model number, sometimes breaking drivers that have been reverse-engineered. &nbsp;Compatibility tables might not be aware of the multiple variants -- sometimes someone just reported that a particular model worked (perhaps with a small patch for the ID or something), so that model would marked as supported in the table, without any awareness that there are multiple variants.<br>

<font color="#888888">
<br>
-- <br>
<a href="http://www.neilvandyke.org/" target="_blank">http://www.neilvandyke.org/</a><br>
</font></blockquote></div><br>
_________________________________________________<br> &nbsp;For list-related administrative tasks:<br> &nbsp;<a href="http://lists.racket-lang.org/listinfo/users">http://lists.racket-lang.org/listinfo/users</a></blockquote></div><br></div></div></body></html>