Looks like it may be linked to something in Lion..in the AvFoundationVideoGrabber.mm this is where the focus is declared in initGrabber:
-(void) startCapture{
if( !bInitCalled ){
[self initCapture:60 capWidth:480 capHeight:320];
}
[self.captureSession startRunning];
[captureInput.device lockForConfiguration:nil];
//if( [captureInput.device isExposureModeSupported:AVCaptureExposureModeAutoExpose] ) [captureInput.device setExposureMode:AVCaptureExposureModeAutoExpose ];
if( [captureInput.device isFocusModeSupported:AVCaptureFocusModeAutoFocus] ) {
[captureInput.device setFocusMode:AVCaptureFocusModeAutoFocus ];
// captureInput.device AVCaptureTorchModeOn:
}
}But this line:
if( [captureInput.device isFocusModeSupported:AVCaptureFocusModeAutoFocus] ) {
[captureInput.device setFocusMode:AVCaptureFocusModeAutoFocus ]; should be:
if( [captureInput.device isFocusModeSupported:AVCaptureFocusModeAutoFocus] ) {
[captureInput.device setFocusMode:AVCaptureFocusModeContinuousAutoFocus ];According to the apple class ref plain autofocus will only focus once and then lock-off..only available in 10.7...strange functionality, although it makes sense in any 'tap to focus' method
class ref:
AVCaptureFocusMode
Constants to specify the focus mode of a capture device.
enum {
AVCaptureFocusModeLocked = 0,
AVCaptureFocusModeAutoFocus = 1,
AVCaptureFocusModeContinuousAutoFocus = 2,
};
typedef NSInteger AVCaptureFocusMode;
Constants
AVCaptureFocusModeLocked
The focus should be locked at the lens’s current position.
Available in Mac OS X v10.7 and later.
Declared in AVCaptureDevice.h.
AVCaptureFocusModeAutoFocus
The device should autofocus once and then change the focus mode to AVCaptureFocusModeLocked.
Available in Mac OS X v10.7 and later.
Declared in AVCaptureDevice.h.
AVCaptureFocusModeContinuousAutoFocus
The device should automatically focus when needed.
Available in Mac OS X v10.7 and later.
Declared in AVCaptureDevice.h.