2016-01-13 251 views
0

我在Nexus 5上使用6.0.1测试了我的Camera2实施。这个问题似乎与切换闪光模式有关。相当不可预测,改变闪光灯,并采取在AF的图片效果不是锁定和以下日志中出现:Android Camera2放弃自动对焦锁定

01-13 11:02:53.184 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.217 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.251 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.284 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.318 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.351 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.385 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.419 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.452 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.485 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.519 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.552 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.586 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.619 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:53.653 214 7175 I mm-camera: af_exhaustive_search: AEC not settled. Returning! 
01-13 11:02:54.031 214 7174 I mm-camera-sensor: port_sensor_process_aec_est:686 AEC EST DONE 
01-13 11:02:54.031 214 7174 I mm-camera-sensor: port_sensor_process_aec_est:686 AEC EST DONE 
01-13 11:02:54.031 214 7174 I mm-camera-sensor: port_sensor_process_aec_est:688 regular_led_trigger 1 
01-13 11:02:54.648 804 1488 D NetlinkSocketObserver: NeighborEvent{elapsedMs=947757, 10.12.0.254, [000D483417C9], RTM_NEWNEIGH, NUD_PROBE} 
01-13 11:02:56.000 197 791 D audio_hw_primary: disable_audio_route: reset and update mixer path: low-latency-playback 
01-13 11:02:56.001 197 791 D audio_hw_primary: disable_snd_device: snd_device(2: speaker) 
01-13 11:02:57.048 214 7192 E mm-camera-sensor: port_sensor_handle_upstream_module_event:1444 Reset previously set LED state! 
01-13 11:02:57.048 214 7192 I AEC_PORT: aec_port_proc_downstream_event: Received LED state timeout. Reset LED state! 
01-13 11:02:59.918 214 7175 E mm-camera: af_process_parse_stats: Invalid FV data! 
01-13 11:02:59.918 214 7175 E mm-camera: af_process: Error processing AF stats! 
01-13 11:02:59.952 214 7175 E mm-camera: af_process_parse_stats: Invalid FV data! 
01-13 11:02:59.952 214 7175 E mm-camera: af_process: Error processing AF stats! 

如果我继续拍照,而无需切换闪光灯模式,它工作正常(即使闪光灯总是)。只有当我切换闪光灯模式时,才会发生这种情况,并且哪种模式处于活动状态似乎并不重要(因此从闪光灯开启到闪光灯自动或闪光灯自动闪光灯关闭均可导致此错误)。

这是我改变闪光模式代码:

private void setFlashMode(String mode) { 
    if (mode.equals(CAMERA_FLASH_OFF)) { 
     mPreviewRequestBuilder 
       .set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON); 
     mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 
    } 
    else if(mode.equals(CAMERA_FLASH_AUTO)) { 
     mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH); 
     mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 
    } 
    else if(mode.equals(CAMERA_FLASH_ON)) { 
     mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH); 
     mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 
    } 
    else if(mode.equals(CAMERA_FLASH_TORCH)) { 
     mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON); 
     mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH); 
    } 
    try { 
     mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, 
       mBackgroundHandler); 
     if (getOnCameraParametersSetListener() != null) { 
      getOnCameraParametersSetListener().onCameraParametersSet(); 
     } 
    } catch (CameraAccessException e) { 
     Log.e(TAG, 
       ".setFlashMode() - Exception caught while setting the capture session request", 
       e); 
    } 
} 

任何帮助,非常感谢。

回答

0

看起来问题是在拨打setRepeatingRequest时未通过回拨。解决方法是添加原始回调。