2014-11-15 3 views
5

Google은 Android 용 실시간 동영상 처리 앱을 개발하는 개발자 그룹입니다. 최근에 고객이 Nexus 10 기기에서만 발생하는 앱 정지를 신고했습니다. 우리는 우리 자신과 테스트 장치 구입 :Nexus 10 camera.release가 30 초 동안 중지됩니다.

  • 장치가 미리 설치 안드로이드 4.2와 함께 제공된를 - 우리의 응용 프로그램
  • 에는 중단이나 정지가 4.3에 안드로이드를 업그레이드 한 후 없었다, 카메라를 폐쇄에 얼어 붙었다 우리의 응용 프로그램 (설명은 아래 참조)
  • 4.4로 업그레이드하여, 우리의 응용 프로그램은 최신 안드로이드 5.0 넥서스 10 출하시 이미지를 깜박
  • 를 냉동 보관하고, 우리의 응용 프로그램은 여전히 ​​냉동 보관
  • (편집) - 문제는 안드로이드 넥서스 10을 업그레이드함으로써 해결되었다 5.1
  • 동결에 대한 1,363,210

더 많은 정보 :

우리의 응용 프로그램은, 활동의 onResume 방법에서 카메라를 열어 미리 콜백을 설치합니다 (이것은 1920 × 1080이다 넥서스 10) 우리의 처리 요구에 최선의 미리보기 크기를 설정합니다 (수면에서 다시 시작하는 경우) 미리보기를 시작하거나 SurfaceView 콜백의 surfaceCreated 메소드에 위임을 위임합니다. onPause 메서드에서 우리의 앱은 미리보기 콜백을 제거하고 카메라 미리보기를 중지하고 카메라를 해제합니다. 그러나 우리의 조사에 따르면 camera.release 방법은 완료하는 데 30 초가 걸리는 경우가 있습니다. 30 초 동안 우리는 UI 스레드에서 카메라를 제어했기 때문에 앱이 멈췄습니다. 나중에 우리는 이벤트 핸들러 스레드를 분리하기 위해 카메라 컨트롤을 옮겼다. 이제 camera.release은 그 스레드를 정지시킨다. 사용자에게는 보이지 않지만 (UI는 차단되지 않음) 사용자가 카메라를 해제 할 때까지 (즉, camera.release이 호출 된 후 30 초) 사용자는 앱에서 카메라를 사용할 수 없습니다. - 카메라 활동 기회를 높이기 위해 신속하게 몇 번을 다시 시작해야합니다

10-21 16:08:54.193: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight 
10-21 16:08:54.193: E/Camera2Client(122): stopPreviewL: Camera 0: Waiting to stop streaming failed: Connection timed out (-110) 
10-21 16:09:04.293: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight 
10-21 16:09:04.293: E/Camera2Client(122): stopPreviewL: Camera 0: Waiting to stop streaming failed: Connection timed out (-110) 
10-21 16:09:14.453: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight 
10-21 16:09:14.453: E/Camera2-StreamingProcessor(122): deletePreviewStream: Error waiting for preview to drain: Connection timed out (-110) 
10-21 16:09:24.573: E/Camera2-Device(122): waitUntilDrained: Waited 10050000 us, 2 requests still in flight 
10-21 16:09:24.573: E/Camera2-CallbackProcessor(122): deleteStream: Error waiting for HAL to drain: Connection timed out (-110) 
10-21 16:09:24.578: E/libexynosv4l2(122): failed to ioctl: VIDIOC_REQBUFS (-1 - Invalid argument) 
10-21 16:09:24.578: E/ExynosCameraHAL2(122): cam_int_reqbufs: VIDIOC_REQBUFS (fd:35) failed (-1) 
10-21 16:09:24.843: E/Camera2-CallbackProcessor(122): deleteStream: Camera 0: Device does not exist 
10-21 16:09:24.853: E/Camera2-StreamingProcessor(122): deletePreviewStream: Camera 0: Device does not exist 

당신은 here이 동작을 트리거하는 최소한의 예를 볼 수 있습니다 요령 기간 동안

우리는 카메라 서비스에서 다음 로그 출력을 관찰 이 상태에 들어가기. 우리는 앱에서 예제 앱보다 훨씬 더 자주 발생하는 것으로 나타났습니다. 우리의 애플 리케이션은 일부 무거운 프레임 처리, 또한 이미지 처리를위한 GPU를 사용하고 또한 카메라는 가속도계 및 방향 센서를 사용합니다 - 그 모든 예제 애플 리케이션에 포함되지 않습니다.

같은 문제 (question 1question 2)에 대한 몇 가지 대답이없는 StackOverflow 질문도 있습니다. 앞서 언급 한 로그 출력으로 이어질 코드 패쓰와 그 상태로 들어가는 것을 피하는 방법을 설명해 주시겠습니까?

지금까지 다른 어떤 장치에서 언급 된 카메라 고정 현상이 발생하지 않았습니다.

답변

2

아쉽게도 Nexus 10 카메라 HAL에서 비 결정적 버그가 발생합니다.

우리는이 문제를 반복적으로 추적하려고했지만 분명히 여기에 모든 문제가 발견되지 않았습니다.

해결 방법에 관해서는 콜백을 제거하고 미리보기를 중지하지 않고 카메라 장치를 닫으십시오. 단계적으로 시스템 종료를 수행 할 필요는 없습니다.

+0

콜백을 제거하고 미리보기를 중지하지 않고 간단히 카메라 장치를 해제하려고 시도했지만 카메라를 해제하는 데 30 초 가량 걸렸습니다. 이제 Camera2 API로 카메라 관리 코드를 구현하려고합니다. 잘하면이 점이 멈추지 않을 것입니다. – DoDo

+0

L 릴리스의 N10에서이 문제에 대한 몇 가지 문제가 수정되었으므로 다음 중 하나를 참조하십시오. L 또는 후속 업데이트 중 하나 –

+0

어제 Google N10은 Android 5.0.2 업데이트를 받았지만 문제는 아직 해결되지 않았습니다. 수정 버전이 도착해야하는 아이디어는 무엇입니까? – DoDo

관련 문제