简体   繁体   English

XCode条形码扫描仪Phonegap自动对焦

[英]XCode Barcode Scanner Phonegap Auto Focus

I develop phonegap ios application.I used barcode scanner zxing library. 我开发了phonegap ios应用程序。我使用了条形码扫描器zxing库。 But I have a problem How to implement camera auto focus ? 但是我有一个问题,如何实现相机自动对焦?

thank you 谢谢

My Code: 我的代码:

-(NSString*)setUpCaptureSession {
    NSError* error = nil;

    AVCaptureSession* captureSession = [[[AVCaptureSession alloc] init] autorelease];
    self.captureSession = captureSession;

    AVCaptureDevice* device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if (!device) return @"unable to obtain video capture device";

    AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
    if (!input) return @"unable to obtain video capture device input";

    AVCaptureVideoDataOutput* output = [[[AVCaptureVideoDataOutput alloc] init] autorelease];
    if (!output) return @"unable to obtain video capture output";

    NSDictionary* videoOutputSettings = [NSDictionary
                                         dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA]
                                         forKey:(id)kCVPixelBufferPixelFormatTypeKey
                                         ];


    output.alwaysDiscardsLateVideoFrames = YES;
    output.videoSettings = videoOutputSettings;

    [output setSampleBufferDelegate:self queue:dispatch_get_main_queue()];

    if (![captureSession canSetSessionPreset:AVCaptureSessionPresetMedium]) {
        return @"unable to preset medium quality video capture";
    }

    captureSession.sessionPreset = AVCaptureSessionPresetMedium;

    if ([captureSession canAddInput:input]) {
        [captureSession addInput:input];
    }
    else {
        return @"unable to add video capture device input to session";
    }

    if ([captureSession canAddOutput:output]) {
        [captureSession addOutput:output];
    }
    else {
        return @"unable to add video capture output to session";
    }

    // setup capture preview layer
    self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];

    // run on next event loop pass [captureSession startRunning]
    [captureSession performSelector:@selector(startRunning) withObject:nil afterDelay:0];
    return nil;
}

Unfortunately it appears that the plugin you are using doesn't expose the capture device directly. 不幸的是,您使用的插件似乎并没有直接公开捕获设备。 It does, however, expose the AVCaptureSession via the captureSession property. 但是,它确实通过captureSession属性公开了AVCaptureSession From this property you should be able to work backwards to get the AVCaptureInputDevice 通过此属性,您应该可以向后工作以获取AVCaptureInputDevice

AVCaptureSession *session=[zxing captureSession];  //Assuming zxing the variable holding a reference to your zxing instance
NSArray *inputs= [session inputs];
AVCaptureInputDevice *input=(AVCaptureInputDevice *)inputs[0];   // Obtain first input device
AVCaptureDevice *device=input.device;

NSError *error;

if ([device lockForConfiguration:&error])
{
    device.focusMode=AVCaptureFocusModeContinuousAutoFocus;
   [device unlockForConfiguration];
}
else
{
  // TODO Handle the device lock error
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM