2012-10-12 97 views
0

我正在使用zxing庫讀取QR碼的應用程序。我有ZxingWidgetController問題 - 顯示視圖時,應用程序處於後臺/未激活狀態(例如屏幕鎖定),相機中的圖像未顯示在屏幕上 - 只有背景可見,並且掃描儀看起來不工作。zXing(iOS版)黑白屏幕錯誤

當我再次調用initCapture方法,從相機一點點延遲視頻顯示後,但在這種情況下,每次當應用程序失去活性,我需要時間來重新初始化掃描儀 - 這種行爲是不舒服的。

這個bug可以在幾乎所有的應用上重複使用zXing,所以我想這是一些zXing的bug。

斑馬線initCapture方法的代碼是:

- (void)initCapture { 
#if HAS_AVFF 
    AVCaptureDeviceInput *captureInput = 
    [AVCaptureDeviceInput deviceInputWithDevice: 
      [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] 
              error:nil]; 
    if(!captureInput) 
    { 
     NSLog(@"ERROR - CaptureInputNotInitialized"); 
    } 


    AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init]; 
    captureOutput.alwaysDiscardsLateVideoFrames = YES; 
    if(!captureOutput) 
    { 
     NSLog(@"ERROR - CaptureOutputNotInitialized"); 
    } 


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

    NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
    NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; 

    NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 

    [captureOutput setVideoSettings:videoSettings]; 
    self.captureSession = [[[AVCaptureSession alloc] init] autorelease]; 
    self.captureSession.sessionPreset = AVCaptureSessionPresetMedium; // 480x360 on a 4 

    if([self.captureSession canAddInput:captureInput]) 
    { 
     [self.captureSession addInput:captureInput]; 
    } 
    else 
    { 
     NSLog(@"ERROR - cannot add input"); 
    } 
    if([self.captureSession canAddOutput:captureOutput]) 
    { 
     [self.captureSession addOutput:captureOutput]; 
    } 
    else 
    { 
     NSLog(@"ERROR - cannot add output"); 
    } 

    [captureOutput release]; 

    if (!self.prevLayer) 
    { 
     [self.prevLayer release]; 
    } 
    self.prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; 

    // NSLog(@"prev %p %@", self.prevLayer, self.prevLayer); 
    self.prevLayer.frame = self.view.bounds; 
    self.prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
    [self.view.layer addSublayer: self.prevLayer]; 

    [self.captureSession startRunning]; 
#endif 
} 

也許你們知道什麼是錯的?

回答

0

我不明白你的問題。如果應用程序在後臺/不活動,當然它不能工作。你應該說清楚。

+0

你有權利 - 我正在寫關於情況,當應用程序在後臺,而zxing初始化,然後移動到前面。 – Thaven