카메라 능력 테스트
아크릴 스캔 앱을 PWA로 낼 수 있는지 판단하기 위한 진단 도구. 실제 판별/합성은 하지 않고, 이 기기·브라우저가 무엇을 해주는지만 측정해 JSON과 이미지로 내보낸다. 모든 처리는 데스크톱 파이프라인에서 한다.
권한을 허용해야 렌즈 이름이 보인다. 카메라를 켜면 메인(후면 camera 0)으로 열고 바로 최대 해상도와 1x 줌 고정을 요청한다(렌즈를 바꿔도 즉시 재요청). 실제 적용 여부는 블록 1의 getSettings와 줌 고정 행으로 확인한다.
1. 기기 / 스트림 능력
카메라를 시작하면 자동으로 채워진다. 이 기기가 수동 노출·화이트밸런스·줌·토치를 지원한다고 보고하는지, 실제로 열린 스트림의 해상도·fps가 얼마인지. 기기 모델이 알려진 프로필과 맞으면 폰 스펙 기반 intrinsics 추정값도 같이 저장한다.
2. 해상도
세 경로의 해상도가 다 다르다. 조각을 프레임에 꽉 채웠을 때 몇 px을 얻는지의 근거가 된다.
3. 버스트 (무음 후보)
비디오 프레임을 연속으로 받는다. 셔터음이 나지 않는 경로다. 대신 스틸 최대 해상도보다 낮다. 받은 장수·실효 fps·프레임 간격의 흔들림을 재고, 촬영 중 deviceorientation 로그, 화면 방향, 카메라 설정 스냅샷을 manifest에 넣은 뒤 프레임을 무압축 zip 한 개로 내보낸다. 해상도는 카메라를 켜거나 렌즈를 바꿀 때 이미 최대로 맞춰지므로, 버스트는 그 해상도로 바로 찍는다 (표의 프레임 크기로 확인).
4. 노출 / 화이트밸런스 고정
잠글 수 있는지, 잠근 뒤 실제로 노출이 고정되는지. 잠금 시도 후 조명을 손으로 바꿔가며 프레임 평균 밝기를 로깅한다. 잠겼다면 밝기가 조명을 그대로 따라 크게 변하고(카메라가 보정을 안 함), 자동이면 카메라가 보정해 밝기가 오히려 일정하게 유지된다. 즉 변동폭이 클수록 잠금이 된 것이다. 잠금 전(자동)과 후를 각각 로깅해 비교하면 확실하다.
5. 기기 방향
deviceorientation의 alpha/beta/gamma만 기록한다. 자이로/가속도 raw 로그는 쓰지 않는다. 권한을 요청하고 5초간 로깅해 정지 상태에서 beta/gamma가 얼마나 안정적인지 확인한다.