From 14ca1ae2c9949a06a45830d7395ec3c2bf09efd6 Mon Sep 17 00:00:00 2001 From: TTolsun <112919054+TTolsun@users.noreply.github.com> Date: Tue, 20 Oct 2026 00:56:17 +0900 Subject: [PATCH 1/5] Add depth capability probing and live depth maps --- .omm/data-flow/description.md | 2 + .../depth-engine/description.md | 7 + .../camera-engines/depth-engine/meta.yaml | 5 + .../camera-engines/description.md | 2 +- .../camera-engines/meta.yaml | 1 + .../screens/expert-screen/description.md | 2 +- .../probe-screen/probe-model/description.md | 2 + .../engine-lifecycle/description.md | 2 + .omm/ui-tool-handoff/description.md | 2 + .omm/ui-zoom/description.md | 2 +- .../halcamera/cli/CliStoreInstrumentation.kt | 11 ++ .../java/dev/halcamera/ui/DepthMapChecks.kt | 58 ++++++ .../main/java/dev/halcamera/MainActivity.kt | 59 +++--- .../main/java/dev/halcamera/MainCliBridge.kt | 2 + .../java/dev/halcamera/MainDepthBridge.kt | 91 +++++++++ .../dev/halcamera/camera/CameraProbeReader.kt | 1 + .../dev/halcamera/camera/DepthCameraEngine.kt | 179 ++++++++++++++++++ .../dev/halcamera/camera/DepthCapabilities.kt | 24 +++ .../java/dev/halcamera/camera/DepthFrame.kt | 45 +++++ .../java/dev/halcamera/camera/DepthSupport.kt | 34 ++++ .../java/dev/halcamera/ui/DepthMapView.kt | 73 +++++++ .../dev/halcamera/ui/LiveStreamReadout.kt | 2 +- .../dev/halcamera/camera/DepthFrameTest.kt | 60 ++++++ .../dev/halcamera/camera/DepthSupportTest.kt | 38 ++++ .../dev/halcamera/ui/LiveStreamReadoutTest.kt | 4 + docs/.site-manifest.json | 6 +- docs/architecture.html | 26 +-- docs/live.html | 10 + docs/probe.html | 3 +- docs/validation/depth-20261020/README.md | 37 ++++ .../depth-20261020/depth-map-synthetic.png | Bin 0 -> 44588 bytes .../depth-20261020/depth-unavailable.png | Bin 0 -> 1208905 bytes .../validation/depth-20261020/probe-depth.png | Bin 0 -> 160998 bytes guide/_bindings.yaml | 10 + guide/_content/_reference/engine/camera2.md | 2 + guide/_content/_reference/engine/camerax.md | 2 + .../_content/_reference/engine/comparison.md | 1 + guide/_content/_reference/engine/contract.md | 8 +- guide/_content/architecture/constraints.md | 2 + guide/_content/architecture/module-roles.md | 2 +- guide/_content/architecture/overview.md | 2 +- guide/_content/architecture/runtime-flow.md | 2 + guide/_reference/engine.md | 23 ++- guide/_reference/evidence.md | 6 +- guide/_reference/troubleshooting.md | 8 +- guide/architecture.md | 26 +-- guide/live.md | 13 ++ guide/probe.md | 3 +- tools/docgen/regression.test.mjs | 2 +- tools/docgen/state/evidence.json | 30 +-- 50 files changed, 833 insertions(+), 99 deletions(-) create mode 100644 .omm/overall-architecture/camera-engines/depth-engine/description.md create mode 100644 .omm/overall-architecture/camera-engines/depth-engine/meta.yaml create mode 100644 app/src/androidTest/java/dev/halcamera/ui/DepthMapChecks.kt create mode 100644 app/src/main/java/dev/halcamera/MainDepthBridge.kt create mode 100644 app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt create mode 100644 app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt create mode 100644 app/src/main/java/dev/halcamera/camera/DepthFrame.kt create mode 100644 app/src/main/java/dev/halcamera/camera/DepthSupport.kt create mode 100644 app/src/main/java/dev/halcamera/ui/DepthMapView.kt create mode 100644 app/src/test/java/dev/halcamera/camera/DepthFrameTest.kt create mode 100644 app/src/test/java/dev/halcamera/camera/DepthSupportTest.kt create mode 100644 docs/validation/depth-20261020/README.md create mode 100644 docs/validation/depth-20261020/depth-map-synthetic.png create mode 100644 docs/validation/depth-20261020/depth-unavailable.png create mode 100644 docs/validation/depth-20261020/probe-depth.png diff --git a/.omm/data-flow/description.md b/.omm/data-flow/description.md index 67904594..e7a517fe 100644 --- a/.omm/data-flow/description.md +++ b/.omm/data-flow/description.md @@ -6,6 +6,8 @@ JPEG에서 YUV를 고르면 앱이 현재 YUV 크기의 프레임을 JPEG로 변 RecentMediaThumbnail은 MediaStore 변경·화면 복귀 시 저장 완료 항목을 조회합니다. 별도 스레드에서 디코딩하고 활성 화면의 최신 결과만 RecentMediaButton에 반영합니다. +LIVE Depth는 ImageReader의 DEPTH16을 DepthFrame에서 표시 표본으로 바꾸고 DepthMapView로 전달합니다. Telemetry에는 크기·시각·형식과 capture 콜백만 남깁니다. 표시 픽셀은 저장하지 않으며 벤치마크 조립기로 전달하지 않습니다. + CLI는 직접 인자 또는 base64url JSON을 받고 shell UID·허용 설정·프로토콜을 검사합니다. CommandStore는 실행 전 요청을 저장합니다. 저장 완료 뒤 CliArtifactRegistry가 계산한 artifact 크기·SHA-256과 원본 URI를 CommandCoordinator가 기록하며, PC에는 URI 없이 결과와 등록된 artifact ID의 읽기 전용 파일을 제공합니다. ADB 스크립트는 manifest의 이름·크기·SHA-256을 검증하고 Download/HALCamera-cli/요청ID에 파일을 준비해 adb pull을 안내합니다. Python CLI도 검증한 임시 파일만 공개합니다. 벤치마크 JSON은 기기 안에서만 생성하며, files/benchmarks와 baseline 목록으로 비교합니다. 외부 JSON 가져오기는 0.13.0에서 제거했습니다. diff --git a/.omm/overall-architecture/camera-engines/depth-engine/description.md b/.omm/overall-architecture/camera-engines/depth-engine/description.md new file mode 100644 index 00000000..fac2b26d --- /dev/null +++ b/.omm/overall-architecture/camera-engines/depth-engine/description.md @@ -0,0 +1,7 @@ +DepthCameraEngine은 LIVE의 DEPTH16 전용 세션을 소유합니다. 공개 ID의 DEPTH_OUTPUT과 선택한 해상도를 재검사하고 ImageReader 하나만 구성합니다. 이전 엔진이 놓은 카메라는 AvailabilityCallback 또는 최대 2초의 대기 뒤 엽니다. 컬러 출력이 없으므로 DEPTH_DEPTH_IS_EXCLUSIVE인 카메라도 대상으로 삼을 수 있습니다. MediaCapture는 구현하지 않으며 촬영과 녹화를 제공하지 않습니다. + +ImageReader는 acquireLatestImage로 버퍼를 읽고 use로 즉시 돌려줍니다. DepthFrame은 crop·rowStride·pixelStride와 little-endian 16비트 표본을 해석합니다. 하위 13비트는 mm 거리이며 상위 3비트는 신뢰도입니다. 신뢰도 코드 0은 100%, 1은 0%입니다. 거리가 0이거나 신뢰도가 50% 미만이면 검게 표시하고, 나머지는 고정된 0–8191 mm 범위에서 가까울수록 밝게 표시합니다. 긴 변은 최대 640픽셀로 표본을 추출하고 UI 전달 대기는 한 프레임으로 제한하며 최대 초당 10회 갱신합니다. + +DepthMapView는 센서·디스플레이 회전과 전면 반전을 적용해 전체 맵을 fit으로 표시합니다. 중앙 거리와 표시 표본의 유효 비율을 함께 보여줍니다. 표시용 픽셀은 저장하지 않으며 Telemetry에는 크기·시각·형식과 Depth 콜백만 기록합니다. + +세션 거절·버퍼 오류·카메라 오류는 상태 메시지로 보고하고 장치를 닫습니다. repeating request 제출 후 8초 이내 첫 표시용 프레임이 없으면 실패로 처리합니다. close(done)는 열기 대기 중인 장치도 onOpened에서 닫고 onClosed 이후 자원을 회수한 뒤 UI 스레드에서 완료를 전달합니다. 이미 해제된 엔진의 close도 완료를 전달합니다. diff --git a/.omm/overall-architecture/camera-engines/depth-engine/meta.yaml b/.omm/overall-architecture/camera-engines/depth-engine/meta.yaml new file mode 100644 index 00000000..fd4b1cdf --- /dev/null +++ b/.omm/overall-architecture/camera-engines/depth-engine/meta.yaml @@ -0,0 +1,5 @@ +kind: nested-class +title: depth-engine +children: [] +parentPath: + - camera-engines diff --git a/.omm/overall-architecture/camera-engines/description.md b/.omm/overall-architecture/camera-engines/description.md index b6ef2165..fdd8a30e 100644 --- a/.omm/overall-architecture/camera-engines/description.md +++ b/.omm/overall-architecture/camera-engines/description.md @@ -1,2 +1,2 @@ -camera/는 CameraEngine 인터페이스와 Camera2Engine·CameraXEngine을 제공합니다. Camera2Engine은 기본 크기 선택 경로와 벤치마크용 명시적 StreamSpec 경로를 구분합니다. 세션별 콜백과 close(done) 완료 통지가 러너에 연결됩니다. +camera/는 CameraEngine 인터페이스와 Camera2Engine·CameraXEngine·DepthCameraEngine을 제공합니다. Camera2Engine은 기본 크기 선택 경로와 벤치마크용 명시적 StreamSpec 경로를 구분합니다. 세션별 콜백과 close(done) 완료 통지가 러너에 연결됩니다. StreamConfiguration은 실제 카메라 출력으로 Callback 목록을 만듭니다. 앱의 YUV JPEG 변환·PIP 합성·GPU 인코더 출력은 Callback에 추가하지 않습니다. diff --git a/.omm/overall-architecture/camera-engines/meta.yaml b/.omm/overall-architecture/camera-engines/meta.yaml index 35fe5d45..f6744b90 100644 --- a/.omm/overall-architecture/camera-engines/meta.yaml +++ b/.omm/overall-architecture/camera-engines/meta.yaml @@ -6,6 +6,7 @@ kind: nested-class title: camera-engines children: - camera2-engine + - depth-engine - camerax-engine - endpoint-model - endpoint-resolver diff --git a/.omm/overall-architecture/screens/expert-screen/description.md b/.omm/overall-architecture/screens/expert-screen/description.md index 3b561c9e..531c69f0 100644 --- a/.omm/overall-architecture/screens/expert-screen/description.md +++ b/.omm/overall-architecture/screens/expert-screen/description.md @@ -1,4 +1,4 @@ -MainActivity는 Live 런처입니다. CameraEngine을 선택하고 카메라 수명주기, 권한, 촬영 모드와 버튼 상태를 관리합니다. LiveReadings가 실시간 측정값을 갱신하고 IncidentActions가 이벤트 ZIP 저장과 공유를 담당합니다. Benchmark는 Lab에서 엽니다. +MainActivity는 Live 런처로 CameraEngine 선택·카메라 수명주기·권한·촬영 모드·버튼 상태를 관리합니다. LiveReadings는 측정값을 갱신하고 IncidentActions는 이벤트 ZIP 저장·공유를 담당합니다. Benchmark는 Lab에서 엽니다. 프리뷰의 제어·측정값·촬영 버튼 배치는 docs/design/APP-UI.md를 따릅니다. 아이콘 터치 영역은 48dp 이상이며 색·서체는 Look을 사용합니다. diff --git a/.omm/overall-architecture/screens/probe-screen/probe-model/description.md b/.omm/overall-architecture/screens/probe-screen/probe-model/description.md index a8d64bc7..64fdb9f7 100644 --- a/.omm/overall-architecture/screens/probe-screen/probe-model/description.md +++ b/.omm/overall-architecture/screens/probe-screen/probe-model/description.md @@ -1,3 +1,5 @@ camera/CameraProbe.kt는 Probe의 순수 Kotlin 모델과 렌더러입니다. ProbeRow·ProbeSection·CameraProbeEntry·CameraProbeSnapshot이 카메라별 섹션 표를 담고, 물리 카메라는 "논리ID.물리ID" 키로 구분합니다. ProbeFormat이 값의 표기(크기·범위·enum 이름)를 통일하고, CameraProbeText가 TXT를, toJsonMap이 JSON을 만듭니다. 이 파일은 Android를 모르므로 JVM 테스트로 검증합니다. camera/CameraProbeReader.kt만 CameraManager를 알고, 공개 카메라 ID와 논리 카메라의 physicalCameraIds를 순회하며 CameraCharacteristics를 섹션별로 읽어 스냅샷을 채웁니다. 섹션 하나가 예외로 실패해도 나머지를 계속 읽고 실패 목록에 남깁니다. SESSION KEYS와 MANDATORY STREAM COMBINATIONS는 API 28·29 이상에서만 읽고, STREAMS는 SCALER_STREAM_CONFIGURATION_MAP의 출력 형식마다 별도 섹션으로 만듭니다. + +DepthCapabilities는 DEPTH_OUTPUT, DEPTH16 해상도와 DEPTH_DEPTH_IS_EXCLUSIVE를 독립적으로 읽습니다. DepthSupport는 DEPTH 섹션의 지원 여부·해상도·컬러 동시 요청 가능 여부를 만듭니다. null이나 읽기 실패는 Unknown 또는 Read error로 보존하고, HAL이 동시 요청을 허용해도 출력 조합을 별도로 확인해야 한다고 표시합니다. 단독으로 열 수 없는 물리 ID는 LIVE에서 직접 선택할 수 없다고 안내합니다. 같은 행을 화면·TXT·JSON에 사용합니다. diff --git a/.omm/state-transitions/engine-lifecycle/description.md b/.omm/state-transitions/engine-lifecycle/description.md index 497a1c49..b2e01ef7 100644 --- a/.omm/state-transitions/engine-lifecycle/description.md +++ b/.omm/state-transitions/engine-lifecycle/description.md @@ -3,3 +3,5 @@ Camera2Engine은 HandlerThread에서 카메라를 열고 세션과 반복 요청 Live 녹화는 선택한 설정, Benchmark 녹화는 profile을 사용합니다. 녹화 상태는 overall-architecture/camera-engines/camera2-engine/live-recorder, 측정 순서는 runner-sequence에 있습니다. PIP 종료 전에 메인 사진 대기를 취소하여 순환 대기를 막습니다. 단계 전이의 시간 제한과 close 완료 처리는 runner-sequence에 있습니다. + +DepthCameraEngine은 DEPTH16만 구성합니다. 열기 중 취소도 onOpened→onClosed 후 완료하며 active로 늦은 신호를 차단합니다. 첫 맵은 요청 후 8초까지 기다리고 해상도 대체·일반 Camera2 재시도는 하지 않습니다. diff --git a/.omm/ui-tool-handoff/description.md b/.omm/ui-tool-handoff/description.md index a8a7c70c..f3d1ff3a 100644 --- a/.omm/ui-tool-handoff/description.md +++ b/.omm/ui-tool-handoff/description.md @@ -7,3 +7,5 @@ Lab의 시스템 뒤로 가기와 상단 Live 링크은 기존 Live로 복귀합 Live Streams는 Lab 또는 Live의 크기 표시에서 열 수 있으며 카메라를 열지 않습니다. 진입 전에 Live 엔진의 close(done)를 기다립니다. 상단·시스템 뒤로 가기는 초안을 버리고 진입한 화면으로 돌아갑니다. 저장과 직전 정상 구성 복원도 같은 화면으로 돌아갑니다. Lab은 결과를 보관했다가 Live 복귀 시 전달하며, 직접 진입은 결과를 Live에 바로 전달합니다. 설정과 직전 정상 구성은 카메라·엔진별로 분리하고 Activity 재생성 시 복원합니다. Multi도 Live의 close(done) 뒤 ConcurrentCameraActivity를 엽니다. Live에서 선택한 엔진을 전달하며 Multi 화면에서도 Camera2와 CameraX를 바꿀 수 있습니다. 이 화면은 모든 카메라의 onClosed를 기다린 뒤 Live로 돌아가며, Live는 기존 엔진 선택으로 프리뷰를 다시 엽니다. + +Depth 보기에서도 Lab 진입 전에 close(done)를 기다립니다. 촬영 모드를 바꾸지 않고 Lab에서 돌아오면 선택한 Depth 해상도를 다시 엽니다. Depth 보기 중에는 크기 표시로 Live Streams를 여는 동작을 비활성화합니다. diff --git a/.omm/ui-zoom/description.md b/.omm/ui-zoom/description.md index 42a09d04..b936e19a 100644 --- a/.omm/ui-zoom/description.md +++ b/.omm/ui-zoom/description.md @@ -2,7 +2,7 @@ Live 프리뷰에서 두 손가락을 벌리거나 모으면 지원 범위 안에서 연속으로 줌을 바꿉니다. 가장 가까운 프리셋의 원에 현재 배율을 소수 첫째 자리까지 표시하며, 펼친 상태에서 그 원을 누르면 해당 프리셋 배율로 돌아갑니다. 화면의 카메라 선택 정보를 갱신해도 중간 배율은 유지합니다. -핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다. +핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. Depth 보기, 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다. | 조건 | 동작 | | --- | --- | diff --git a/app/src/androidTest/java/dev/halcamera/cli/CliStoreInstrumentation.kt b/app/src/androidTest/java/dev/halcamera/cli/CliStoreInstrumentation.kt index ad6bb36f..1330e9d5 100644 --- a/app/src/androidTest/java/dev/halcamera/cli/CliStoreInstrumentation.kt +++ b/app/src/androidTest/java/dev/halcamera/cli/CliStoreInstrumentation.kt @@ -18,6 +18,7 @@ class CliStoreInstrumentation : Instrumentation() { private var multiSplit = false private var lintChecks = false private var splitDrag = false + private var depthChecks = false override fun onCreate(arguments: Bundle?) { super.onCreate(arguments) exportReports = arguments?.getString("export_reports") == "true" @@ -29,10 +30,20 @@ class CliStoreInstrumentation : Instrumentation() { multiSplit = arguments?.getString("multi_split") == "true" lintChecks = arguments?.getString("lint_checks") == "true" splitDrag = arguments?.getString("split_drag") == "true" + depthChecks = arguments?.getString("depth_checks") == "true" start() } override fun onStart() { + if (depthChecks) { + try { + val result = dev.halcamera.ui.DepthMapChecks.run(this) + finish(Activity.RESULT_OK, Bundle().apply { putString("stream", "$result\n") }) + } catch (error: Throwable) { + finish(Activity.RESULT_CANCELED, Bundle().apply { putString("stream", "DEPTH_MAP_CHECKS_FAILED: ${error.stackTraceToString()}\n") }) + } + return + } if (splitDrag) { try { val result = dev.halcamera.ui.SplitDragChecks.run(this) diff --git a/app/src/androidTest/java/dev/halcamera/ui/DepthMapChecks.kt b/app/src/androidTest/java/dev/halcamera/ui/DepthMapChecks.kt new file mode 100644 index 00000000..b2873c19 --- /dev/null +++ b/app/src/androidTest/java/dev/halcamera/ui/DepthMapChecks.kt @@ -0,0 +1,58 @@ +package dev.halcamera.ui + +import android.app.Instrumentation +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.Canvas +import android.widget.FrameLayout +import dev.halcamera.WorkbenchActivity +import dev.halcamera.camera.DepthFrame +import dev.halcamera.camera.LiveSize +import java.io.File +import java.nio.ByteBuffer +import java.nio.ByteOrder + +/** Synthetic DEPTH16 display validation; deliberately makes no claim about real depth camera support. */ +object DepthMapChecks { + fun run(instrumentation: Instrumentation): String { + val context = instrumentation.targetContext + val activity = instrumentation.startActivitySync(Intent(context, WorkbenchActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) + val output = File(context.getExternalFilesDir(null), "depth-map-synthetic.png") + var failure: Throwable? = null + try { + instrumentation.runOnMainSync { + try { + val width = 160; val height = 120 + val buffer = ByteBuffer.allocate(width * height * 2).order(ByteOrder.LITTLE_ENDIAN) + for (y in 0 until height) for (x in 0 until width) { + val person = x in 55..105 && y in 20..100 + val mm = if (person) 1000 else 4000 + x * 20 + val code = if (x < 12) 1 else 0 + buffer.putShort(((code shl 13) or mm).toShort()) + } + buffer.flip() + val frame = DepthFrame.render(buffer, width, height, width * 2, 2) + check(frame.centerMm == 1000) + val view = DepthMapView(activity, LiveSize(width, height), 90, false) + val stage = FrameLayout(activity).apply { setBackgroundColor(android.graphics.Color.BLACK); addView(view, FrameLayout.LayoutParams(-1, -1)) } + activity.setContentView(stage) + view.setChromeInsets(Look.dp(activity, 160), Look.dp(activity, 180)) + view.bind(frame) + val metrics = context.resources.displayMetrics + stage.measure(android.view.View.MeasureSpec.makeMeasureSpec(metrics.widthPixels, android.view.View.MeasureSpec.EXACTLY), + android.view.View.MeasureSpec.makeMeasureSpec(metrics.heightPixels, android.view.View.MeasureSpec.EXACTLY)) + stage.layout(0, 0, metrics.widthPixels, metrics.heightPixels) + check(view.contentDescription.toString().contains("Center 1.000 m")) + val image = Bitmap.createBitmap(stage.width, stage.height, Bitmap.Config.ARGB_8888) + try { + stage.draw(Canvas(image)) + check((image.getPixel(stage.width / 2, stage.height / 2) and 255) > 0) + output.outputStream().use { check(image.compress(Bitmap.CompressFormat.PNG, 100, it)) } + } finally { image.recycle() } + } catch (error: Throwable) { failure = error } + } + failure?.let { throw it } + } finally { instrumentation.runOnMainSync { activity.finish() } } + return "DEPTH_MAP_CHECKS_OK · synthetic stride decode, center distance, display and accessibility · ${output.absolutePath}" + } +} diff --git a/app/src/main/java/dev/halcamera/MainActivity.kt b/app/src/main/java/dev/halcamera/MainActivity.kt index 6dea5501..0fa42b67 100644 --- a/app/src/main/java/dev/halcamera/MainActivity.kt +++ b/app/src/main/java/dev/halcamera/MainActivity.kt @@ -91,18 +91,18 @@ class MainActivity : ComponentActivity() { private lateinit var bottomBar: LinearLayout private lateinit var graphButton: Button private lateinit var callbackGraph: ResultCallbackGraph - private lateinit var zoomControl: ExpandingZoomControl + internal lateinit var zoomControl: ExpandingZoomControl internal lateinit var controlBar: LiveControlBar - private lateinit var manualPanel: ManualControlPanel + internal lateinit var manualPanel: ManualControlPanel internal var manualCapabilities = ManualSupport() private lateinit var cameraNotice: TextView private var savedNoticeShown = false private val clearNotice = Runnable { savedNoticeShown = false; if (ready || recordingVideo) cameraNotice.visibility = View.GONE } private lateinit var recentMedia: RecentMediaThumbnail - private lateinit var liveIndicator: LiveIndicator + internal lateinit var liveIndicator: LiveIndicator private var lastPreviewFrameNs = 0L private var cameraXStreaming = false - private lateinit var metrics: LiveMeasurementView + internal lateinit var metrics: LiveMeasurementView private lateinit var readings: LiveReadings private val incidents by lazy { IncidentActions(this, io, main, object : IncidentActions.Host { @@ -114,7 +114,7 @@ class MainActivity : ComponentActivity() { } private lateinit var reportButton: Button - private lateinit var mediaButton: ShutterButton + internal lateinit var mediaButton: ShutterButton private lateinit var photoModeButton: Button private lateinit var videoModeButton: Button private lateinit var multiButton: Button @@ -130,6 +130,8 @@ class MainActivity : ComponentActivity() { private var cameraEndpoints = emptyMap() private lateinit var labButton: Button internal var videoMode = false + internal var depthSize: LiveSize? = null + internal lateinit var depthModeButton: Button internal var recordingVideo = false internal var stoppingRecording = false private var recordingStartedAt = 0L @@ -145,7 +147,7 @@ class MainActivity : ComponentActivity() { if (grants.values.all { it }) action?.invoke() else toast("Allow the requested permissions to save media.") } private lateinit var engineButton: Button - private lateinit var physicalPipButton: Button + internal lateinit var physicalPipButton: Button internal var pendingPip: PipSource? = null internal val pipUi by lazy { LivePipController(this,{ previewHost },{ engine as? PipCamera },::updateMediaControls,{ lastPreviewFrameNs = nowNs() },::showNotice,{ cameraId }) } private val physicalPip by lazy { dev.halcamera.ui.PhysicalPipPicker(this,manager) } @@ -224,7 +226,7 @@ class MainActivity : ComponentActivity() { liveIndicator.bindSizes(telemetry.sessions[sessionId]?.get("negotiatedStreams") as? Map<*, *>) } readings.update(events, frames, time, sessionId, controlBar.controls) - manualPanel.bind(controlBar.controls.manual, (ready || recordingVideo) && !stoppingRecording && cli.active == null && !bursts.controlsLocked, + manualPanel.bind(controlBar.controls.manual, depthSize == null && (ready || recordingVideo) && !stoppingRecording && cli.active == null && !bursts.controlsLocked, manualCapabilities, frames.lastOrNull(), time) manualBack.isEnabled = manualPanel.isExpanded if (callbackGraph.isVisible) callbackGraph.updateLive(events,sessionId,time,telemetry.sessions,(engine as? PipCamera)?.pipCallbackSession) @@ -247,6 +249,8 @@ class MainActivity : ComponentActivity() { reconnectFromLab = savedInstanceState?.getBoolean("reconnectFromLab") ?: false zoomRatio = savedInstanceState?.getFloat("zoom") ?: 1f videoMode = savedInstanceState?.getBoolean("videoMode") ?: false + @Suppress("DEPRECATION") + depthSize = savedInstanceState?.getSerializable("depthSize") as? LiveSize @Suppress("DEPRECATION", "UNCHECKED_CAST") (savedInstanceState?.getSerializable("liveStreams") as? HashMap)?.let(streamSettings::putAll) @Suppress("DEPRECATION", "UNCHECKED_CAST") @@ -261,6 +265,7 @@ class MainActivity : ComponentActivity() { override fun onSaveInstanceState(outState: Bundle) { outState.putString("engine", engineName); outState.putString("camera", cameraId); outState.putBoolean("paused", paused); outState.putFloat("zoom", zoomRatio) outState.putBoolean("videoMode", videoMode) + outState.putSerializable("depthSize", depthSize) outState.putSerializable("liveStreams", HashMap(streamSettings)) outState.putSerializable("goodStreams", HashMap(goodStreams)) outState.putBoolean("returningFromLab", returningFromLab) @@ -343,7 +348,7 @@ class MainActivity : ComponentActivity() { ready=false; mediaButton.isEnabled=false; reportButton.isEnabled=false val old = engine; engine = null val released = engineCameraId.takeIf { old != null } - (old as? CameraXEngine)?.releaseOnClose = engineName != "CameraX" + (old as? CameraXEngine)?.releaseOnClose = engineName != "CameraX" || depthSize != null if (old != null) { closing = true; setStatus("Closing camera…", false) old.close { @@ -360,7 +365,7 @@ class MainActivity : ComponentActivity() { } if (cameraId.isEmpty()) { setStatus("No cameras available.", false); return } sessionId = UUID.randomUUID().toString() - if (pendingPip == null && engineCameraId == cameraId) pendingPip = pipUi.selected + if (depthSize == null && pendingPip == null && engineCameraId == cameraId) pendingPip = pipUi.selected previewStartup.reset() engineCameraId = cameraId val thisSession = sessionId @@ -392,7 +397,9 @@ class MainActivity : ComponentActivity() { } val notice = { text: String -> if (thisSession == sessionId && resumed && !closing) showNotice(text) } val status = { text: String, ok: Boolean -> if (thisSession == sessionId && resumed && !closing) setStatus(text,ok) } - engine = if (engineName == "CameraX") { + engine = if (depthSize != null) { + createDepthEngine(released, status) + } else if (engineName == "CameraX") { val view = PreviewView(this).apply { implementationMode = PreviewView.ImplementationMode.COMPATIBLE; scaleType = PreviewView.ScaleType.FILL_CENTER } previewHost.addView(view, FrameLayout.LayoutParams(-1,-1)) view.previewStreamState.observe(this) { state -> @@ -442,7 +449,7 @@ class MainActivity : ComponentActivity() { } }, recordingState = recordingState, notice = notice, status = status) } - previewHost.addView(FocusRing(this, { engine as? TouchMetering }) { controlBar.setAeLock(it) }.apply { + if (depthSize == null) previewHost.addView(FocusRing(this, { engine as? TouchMetering }) { controlBar.setAeLock(it) }.apply { canInteract = { !bursts.controlsLocked && cli.active == null } onZoomScale = { factor -> if (factor.isFinite() && factor > 0f) applyZoom(zoomRatio * factor) @@ -456,6 +463,10 @@ class MainActivity : ComponentActivity() { try { engine?.start() } catch (e: Exception) { setStatus("Start failed: ${e.message}",false) } updateCameraChoices() } + internal fun depthFrameArrived() { + lastPreviewFrameNs = nowNs() + initialPreviewArrived() + } private fun initialPreviewArrived() { previewStartup.frameArrived()?.let { setStatus(it, true) } } @@ -646,9 +657,10 @@ class MainActivity : ComponentActivity() { modeControls=row().apply { gravity=Gravity.CENTER; isBaselineAligned=false } photoModeButton=button("Photo") { selectMode(false) } videoModeButton=button("Video") { selectMode(true) } + depthModeButton=button("Depth") { chooseDepth() } multiButton=button("Multi · P") { openConcurrent(false) } multiVideoButton=button("Multi · V") { openConcurrent(true) } - listOf(photoModeButton,videoModeButton,multiButton,multiVideoButton).forEach { + listOf(photoModeButton,videoModeButton,depthModeButton,multiButton,multiVideoButton).forEach { it.background=cameraChrome(Color.TRANSPARENT) it.textSize=12f; it.gravity=Gravity.CENTER; it.includeFontPadding=false; it.setSingleLine(true) it.setPadding(dp(4),0,dp(4),0) @@ -706,27 +718,18 @@ class MainActivity : ComponentActivity() { pendingPermissionAction=null recorder.finish("camera_changed")?.let(incidents::export) cameraId=chosen; zoomRatio=1f + depthSize=null resetControls(); updateCameraChoices(); restartCamera() } } } - private fun selectMode(video: Boolean) { - if (cli.active != null) return - if (recordingVideo || stoppingRecording || closing || pendingPermissionAction != null || - mediaBusy() || !ready || videoMode==video) return - pendingPermissionAction=null - videoMode=video - resetModeSettings() - restartCamera() - updateMediaControls() - } /** Share lens labels with Benchmark, Probe and History; unknown IDs retain the short label. */ private fun cameraLabel(id:String):String { if(id.isEmpty()) return "No camera" return cameraEndpoints[id]?.let(CameraLabel::full) ?: CameraLabel.short(id) } private fun applyZoom(ratio: Float) { - if (!resumed || paused || closing || cli.active != null || bursts.controlsLocked || + if (depthSize != null || !resumed || paused || closing || cli.active != null || bursts.controlsLocked || !(ready || recordingVideo) || stoppingRecording || cameraId.isEmpty() || !ratio.isFinite()) return val range = zoomRange(manager, cameraId) zoomRatio = ratio.coerceIn(range.first, range.second) @@ -750,9 +753,9 @@ class MainActivity : ComponentActivity() { val idle=!recordingVideo && bursts.run==null cli.setUiBusy(liveCli, recordingVideo || stoppingRecording || pendingPermissionAction != null || mediaBusy()) listOf(photoModeButton,videoModeButton).forEachIndexed { index, button -> - val selected=(index==1)==videoMode + val selected=depthSize == null && (index==1)==videoMode button.isSelected=selected - button.isEnabled=ready && idle && !mediaBusy() && pendingPermissionAction == null + button.isEnabled=(ready || depthSize != null) && idle && !closing && !mediaBusy() && pendingPermissionAction == null button.setTextColor(if(selected) Look.onDark else Look.onDarkMuted) button.setTypeface(null,if(selected) Typeface.BOLD else Typeface.NORMAL) button.contentDescription=if(index==0) "Photo mode: save selected JPEG and RAW outputs" else "Video mode with audio" @@ -792,7 +795,7 @@ class MainActivity : ComponentActivity() { // Zoom stays live while recording (#174): the engine changes the recording request in place. // The engine reports "REC" as not-ready, so a running recording counts as ready here, as for the shutter. zoomControl.isEnabled=(ready || recordingVideo) && !stoppingRecording && !bursts.controlsLocked - controlBar.bind(videoMode,(ready || recordingVideo) && !stoppingRecording && cli.active==null && !bursts.controlsLocked, + controlBar.bind(videoMode,depthSize == null && (ready || recordingVideo) && !stoppingRecording && cli.active==null && !bursts.controlsLocked, pipUi.selected != null || pipUi.busy) galleryButton.isEnabled=idle labButton.isEnabled=!recordingVideo && !stoppingRecording && !closing && !mediaBusy() @@ -813,6 +816,7 @@ class MainActivity : ComponentActivity() { if (cli.active != null) { listOf(mediaButton, engineButton, cameraShortcut, photoModeButton, videoModeButton, zoomControl, galleryButton, labButton, reportButton).forEach { it.isEnabled = false } } + updateDepthControls(callbackGraph.isVisible, topBar.height + dp(8), bottomBar.height + dp(64)) listOf(engineButton,cameraShortcut,photoModeButton,videoModeButton,mediaButton,galleryButton,labButton).forEach { it.alpha=if(it.isEnabled) 1f else 0.4f } @@ -823,6 +827,7 @@ class MainActivity : ComponentActivity() { engineName=name; resetModeSettings(); updateCameraChoices(); restartCamera() } internal fun resetModeSettings() { + depthSize = null if (::callbackGraph.isInitialized) showCallbacks(false) pendingPip = null pipUi.resetMode() @@ -919,7 +924,7 @@ class MainActivity : ComponentActivity() { if (show && ::manualPanel.isInitialized) manualPanel.close() callbackGraph.reset() callbackGraph.visibility = if (show) View.VISIBLE else View.GONE - metrics.visibility = if (show) View.GONE else View.VISIBLE + metrics.visibility = if (show || depthSize != null) View.GONE else View.VISIBLE graphBack.isEnabled = show graphButton.contentDescription = if (show) "Hide callback timing" else "Show callback timing" widgets.highlight(graphButton,show) diff --git a/app/src/main/java/dev/halcamera/MainCliBridge.kt b/app/src/main/java/dev/halcamera/MainCliBridge.kt index 51714cbb..fde7bf3a 100644 --- a/app/src/main/java/dev/halcamera/MainCliBridge.kt +++ b/app/src/main/java/dev/halcamera/MainCliBridge.kt @@ -32,6 +32,7 @@ internal fun MainActivity.createLiveCli(): LiveController = LiveController(cli, return@fold } captureFeedback.clearResult() + depthSize = null showCallbacks(false) val modeChanged = engineName != (command.engine ?: "Camera2") || videoMode != command.videoMode cameraId = requireNotNull(command.camera); engineName = command.engine ?: "Camera2" @@ -71,6 +72,7 @@ internal fun MainActivity.createLiveCli(): LiveController = LiveController(cli, updateMediaControls() } override fun tune(options: dev.halcamera.cli.CliOptions?, reset: Boolean): Map { + if (depthSize != null) throw dev.halcamera.cli.CliFailure("PREFLIGHT_FAILED", "Select Photo or Video before changing camera controls.") if ((!ready && !recordingVideo) || closing || stoppingRecording) throw dev.halcamera.cli.CliFailure("PREFLIGHT_FAILED", "Start preview or recording first") val requested = if (reset) LiveControls() else options!!.controls(controlBar.support, manualCapabilities, videoMode, controlBar.controls, pipUi.selected != null) val zoom = if (reset) 1f else options!!.values["zoom"]?.toFloat() ?: zoomRatio diff --git a/app/src/main/java/dev/halcamera/MainDepthBridge.kt b/app/src/main/java/dev/halcamera/MainDepthBridge.kt new file mode 100644 index 00000000..372ebb8c --- /dev/null +++ b/app/src/main/java/dev/halcamera/MainDepthBridge.kt @@ -0,0 +1,91 @@ +package dev.halcamera + +import android.graphics.Typeface +import android.hardware.camera2.CameraCharacteristics +import android.view.View +import android.widget.FrameLayout +import android.widget.Toast +import androidx.core.view.ViewCompat +import dev.halcamera.camera.* +import dev.halcamera.ui.* + +/** LIVE depth selection, display and controls; camera ownership stays with MainActivity. */ +internal fun MainActivity.chooseDepth() { + if (!resumed || closing || cli.active != null || recordingVideo || stoppingRecording || mediaBusy() || + pendingPermissionAction != null || cameraId.isEmpty()) return + val support = try { depthSupport(manager.getCameraCharacteristics(cameraId)) } catch (e: Exception) { + Toast.makeText(this, "Cannot read depth capabilities: ${e.message}", Toast.LENGTH_LONG).show(); return + } + val sizes = support.sizes.takeIf { support.available }.orEmpty() + val choices = listOf(LiveChoiceSheet.Choice("Off", "Return to Photo")) + + sizes.map { LiveChoiceSheet.Choice("DEPTH16 · $it", "Camera2 · Depth-only view") } + + if (support.available) emptyList() else listOf(LiveChoiceSheet.Choice("Depth unavailable", support.unavailableReason.orEmpty(), false)) + LiveChoiceSheet.show(this, "Depth map", choices, sizes.indexOf(depthSize) + 1, + content = Look.text(this, "${support.colorSummary}\nNear: bright · Far: dark · Black: invalid\nView only; photos and video are disabled.", 12, Look.onDarkMuted)) { index -> + if (!resumed || closing || cli.active != null || recordingVideo || mediaBusy()) return@show + val chosen = if (index == 0) null else sizes.getOrNull(index - 1) ?: return@show + if (chosen == depthSize) return@show + recorder.finish("depth_view_changed")?.let(::exportCliIncident) + captureFeedback.clearResult() + engineName = "Camera2" + videoMode = false + resetModeSettings() + depthSize = chosen + paused = false + updateCameraChoices() + restartCamera() + } +} + +internal fun MainActivity.createDepthEngine(released: String?, status: (String, Boolean) -> Unit): CameraEngine? { + val size = requireNotNull(depthSize) + val thisSession = sessionId + val chars = try { manager.getCameraCharacteristics(cameraId) } catch (e: Exception) { + setStatus("Cannot read depth camera: ${e.message}", false) + return null + } + val view = DepthMapView(this, size, chars[CameraCharacteristics.SENSOR_ORIENTATION] ?: 0, + chars[CameraCharacteristics.LENS_FACING] == CameraCharacteristics.LENS_FACING_FRONT) + previewHost.addView(view, FrameLayout.LayoutParams(-1, -1)) + return DepthCameraEngine(manager, cameraId, size, thisSession, telemetry, released, { frame -> + if (thisSession == sessionId && resumed && !closing && !paused) { + view.bind(frame) + depthFrameArrived() + } + }, status) +} + +internal fun MainActivity.updateDepthControls(callbacks: Boolean, topInset: Int, bottomInset: Int) { + depthModeButton.isEnabled = resumed && !closing && !recordingVideo && bursts.run == null && !stoppingRecording && !mediaBusy() && + cli.active == null && pendingPermissionAction == null && cameraId.isNotEmpty() + depthModeButton.isSelected = depthSize != null + depthModeButton.setTextColor(if (depthSize != null) Look.onDark else Look.onDarkMuted) + depthModeButton.setTypeface(null, if (depthSize != null) Typeface.BOLD else Typeface.NORMAL) + depthModeButton.alpha = if (depthModeButton.isEnabled) 1f else .4f + depthModeButton.contentDescription = "Depth map: choose a DEPTH16 resolution or view availability" + ViewCompat.setStateDescription(depthModeButton, if (depthSize != null) "Selected" else "Not selected") + if (depthSize != null) { + mediaButton.isEnabled = false + mediaButton.contentDescription = "Depth view only: select Photo or Video to capture media" + physicalPipButton.isEnabled = false + physicalPipButton.alpha = .4f + zoomControl.isEnabled = false + controlBar.bind(false, false, false) + liveIndicator.setSizesEnabled(false) + metrics.visibility = View.GONE + manualPanel.close() + (previewHost.getChildAt(0) as? DepthMapView)?.setChromeInsets(topInset, bottomInset) + } else if (!callbacks) metrics.visibility = View.VISIBLE +} + +/** Photo and Video also leave the depth-only session, including after a depth failure. */ +internal fun MainActivity.selectMode(video: Boolean) { + if (cli.active != null) return + if (recordingVideo || stoppingRecording || closing || pendingPermissionAction != null || + mediaBusy() || (depthSize == null && (!ready || videoMode==video))) return + pendingPermissionAction=null + videoMode=video + resetModeSettings() + restartCamera() + updateMediaControls() +} diff --git a/app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt b/app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt index 34992e84..5da08af7 100644 --- a/app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt +++ b/app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt @@ -87,6 +87,7 @@ class CameraProbeReader(private val manager: CameraManager, private val extraDev val sections = ArrayList() sections += guarded("Identity") { identity(id, physicalOf, c) } sections += guarded("Capabilities") { capabilities(c) } + sections += guarded("Depth") { depthSupport(c).probeRows(physicalOf == null) } sections += guarded("Sensor") { sensor(c) } sections += guarded("Lens") { lens(c) } sections += guarded("Control") { control(c) } diff --git a/app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt b/app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt new file mode 100644 index 00000000..be3c0e9b --- /dev/null +++ b/app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt @@ -0,0 +1,179 @@ +package dev.halcamera.camera + +import android.annotation.SuppressLint +import android.graphics.ImageFormat +import android.hardware.camera2.CameraCaptureSession +import android.hardware.camera2.CameraDevice +import android.hardware.camera2.CameraManager +import android.media.ImageReader +import android.os.Handler +import android.os.HandlerThread +import android.os.Looper +import android.os.SystemClock +import dev.halcamera.telemetry.Telemetry +import java.util.concurrent.atomic.AtomicBoolean + +/** LIVE-only depth session. No color targets, recording, photo saving or benchmark inputs. */ +class DepthCameraEngine( + private val manager: CameraManager, + private val cameraId: String, + private val size: LiveSize, + private val sessionId: String, + private val telemetry: Telemetry, + private val releasedCameraId: String?, + private val frame: (DepthFrame) -> Unit, + private val status: (String, Boolean) -> Unit, +) : CameraEngine { + private val thread = HandlerThread("HAL-depth").apply { start() } + private val handler = Handler(thread.looper) + private val main = Handler(Looper.getMainLooper()) + @Volatile private var active = true + private var opening = false + private var finished = false + private var device: CameraDevice? = null + private var session: CameraCaptureSession? = null + private var reader: ImageReader? = null + private var availability: CameraManager.AvailabilityCallback? = null + private var lastFrameMs: Long? = null + private val pendingFrame = AtomicBoolean(false) + private val closers = mutableListOf<() -> Unit>() + private val openAfterRelease = Runnable { stopWaiting(); open() } + private val firstFrameTimeout = Runnable { if (active && lastFrameMs == null) fail("No DEPTH16 frames received within 8 seconds.") } + + override fun start() { + handler.post { + if (!active) return@post + try { + val support = depthSupport(manager.getCameraCharacteristics(cameraId)) + require(support.available && size in support.sizes) { support.unavailableReason ?: "Unsupported DEPTH16 resolution." } + telemetry.registerSession(sessionId, "Camera2 · Depth", manager, cameraId) + if (releasedCameraId != null && releasedCameraId in manager.cameraIdList) { + availability = object : CameraManager.AvailabilityCallback() { + override fun onCameraAvailable(id: String) { + if (id == releasedCameraId && availability != null) openAfterRelease.run() + } + }.also { manager.registerAvailabilityCallback(it, handler) } + handler.postDelayed(openAfterRelease, CameraReleaseWait.LIMIT_MS) + } else open() + } catch (e: Exception) { fail(e.message ?: "Depth unavailable") } + } + } + + @SuppressLint("MissingPermission") + private fun open() { + if (!active || opening || device != null) return + try { + opening = true + telemetry.event(sessionId, "open_call") + manager.openCamera(cameraId, object : CameraDevice.StateCallback() { + override fun onOpened(camera: CameraDevice) { + opening = false + device = camera + if (!active) camera.close() else configure(camera) + } + override fun onDisconnected(camera: CameraDevice) = lost(camera, "Depth camera disconnected") + override fun onError(camera: CameraDevice, error: Int) = lost(camera, "Depth camera error $error") + private fun lost(camera: CameraDevice, reason: String) { + opening = false + device = camera + if (active) fail(reason) else camera.close() + } + override fun onClosed(camera: CameraDevice) { + if (device === camera) device = null + finishClose() + } + }, handler) + } catch (e: Exception) { opening = false; fail(e.message ?: "Cannot open depth camera") } + } + + @Suppress("DEPRECATION") + private fun configure(camera: CameraDevice) { + try { + val output = ImageReader.newInstance(size.width, size.height, ImageFormat.DEPTH16, 3) + reader = output + output.setOnImageAvailableListener({ source -> + try { + source.acquireLatestImage()?.use { image -> + if (!active) return@use + telemetry.image(sessionId, image.timestamp, image.width, image.height, image.format, "depth") + val now = SystemClock.elapsedRealtime() + if (lastFrameMs?.let { now - it < 100 } == true || !pendingFrame.compareAndSet(false, true)) return@use + try { + val plane = image.planes[0] + val crop = image.cropRect + val copy = DepthFrame.render(plane.buffer, crop.width(), crop.height(), plane.rowStride, plane.pixelStride, crop.left, crop.top) + lastFrameMs = now + main.post { + try { if (active) frame(copy) } finally { pendingFrame.set(false) } + } + } catch (e: Exception) { pendingFrame.set(false); throw e } + } + } catch (e: Exception) { if (active) fail("DEPTH16 read failed: ${e.message}") } + }, handler) + telemetry.configureCallbackStreams(sessionId, listOf(mapOf("id" to "depth", "kind" to "DEPTH16", "label" to "Depth", + "eventKind" to "image_available", "repeating" to true, "observable" to true, "width" to size.width, "height" to size.height))) + camera.createCaptureSession(listOf(output.surface), object : CameraCaptureSession.StateCallback() { + override fun onConfigured(value: CameraCaptureSession) { + if (!active || device !== camera) { value.close(); return } + session = value + try { + val request = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply { + addTarget(output.surface) + setTag("depth") + }.build() + value.setRepeatingRequest(request, telemetry.callback(sessionId, { listOf("depth") }) { active }, handler) + telemetry.sessions.computeIfPresent(sessionId) { _, old -> old + mapOf("negotiatedStreams" to mapOf("depth" to size.toString())) } + main.post { if (active) status("DEPTH16 · $size · LIVE", true) } + handler.postDelayed(firstFrameTimeout, 8000) + } catch (e: Exception) { fail("Depth request failed: ${e.message}") } + } + override fun onConfigureFailed(value: CameraCaptureSession) { + value.close() + if (active) fail("The HAL rejected the DEPTH16 session at $size.") + } + }, handler) + } catch (e: Exception) { fail("Depth session failed: ${e.message}") } + } + + override fun capture() = Unit + override fun setZoom(ratio: Float) = Unit + + override fun close(done: () -> Unit) { + active = false + if (!handler.post { + if (finished) main.post(done) else { + closers += done + release() + } + }) main.post(done) + } + + private fun fail(reason: String) { + active = false + telemetry.event(sessionId, "depth_failed", mapOf("reason" to reason)) + main.post { status(reason, false) } + release() + } + + private fun stopWaiting() { + handler.removeCallbacks(openAfterRelease) + availability?.let { manager.unregisterAvailabilityCallback(it) } + availability = null + } + + private fun release() { + stopWaiting() + handler.removeCallbacks(firstFrameTimeout) + session?.close(); session = null + if (device != null) device?.close() else if (!opening) finishClose() + } + + private fun finishClose() { + if (device != null || opening || finished) return + reader?.close(); reader = null + finished = true + val callbacks = closers.toList().also { closers.clear() } + main.post { callbacks.forEach { it() } } + thread.quitSafely() + } +} diff --git a/app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt b/app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt new file mode 100644 index 00000000..1c8b5242 --- /dev/null +++ b/app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt @@ -0,0 +1,24 @@ +package dev.halcamera.camera + +import android.graphics.ImageFormat +import android.hardware.camera2.CameraCharacteristics + +/** Read each declaration independently so a missing vendor key never becomes a false support claim. */ +fun depthSupport(c: CameraCharacteristics): DepthSupport { + val errors = mutableListOf() + fun read(name: String, block: () -> T): T? = try { block() } catch (e: Exception) { + errors += "$name: ${e.javaClass.simpleName}: ${e.message}" + null + } + val capabilities = read("REQUEST_AVAILABLE_CAPABILITIES") { c[CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES] } + val map = read("SCALER_STREAM_CONFIGURATION_MAP") { c[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP] } + val sizes = read("DEPTH16 sizes") { + map?.getOutputSizes(ImageFormat.DEPTH16) + .orEmpty().map { LiveSize(it.width, it.height) }.distinct().sortedBy { it.width.toLong() * it.height } + }.orEmpty() + return DepthSupport( + capabilities?.contains(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT), sizes, + read("DEPTH_DEPTH_IS_EXCLUSIVE") { c[CameraCharacteristics.DEPTH_DEPTH_IS_EXCLUSIVE] }, + read("Color output formats") { map?.outputFormats?.any { it != ImageFormat.DEPTH16 && it != ImageFormat.DEPTH_POINT_CLOUD } }, errors, + ) +} diff --git a/app/src/main/java/dev/halcamera/camera/DepthFrame.kt b/app/src/main/java/dev/halcamera/camera/DepthFrame.kt new file mode 100644 index 00000000..afa6b06b --- /dev/null +++ b/app/src/main/java/dev/halcamera/camera/DepthFrame.kt @@ -0,0 +1,45 @@ +package dev.halcamera.camera + +import java.nio.ByteBuffer +import java.nio.ByteOrder + +/** A display copy only; never serialized into benchmark JSON or incident ZIPs. */ +data class DepthFrame(val width: Int, val height: Int, val pixels: IntArray, val centerMm: Int?, val validPercent: Int) { + companion object { + const val MAX_MM = 8191 + private const val BLACK = -0x1000000 + + fun confidence(sample: Int): Float { + val code = (sample ushr 13) and 7 + return if (code == 0) 1f else (code - 1) / 7f + } + + /** Absolute reads honor row/pixel strides, crop offsets and buffer position, including the final row's padding. */ + fun render(source: ByteBuffer, width: Int, height: Int, rowStride: Int, pixelStride: Int, + left: Int = 0, top: Int = 0, maxEdge: Int = 640): DepthFrame { + require(width > 0 && height > 0 && left >= 0 && top >= 0 && maxEdge > 0) + require(pixelStride == 2 && rowStride.toLong() >= (left.toLong() + width) * pixelStride) + val end = (top.toLong() + height - 1) * rowStride + (left.toLong() + width - 1) * pixelStride + 2 + require(end <= source.remaining().toLong()) { "DEPTH16 plane is truncated" } + val buffer = source.slice().order(ByteOrder.LITTLE_ENDIAN) + val step = ((maxOf(width, height) - 1) / maxEdge) + 1 + val outWidth = (width - 1) / step + 1 + val outHeight = (height - 1) / step + 1 + val pixels = IntArray(outWidth * outHeight) + fun sample(x: Int, y: Int) = buffer.getShort((top + y) * rowStride + (left + x) * pixelStride).toInt() and 0xffff + fun valid(value: Int) = (value and 0x1fff) > 0 && confidence(value) >= 0.5f + var count = 0 + for (y in 0 until outHeight) for (x in 0 until outWidth) { + val value = sample(x * step, y * step) + val mm = value and 0x1fff + pixels[y * outWidth + x] = if (!valid(value)) BLACK else { + count++ + val gray = 32 + (MAX_MM - mm) * 223 / MAX_MM + BLACK or (gray shl 16) or (gray shl 8) or gray + } + } + val center = sample(width / 2, height / 2).takeIf(::valid)?.and(0x1fff) + return DepthFrame(outWidth, outHeight, pixels, center, (count.toLong() * 100 / pixels.size).toInt()) + } + } +} diff --git a/app/src/main/java/dev/halcamera/camera/DepthSupport.kt b/app/src/main/java/dev/halcamera/camera/DepthSupport.kt new file mode 100644 index 00000000..5206985f --- /dev/null +++ b/app/src/main/java/dev/halcamera/camera/DepthSupport.kt @@ -0,0 +1,34 @@ +package dev.halcamera.camera + +/** Static HAL declarations, not a guarantee that a particular output combination will configure. */ +data class DepthSupport( + val advertised: Boolean?, + val sizes: List, + val exclusive: Boolean?, + val color: Boolean?, + val errors: List = emptyList(), +) { + val available get() = advertised == true && sizes.isNotEmpty() + val unavailableReason get() = when { + advertised == null -> "Depth capability could not be read." + !advertised -> "This camera does not advertise DEPTH_OUTPUT." + sizes.isEmpty() -> "No readable DEPTH16 resolutions." + else -> null + } + val colorSummary get() = when { + advertised == false -> "Not applicable: no DEPTH_OUTPUT" + advertised == null -> "Unknown: capability unavailable" + color == false -> "Not applicable: no color output formats reported" + color == null -> "Unknown: color output formats unavailable" + exclusive == true -> "No: interleave color and depth requests" + exclusive == false -> "Allowed by HAL; output combination must still be checked" + else -> "Unknown: DEPTH_DEPTH_IS_EXCLUSIVE not reported" + } + fun probeRows(independentlyOpenable: Boolean = true): List = listOf( + ProbeRow("DEPTH_OUTPUT", when (advertised) { true -> "Supported"; false -> "Not supported"; null -> "Unknown" }), + ProbeRow("DEPTH16 resolutions", sizes.joinToString().ifEmpty { "None reported" }), + ProbeRow("Color + depth (same request)", colorSummary), + ProbeRow("LIVE depth map", if (!independentlyOpenable) "Physical camera: select a publicly listed camera ID in LIVE" + else if (available) "Available in Camera2 · Depth-only view" else unavailableReason.orEmpty()), + ) + errors.map { ProbeRow("Read error", it) } +} diff --git a/app/src/main/java/dev/halcamera/ui/DepthMapView.kt b/app/src/main/java/dev/halcamera/ui/DepthMapView.kt new file mode 100644 index 00000000..e4cdc1ce --- /dev/null +++ b/app/src/main/java/dev/halcamera/ui/DepthMapView.kt @@ -0,0 +1,73 @@ +package dev.halcamera.ui + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.view.View +import androidx.core.graphics.createBitmap +import androidx.core.graphics.withTranslation +import dev.halcamera.camera.DepthFrame +import dev.halcamera.camera.LiveSize +import java.util.Locale + +/** Raw sensor depth, fitted without cropping; rotation/mirror are applied only for display. */ +@android.annotation.SuppressLint("ViewConstructor") +internal class DepthMapView(context: Context, private val sourceSize: LiveSize, + private val sensorOrientation: Int, private val front: Boolean) : View(context) { + private var bitmap: Bitmap? = null + private var summary = "Waiting for DEPTH16 frames…" + private val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = Look.onDark; textSize = Look.dp(context, 12).toFloat(); textAlign = Paint.Align.CENTER } + private val imagePaint = Paint().apply { isFilterBitmap = false } + + init { setBackgroundColor(Color.BLACK); importantForAccessibility = IMPORTANT_FOR_ACCESSIBILITY_YES } + + fun setChromeInsets(top: Int, bottom: Int) { + if (paddingTop != top || paddingBottom != bottom) setPadding(Look.dp(context, 16), top, Look.dp(context, 16), bottom) + } + + fun bind(frame: DepthFrame) { + val image = bitmap?.takeIf { it.width == frame.width && it.height == frame.height } + ?: createBitmap(frame.width, frame.height).also { bitmap = it } + image.setPixels(frame.pixels, 0, frame.width, 0, 0, frame.width, frame.height) + val center = frame.centerMm?.let { String.format(Locale.US, "Center %.3f m", it / 1000.0) } ?: "Center unavailable" + summary = "$center · Valid ${frame.validPercent}%" + contentDescription = "Depth map $sourceSize. $summary. Near is bright, far is dark. Black means invalid or confidence below 50 percent." + invalidate() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val top = paddingTop.toFloat() + val availableHeight = (height - paddingTop - paddingBottom).coerceAtLeast(1).toFloat() + val centerY = top + availableHeight / 2f + val textSpace = Look.dp(context, 80).toFloat() + bitmap?.let { image -> + @Suppress("DEPRECATION") + val degrees = (display?.rotation ?: 0) * 90 + val rotation = (sensorOrientation + (if (front) degrees else -degrees) + 360) % 360 + val swapped = rotation % 180 != 0 + val imageWidth = if (swapped) image.height else image.width + val imageHeight = if (swapped) image.width else image.height + val scale = minOf((width - paddingLeft - paddingRight).coerceAtLeast(1).toFloat() / imageWidth, + (availableHeight - textSpace).coerceAtLeast(1f) / imageHeight) + canvas.withTranslation(width / 2f, centerY - textSpace / 2) { + if (front) scale(-1f, 1f) + rotate(rotation.toFloat()) + scale(scale, scale) + drawBitmap(image, -image.width / 2f, -image.height / 2f, imagePaint) + } + } + val baseline = top + availableHeight - Look.dp(context, 56) + canvas.drawText("DEPTH16 · $sourceSize · Depth only", width / 2f, baseline, paint) + canvas.drawText(summary, width / 2f, baseline + Look.dp(context, 20), paint) + canvas.drawText("Near: bright · Far: dark · Black: invalid", width / 2f, baseline + Look.dp(context, 40), paint) + canvas.drawText("0–8.191 m · Confidence ≥ 50%", width / 2f, baseline + Look.dp(context, 60), paint) + } + + override fun onDetachedFromWindow() { + bitmap?.recycle(); bitmap = null + super.onDetachedFromWindow() + } +} diff --git a/app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt b/app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt index 1a2fa3a5..976ee52a 100644 --- a/app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt +++ b/app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt @@ -5,7 +5,7 @@ internal data class LiveStreamReadout(val text: String, val description: String) companion object { private data class Label(val key: String, val short: String, val name: String, val pip: Boolean = false) private val labels = listOf(Label("preview", "P", "Preview"), Label("analysis", "Y", "YUV"), - Label("jpeg", "J", "JPEG"), Label("raw", "RAW", "RAW"), Label("recording", "R", "Recording"), + Label("jpeg", "J", "JPEG"), Label("raw", "RAW", "RAW"), Label("depth", "Depth", "Depth"), Label("recording", "R", "Recording"), Label("pip", "P", "PIP Preview", true), Label("pipYuv", "Y", "PIP YUV", true), Label("pipJpeg", "J", "PIP JPEG", true)) fun from(streams: Map<*, *>?): LiveStreamReadout { diff --git a/app/src/test/java/dev/halcamera/camera/DepthFrameTest.kt b/app/src/test/java/dev/halcamera/camera/DepthFrameTest.kt new file mode 100644 index 00000000..ef98cb0a --- /dev/null +++ b/app/src/test/java/dev/halcamera/camera/DepthFrameTest.kt @@ -0,0 +1,60 @@ +package dev.halcamera.camera + +import java.nio.ByteBuffer +import java.nio.ByteOrder +import org.junit.Assert.* +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@RunWith(JUnit4::class) +class DepthFrameTest { + private fun plane(vararg samples: Int) = ByteBuffer.allocate(samples.size * 2).order(ByteOrder.LITTLE_ENDIAN).apply { + samples.forEach { putShort(it.toShort()) }; flip() + } + + @Test fun `confidence zero code means full confidence and code one means invalid`() { + assertEquals(1f, DepthFrame.confidence(1200), 0f) + assertEquals(0f, DepthFrame.confidence((1 shl 13) or 1200), 0f) + assertEquals(1f / 7, DepthFrame.confidence((2 shl 13) or 1200), 0.00001f) + assertEquals(6f / 7, DepthFrame.confidence((7 shl 13) or 1200), 0.00001f) + } + + @Test fun `zero range and low confidence are black but far valid depth is visible`() { + val frame = DepthFrame.render(plane(0, 1, 8191, (1 shl 13) or 1000, (4 shl 13) or 1000, (5 shl 13) or 1000), 6, 1, 12, 2) + assertEquals(-0x1000000, frame.pixels[0]) + assertTrue((frame.pixels[1] and 255) > (frame.pixels[2] and 255)) + assertEquals(32, frame.pixels[2] and 255) + assertEquals(-0x1000000, frame.pixels[3]) + assertEquals(-0x1000000, frame.pixels[4]) + assertNotEquals(-0x1000000, frame.pixels[5]) + assertEquals(50, frame.validPercent) + assertNull(frame.centerMm) + } + + @Test fun `crop and padded rows honor buffer position without requiring last row padding`() { + val buffer = plane(9999, 0, 0, 0, 0, 0, 10, 20, 0, 0, 30, 40) + buffer.position(2) + val frame = DepthFrame.render(buffer, 2, 2, 8, 2, left = 1, top = 1) + assertEquals(40, frame.centerMm) + assertEquals(100, frame.validPercent) + assertEquals(2, buffer.position()) + assertTrue((frame.pixels[0] and 255) >= (frame.pixels[3] and 255)) + } + + @Test fun `large planes are sampled to a bounded display frame`() { + val buffer = ByteBuffer.allocate(1280 * 720 * 2).order(ByteOrder.LITTLE_ENDIAN) + repeat(1280 * 720) { buffer.putShort(2000) }; buffer.flip() + val frame = DepthFrame.render(buffer, 1280, 720, 2560, 2) + assertEquals(640, frame.width) + assertEquals(360, frame.height) + assertEquals(2000, frame.centerMm) + assertEquals(100, frame.validPercent) + } + + @Test(expected = IllegalArgumentException::class) + fun `truncated planes are rejected`() { DepthFrame.render(plane(1000, 2000, 3000), 2, 2, 4, 2) } + + @Test(expected = IllegalArgumentException::class) + fun `unexpected pixel stride is rejected`() { DepthFrame.render(plane(1000, 2000), 2, 1, 4, 1) } +} diff --git a/app/src/test/java/dev/halcamera/camera/DepthSupportTest.kt b/app/src/test/java/dev/halcamera/camera/DepthSupportTest.kt new file mode 100644 index 00000000..9896ce75 --- /dev/null +++ b/app/src/test/java/dev/halcamera/camera/DepthSupportTest.kt @@ -0,0 +1,38 @@ +package dev.halcamera.camera + +import org.junit.Assert.* +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@RunWith(JUnit4::class) +class DepthSupportTest { + private val size = LiveSize(320, 240) + + @Test fun `capability and at least one size are both required for LIVE`() { + assertFalse(DepthSupport(false, listOf(size), false, true).available) + assertFalse(DepthSupport(null, listOf(size), false, true).available) + assertFalse(DepthSupport(true, emptyList(), false, true).available) + assertTrue(DepthSupport(true, listOf(size), null, true).available) + assertTrue(DepthSupport(true, listOf(size), true, false).available) + } + + @Test fun `exclusive and unknown never claim simultaneous color support`() { + assertTrue(DepthSupport(true, listOf(size), true, true).colorSummary.startsWith("No:")) + assertTrue(DepthSupport(true, listOf(size), null, true).colorSummary.startsWith("Unknown:")) + assertTrue(DepthSupport(true, listOf(size), false, true).colorSummary.contains("combination must still be checked")) + assertTrue(DepthSupport(true, listOf(size), false, false).colorSummary.contains("no color output")) + assertTrue(DepthSupport(true, listOf(size), false, null).colorSummary.startsWith("Unknown:")) + assertTrue(DepthSupport(false, emptyList(), null, true).colorSummary.startsWith("Not applicable:")) + } + + @Test fun `depth rows survive text and JSON export with read errors`() { + val support = DepthSupport(true, listOf(size), true, true, listOf("vendor key unavailable")) + val snapshot = CameraProbeSnapshot("now", emptyList(), listOf(CameraProbeEntry("0", null, "Camera 0", + listOf(ProbeSection("Depth", support.probeRows())))), emptyList()) + assertTrue(CameraProbeText.render(snapshot).contains("320x240")) + assertTrue(CameraProbeText.render(snapshot).contains("interleave")) + assertTrue(snapshot.toJsonMap().toString().contains("vendor key unavailable")) + assertTrue(support.probeRows(false).last { it.key == "LIVE depth map" }.value.contains("Physical camera")) + } +} diff --git a/app/src/test/java/dev/halcamera/ui/LiveStreamReadoutTest.kt b/app/src/test/java/dev/halcamera/ui/LiveStreamReadoutTest.kt index 1c53325e..643e1cdf 100644 --- a/app/src/test/java/dev/halcamera/ui/LiveStreamReadoutTest.kt +++ b/app/src/test/java/dev/halcamera/ui/LiveStreamReadoutTest.kt @@ -4,6 +4,10 @@ import org.junit.Assert.* import org.junit.Test class LiveStreamReadoutTest { + @Test fun depthOnlyDoesNotInventColorOutputs() { + assertEquals(LiveStreamReadout("Depth 320×240", "Depth 320x240"), + LiveStreamReadout.from(mapOf("depth" to "320x240"))) + } @Test fun everyInactiveStreamIsHiddenFromBothReadouts() { val values = listOf("analysis", "jpeg", "raw", "recording", "pip", "pipYuv", "pipJpeg").associateWith { null } + mapOf("preview" to "1280x720", "composite" to "590x1280") diff --git a/docs/.site-manifest.json b/docs/.site-manifest.json index a981fc93..95b72f5f 100644 --- a/docs/.site-manifest.json +++ b/docs/.site-manifest.json @@ -4,7 +4,7 @@ ".nojekyll": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "_inputs/decisions.html": "aadc3cad5fb3b8e37af148aa62ae79f9be0ba19a076fd2837f85c471b1629ded", "_inputs/device-verification.yaml": "1852f48d52f75733b4db973418fc7fad1f0f9d340a8b4b555cf9d49aa7016215", - "architecture.html": "53f25c59d4bd7addeecea62ce6713c0ae70e16f3aa2d5e2c9903c07b551414e7", + "architecture.html": "25ce19c49718bb2926310d4f8bc048e628f5bb237f331a1ea6e5927f937547ff", "assets/docflow-design.css": "1cc4f34d8df94abdcf70ab2e9c51e456d8ef7f52283a2ef3adb986a6bd38d44c", "assets/media/automation/bridge.png": "bdbd7cbdc28010caa9b8e320e2d311efd35bb2f66cbb9b5cb322af638b7ccbff", "assets/media/automation/opening-sensor.mp4": "8e26f5eeeb0b92cd241b2235aab7ffd122cbf2ac94b66c37fafb440da4ae1178", @@ -72,8 +72,8 @@ "getting-started.html": "75b356487a9be6930c095686fcdc47229ecdd53b73b77f971a770f1e0f387e0f", "glossary.html": "a26775e3f8a0d6af19b7531b2dc86ea7630a9c0511bb34a308e3a630522462f1", "index.html": "34466a88605267322b92082ec1592c72a48a9fd2e3cdee59e66cea770d79372a", - "live.html": "15a39112070431467c9a8e04c04747df2d4866bad5fcf8d09cf96d51300308d2", - "probe.html": "926734ca1971e5c93cf19474edd8f1931536770100ec81d94944cf801af0aaed", + "live.html": "5a5c7a1bb6ba91857d68ccbbce07e28894c6c6194191c227a91241460686f119", + "probe.html": "95c89f7937f412abe452c3a8a3134b1f129908d8bccebb78671d1c49fd0302a1", "troubleshooting.html": "819baee906880fbaab14d0a649623326227868e748966ddbfe2d0272a50e53cb" } } diff --git a/docs/architecture.html b/docs/architecture.html index 569ce82b..fc02274f 100644 --- a/docs/architecture.html +++ b/docs/architecture.html @@ -113,7 +113,7 @@

코드를 처음 읽는 순서

근거와 검토 정보
  • 근거 파일: app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, tools/halcam/halcam/cli.py, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt, app/src/main/java/dev/halcamera/WorkbenchActivity.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/telemetry/Telemetry.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt
  • 근거 수준: 코드 확인
  • -
  • 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only
  • +
  • 검토 상태: 관련 소스 변경됨: 재검토 필요

전체 구조도

화살표는 코드를 사용하는 방향입니다. 이벤트와 파일이 이동하는 순서는 데이터 흐름에서 확인하세요.

@@ -292,7 +292,7 @@

코드를 처음 읽는 순서

근거와 검토 정보
  • 근거 파일: app/src/main/java/dev/halcamera/camera/MultiSession.kt, app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt, app/src/main/java/dev/halcamera/camera/MultiRecording.kt, app/src/main/java/dev/halcamera/camera/SplitDragGesture.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, app/src/main/java/dev/halcamera/cli/LiveController.kt, app/src/main/java/dev/halcamera/cli/BenchmarkController.kt, app/src/main/java/dev/halcamera/cli/CliLibrary.kt, app/src/main/java/dev/halcamera/MainCliBridge.kt, app/src/main/java/dev/halcamera/DualCliBridge.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt, app/src/main/java/dev/halcamera/benchmark/platform/EnvironmentProbe.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunIndex.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkCsv.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt, app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt, app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt, app/src/main/java/dev/halcamera/ui/RecentMediaButton.kt, app/src/main/java/dev/halcamera/ui/Look.kt, app/src/main/java/dev/halcamera/cts/recording/BasicRecordingRules.kt, app/src/main/java/dev/halcamera/cts/CtsEntryActivity.kt, app/src/main/java/dev/halcamera/cts/vendored/VendoredCaseActivity.kt, app/src/main/java/dev/halcamera/cts/vendored/VendoredCtsListActivity.kt, app/src/main/java/dev/halcamera/cts/CtsCaseActivity.kt, app/src/main/java/dev/halcamera/cts/CtsCaseListActivity.kt, app/src/main/java/dev/halcamera/cts/suite/CtsChecklistActivity.kt, app/src/main/java/dev/halcamera/cts/suite/CtsSuiteRunActivity.kt, app/src/main/java/dev/halcamera/cts/suite/SuitePlan.kt, app/src/main/java/dev/halcamera/cts/suite/SuiteReport.kt, app/src/main/java/dev/halcamera/cts/CtsCatalog.kt, app/src/main/java/dev/halcamera/cts/CtsRunner.kt, app/src/main/java/dev/halcamera/cts/CameraCaseRunner.kt, app/src/main/java/dev/halcamera/cts/Camera2Ops.kt, app/src/main/java/dev/halcamera/cts/onoff/FastOnOffRules.kt, app/src/main/java/dev/halcamera/cts/switching/SwitchingRules.kt, app/src/main/java/dev/halcamera/cts/sizes/AllSizeOnOffRules.kt, app/src/main/java/dev/halcamera/cts/combination/StillPreviewCombinationRules.kt, app/src/main/java/dev/halcamera/cts/snapshot/VideoSnapshotRules.kt, app/src/main/java/dev/halcamera/CameraProbeActivity.kt, app/src/main/java/dev/halcamera/camera/CameraProbe.kt, app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt
  • 근거 수준: 코드 확인
  • -
  • 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only
  • +
  • 검토 상태: 관련 소스 변경됨: 재검토 필요

CLI 책임을 따라가세요

CliCommands는 명령별 필수 인자·허용 옵션·기본 제한·실행 대상과 Live에서 실행되는 방식(flow)·녹화 여부를 한곳에서 정의하고 hello.command_specs로 제공합니다.

@@ -437,7 +437,7 @@

CLI 요청과 결과 수집

근거와 검토 정보
  • 근거 파일: app/src/main/java/dev/halcamera/cli/CliProvider.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, tools/halcam/halcam/cli.py, tools/halcam/halcam/download.py, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/GalleryActivity.kt, app/src/main/java/dev/halcamera/camera/MediaLibrary.kt, app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt, app/src/main/java/dev/halcamera/telemetry/Telemetry.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/metrics/MetricExtractor.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunRetention.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/platform/LaunchDiagnostics.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt
  • 근거 수준: 코드 확인
  • -
  • 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only
  • +
  • 검토 상태: 관련 소스 변경됨: 재검토 필요

이벤트와 결과가 전달되는 경로

graph TB
@@ -670,7 +670,7 @@ 

CLI의 접근과 완료 경계

근거와 검토 정보
  • 근거 파일: app/src/main/java/dev/halcamera/camera/MultiSession.kt, app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt, app/src/main/java/dev/halcamera/camera/MultiRecording.kt, app/src/main/java/dev/halcamera/camera/MicrophoneCapture.kt, app/src/main/java/dev/halcamera/camera/TimestampedVideoRecording.kt, app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt, app/src/main/java/dev/halcamera/cli/CliProvider.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, app/src/main/java/dev/halcamera/cli/CommandStore.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt, app/src/main/java/dev/halcamera/camera/CameraEndpointResolver.kt, app/src/main/java/dev/halcamera/telemetry/IncidentExporter.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionRules.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkStore.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkIndex.kt, app/src/main/java/dev/halcamera/benchmark/domain/AtomicFiles.kt
  • 근거 수준: 코드 확인
  • -
  • 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only
  • +
  • 검토 상태: 관련 소스 변경됨: 재검토 필요

변경 후 검증

Android 의존성이 없는 러너와 평가 로직은 JVM 단위 테스트로 확인할 수 있습니다. 저장소 루트에서 실행하세요.

@@ -709,17 +709,17 @@

미완성 기능과 추가 검증

구조 원본 data-flow -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-18 @ e9d3233c · codex-multi-cli-code-review 구조 원본 overall-architecture -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-18 @ e9d3233c · codex-multi-cli-code-review 구조 원본 state-transitions -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-18 @ e9d3233c · codex-multi-cli-code-review @@ -729,32 +729,32 @@

미완성 기능과 추가 검증

구조 원본 ui-tool-handoff -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-18 @ e4bc487a · codex-multi-cli-code-review 구조 원본 ui-zoom -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-18 @ 3e7627e0 · claude-cli-specs-refactor 원고 overview -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only 원고 module-roles -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only 원고 runtime-flow -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only 원고 constraints -최신 +관련 소스 변경됨: 재검토 필요 검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only diff --git a/docs/live.html b/docs/live.html index d5a27000..3cb4d5f2 100644 --- a/docs/live.html +++ b/docs/live.html @@ -48,6 +48,16 @@

Live에서 촬영하세요

기본 사진은 카메라가 만든 JPEG 한 장입니다. DCIM/HALCamera에 저장하며, 촬영 메타데이터 JSON도 남깁니다.

JPEG 목록에서 YUV를 고르면 앱이 변환한 JPEG를 저장합니다. Camera2에서 RAW를 켜면 DNG도 저장합니다.

모드나 엔진을 바꾸면 새 촬영으로 시작합니다. PIP·스트림·줌·촬영 제어는 초기화됩니다. Callback의 고정 시간은 사용자 설정으로 유지합니다.

+

Depth 맵을 보세요

+
    +
  1. Lab → Probe에서 카메라의 Depth 섹션을 확인합니다.
  2. +
  3. Live로 돌아와 카메라를 선택합니다.
  4. +
  5. 하단의 Depth를 누르고 DEPTH16 해상도를 선택합니다. 지원하지 않거나 정보를 읽지 못한 카메라는 이유를 표시합니다.
  6. +
  7. 컬러 화면으로 돌아가려면 Photo 또는 Video를 누릅니다. Depth → Off로도 Photo로 돌아갈 수 있습니다.
  8. +
+

Depth는 Camera2의 깊이 맵만 표시하는 보기 모드입니다. 선택하면 기존 카메라를 닫은 뒤 Depth 전용 세션을 엽니다. 컬러와 Depth를 같은 요청에서 받을 수 없는 기기에서도 사용할 수 있으며, 컬러와 정렬된 합성 화면은 제공하지 않습니다. 사진·동영상 저장, 줌·터치 측광·수동 제어와 PIP는 사용할 수 없습니다.

+

가까운 곳은 밝고 먼 곳은 어둡습니다. 표시 범위는 0–8.191 m이며, 거리가 0이거나 신뢰도가 50% 미만인 픽셀은 검게 표시합니다. 중앙 거리와 유효 픽셀 비율도 표시합니다. 비율은 화면에 표시할 표본을 기준으로 계산합니다. 표시용 맵은 긴 변이 최대 640픽셀이 되도록 표본을 추출하며, 갱신은 최대 초당 10회입니다.

+

선택한 해상도로 세션을 열지 못하거나 8초 동안 첫 Depth 프레임을 받지 못하면 이유를 표시합니다. 이때 다른 해상도를 선택하거나 Photo로 돌아가세요. 맵은 센서 방향과 전면 카메라의 좌우 반전을 반영하며 전체 영역을 잘라내지 않고 보여줍니다. Depth 픽셀을 Benchmark JSON이나 진단 ZIP에 저장하지 않습니다.

동영상을 찍으세요

  1. 하단에서 Video를 선택합니다.
  2. diff --git a/docs/probe.html b/docs/probe.html index 71a3a7de..cb34f37c 100644 --- a/docs/probe.html +++ b/docs/probe.html @@ -47,11 +47,12 @@

    앱에서 Probe를 여세요

    • 카메라 목록: 논리 카메라와 그 안의 물리 카메라를 구분합니다. 사양이 보여도 단독으로 열 수 없는 물리 카메라가 있습니다.
    • 섹션: 제목을 눌러 접거나 펼칩니다. 출력 형식별 크기는 STREAMS에서 확인합니다.
    • +
    • DEPTH: DEPTH_OUTPUT 지원 여부와 DEPTH16 해상도, 컬러와 Depth를 같은 요청에 포함할 수 있는지를 확인합니다. Allowed by HAL은 기기의 선언이며 특정 출력 조합의 동작을 보장하지 않습니다. Unknown은 해당 정보를 읽지 못한 상태입니다. 단독으로 열 수 없는 물리 카메라는 LIVE에서 직접 선택할 수 없습니다.
    • 필터: 단어가 들어간 줄을 찾습니다. 결과를 누르면 해당 항목으로 이동합니다.
    • REQUEST · RESULT KEYS / SESSION KEYS: 요청·결과에서 지원하는 key 이름입니다. 실제 촬영값은 아닙니다.
    -섹션 이름과 API별 표시 조건

    IDENTITY, CAPABILITIES, SENSOR, LENS, CONTROL, PROCESSING, REQUEST 뒤에 REQUEST · RESULT KEYS가 나옵니다.

    +섹션 이름과 API별 표시 조건

    IDENTITY, CAPABILITIES, DEPTH, SENSOR, LENS, CONTROL, PROCESSING, REQUEST 뒤에 REQUEST · RESULT KEYS가 나옵니다.

    SESSION KEYS는 API 28 이상, MANDATORY STREAM COMBINATIONS는 API 29 이상에서 표시합니다.

    STREAMS는 PRIVATE·JPEG 같은 출력 형식별로 나뉩니다. 이어서 HIGH SPEED VIDEO, REPROCESSING INPUTS, ALL CHARACTERISTICS가 나옵니다.

    enum 값은 가능한 경우 숫자 대신 상수 이름을 표시합니다.

    diff --git a/docs/validation/depth-20261020/README.md b/docs/validation/depth-20261020/README.md new file mode 100644 index 00000000..5b02e1fe --- /dev/null +++ b/docs/validation/depth-20261020/README.md @@ -0,0 +1,37 @@ +# PROBE와 LIVE Depth 검증 + +2026-10-20에 PROBE의 Depth 사양 표시와 LIVE의 DEPTH16 보기 코드를 검증했습니다. 실제 Depth 센서에서 프레임을 받은 결과는 포함하지 않습니다. + +## 자동 검증 + +- `testDebugUnitTest`: 앱 JVM 테스트 907개가 통과했습니다. Depth 신뢰도 코드, 거리 0, stride·crop·버퍼 위치, 잘린 plane, 표시 표본 제한, 지원 여부와 Unknown 구분, TXT·JSON 내보내기와 Depth 스트림 표시를 포함합니다. +- `lintDebug`: 오류와 경고가 없습니다. +- `assembleDebug`, `assembleDebugAndroidTest`: APK를 생성했습니다. +- 문서 회귀 검사에서 새 요소 수를 112개로 반영했습니다. 입력 크기 한도와 dry-run 검사를 포함한 검사를 실행했으며, 한도 초과를 수정한 두 검사는 재실행하여 통과했습니다. +- 문서 coverage, 생성 일치와 사이트 산출물 일치 검사를 통과했습니다. 후속 문서 검토에서는 사용자가 승인한 범위에서 원본 최신성 기록을 갱신하고 전체 `docflow check --build`와 `check --ci`를 확인합니다. + +## 에뮬레이터 확인 + +기기는 `sdk_gphone64_x86_64`이며 Android 16 / API 36입니다. 기존 앱 데이터를 삭제하지 않고 서명이 일치하는 로컬 빌드로 갱신했습니다. + +1. LIVE에서 `Depth`를 눌러 미지원 카메라의 이유와 비활성화된 해상도 항목을 확인했습니다. +2. `Lab → Probe`에서 `Depth`를 검색해 지원 여부·해상도·컬러 동시 요청 가능 여부가 검색 결과에 포함되는지 확인했습니다. +3. `depth_checks=true` instrumentation으로 합성 DEPTH16을 해석하고, 중앙 거리 1.000 m·유효 표본 비율·맵 표시와 접근성 설명을 확인했습니다. 검증용 testApplicationId는 `dev.halcamera.depthchecks`로 지정했습니다. 결과는 `DEPTH_MAP_CHECKS_OK`입니다. + +| 화면 | 확인 자료 | +| --- | --- | +| PROBE 검색 | [Depth 사양](probe-depth.png) | +| LIVE 미지원 안내 | [Depth unavailable](depth-unavailable.png) | +| 합성 데이터 렌더링 | [Depth map synthetic](depth-map-synthetic.png) | + +## 변경사항 리뷰 + +Depth 지원 선언과 Unknown 처리, confidence 비트·stride·crop 해석, UI 전달 대기 제한, 세션 실패와 close(done) 순서, 늦은 프레임 차단, Photo·Video·CLI 전환 및 픽셀 저장 경계를 대조했습니다. 코드 리뷰에서 남은 기능 수정 사항은 없습니다. 문서에는 Depth의 별도 엔진·촬영 비활성화·줌 제한이 일부 빠져 있어 엔진 비교·데이터 흐름·수명주기·줌 원본에 반영했습니다. + +이 검토는 사용자 요청에 따른 Codex의 코드 대조 기록입니다. 실제 Depth 센서 실측이나 별도 사람의 독립 코드 리뷰를 뜻하지 않습니다. + +## 실제 기기에서 남은 확인 + +DEPTH_OUTPUT 지원 기기에서 해상도별 세션 구성과 지속 수신, 컬러 보기와의 반복 전환, 백그라운드 복귀와 회전, 카메라 해제 완료를 확인해야 합니다. Depth 전용 세션이므로 컬러와 Depth를 같은 요청으로 받는 조합이나 Bokeh 합성은 이번 검증 범위에 포함하지 않습니다. + +사용 방법은 [Live 가이드](../../../guide/live.md#depth-맵을-보세요)를 참고하세요. diff --git a/docs/validation/depth-20261020/depth-map-synthetic.png b/docs/validation/depth-20261020/depth-map-synthetic.png new file mode 100644 index 0000000000000000000000000000000000000000..da43f6dd6657cdbde8b044e70eddb8388d780269 GIT binary patch literal 44588 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 literal 0 HcmV?d00001 diff --git a/docs/validation/depth-20261020/depth-unavailable.png b/docs/validation/depth-20261020/depth-unavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..32607c7faad0bfe98eb8d08fa98d515466594cc7 GIT binary patch literal 1208905 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ⅆ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

    of-4)J@v-3){AW45rHFx0azh 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

    @@ -814,7 +817,7 @@ AE 재잠금은 Camera2와 같은 [AeRelock 상태도](#노출은-언제-다시- - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXPipSession.kt`, `app/src/main/java/dev/halcamera/camera/PipSessionQuery.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/CameraXVideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/camera/StillEncoding.kt`, `app/src/main/java/dev/halcamera/camera/YuvPacking.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/StreamConfiguration.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeter.kt`, `app/build.gradle.kts` - 근거 수준: 코드 확인 -- 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -834,11 +837,11 @@ AE 재잠금은 Camera2와 같은 [AeRelock 상태도](#노출은-언제-다시- | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `contract` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `camera2` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `camerax` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `comparison` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `overall-architecture` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 원고 `contract` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 원고 `camera2` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 원고 `camerax` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 원고 `comparison` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | diff --git a/guide/_reference/evidence.md b/guide/_reference/evidence.md index 64d595d8..4c5b79eb 100644 --- a/guide/_reference/evidence.md +++ b/guide/_reference/evidence.md @@ -80,7 +80,7 @@ Galaxy S25+·Android 16에서 2026년 9월 17~19일, versionCode 106~108로 수 - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt` - 기기 검증: `V-002` - 근거 수준: 기기 검증 -- 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -98,8 +98,8 @@ Galaxy S25+·Android 16에서 2026년 9월 17~19일, versionCode 106~108로 수 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `device-notes` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `overall-architecture` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 원고 `device-notes` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | diff --git a/guide/_reference/troubleshooting.md b/guide/_reference/troubleshooting.md index f8cada1c..0efef4aa 100644 --- a/guide/_reference/troubleshooting.md +++ b/guide/_reference/troubleshooting.md @@ -140,7 +140,7 @@ PC의 대기 시간이 끝나도 앱 작업은 계속될 수 있습니다. 요 - 근거 파일: `app/src/main/java/dev/halcamera/cli/CommandStore.kt`, `tools/halcam/halcam/cli.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/ManualControlRequests.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/metrics/MetricExtractor.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -172,9 +172,9 @@ PC의 대기 시간이 끝나도 앱 작업은 계속될 수 있습니다. 요 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `data-flow` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 구조 원본 `state-transitions` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `layer-isolation` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `data-flow` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `state-transitions` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 원고 `layer-isolation` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | diff --git a/guide/architecture.md b/guide/architecture.md index 0b519a69..9f9da4f1 100644 --- a/guide/architecture.md +++ b/guide/architecture.md @@ -57,7 +57,7 @@ PC에서 같은 기능을 실행하려면 [CLI](cli.md)를 사용합니다. `Cli - 근거 파일: `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `tools/halcam/halcam/cli.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt`, `app/src/main/java/dev/halcamera/WorkbenchActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -252,7 +252,7 @@ Camera2의 RAW (DNG)는 `RawFrame`이 RAW 샘플을 복사하고 `DngOutput`이 - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/SplitDragGesture.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `app/src/main/java/dev/halcamera/cli/LiveController.kt`, `app/src/main/java/dev/halcamera/cli/BenchmarkController.kt`, `app/src/main/java/dev/halcamera/cli/CliLibrary.kt`, `app/src/main/java/dev/halcamera/MainCliBridge.kt`, `app/src/main/java/dev/halcamera/DualCliBridge.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/EnvironmentProbe.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunIndex.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkCsv.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt`, `app/src/main/java/dev/halcamera/ui/RecentMediaButton.kt`, `app/src/main/java/dev/halcamera/ui/Look.kt`, `app/src/main/java/dev/halcamera/cts/recording/BasicRecordingRules.kt`, `app/src/main/java/dev/halcamera/cts/CtsEntryActivity.kt`, `app/src/main/java/dev/halcamera/cts/vendored/VendoredCaseActivity.kt`, `app/src/main/java/dev/halcamera/cts/vendored/VendoredCtsListActivity.kt`, `app/src/main/java/dev/halcamera/cts/CtsCaseActivity.kt`, `app/src/main/java/dev/halcamera/cts/CtsCaseListActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/CtsChecklistActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/CtsSuiteRunActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/SuitePlan.kt`, `app/src/main/java/dev/halcamera/cts/suite/SuiteReport.kt`, `app/src/main/java/dev/halcamera/cts/CtsCatalog.kt`, `app/src/main/java/dev/halcamera/cts/CtsRunner.kt`, `app/src/main/java/dev/halcamera/cts/CameraCaseRunner.kt`, `app/src/main/java/dev/halcamera/cts/Camera2Ops.kt`, `app/src/main/java/dev/halcamera/cts/onoff/FastOnOffRules.kt`, `app/src/main/java/dev/halcamera/cts/switching/SwitchingRules.kt`, `app/src/main/java/dev/halcamera/cts/sizes/AllSizeOnOffRules.kt`, `app/src/main/java/dev/halcamera/cts/combination/StillPreviewCombinationRules.kt`, `app/src/main/java/dev/halcamera/cts/snapshot/VideoSnapshotRules.kt`, `app/src/main/java/dev/halcamera/CameraProbeActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraProbe.kt`, `app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -471,7 +471,7 @@ CliLaunchActivity는 Dual·Multi에서 Live로 돌아갈 때 CliNavigationHost - 근거 파일: `app/src/main/java/dev/halcamera/cli/CliProvider.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `tools/halcam/halcam/cli.py`, `tools/halcam/halcam/download.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/GalleryActivity.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/metrics/MetricExtractor.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunRetention.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/LaunchDiagnostics.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -742,7 +742,7 @@ Live 카메라 종료 후 벤치마크 화면으로 이동하고 기존 측정· - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/MicrophoneCapture.kt`, `app/src/main/java/dev/halcamera/camera/TimestampedVideoRecording.kt`, `app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt`, `app/src/main/java/dev/halcamera/cli/CliProvider.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `app/src/main/java/dev/halcamera/cli/CommandStore.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraEndpointResolver.kt`, `app/src/main/java/dev/halcamera/telemetry/IncidentExporter.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionRules.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkStore.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkIndex.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/AtomicFiles.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only +- 검토 상태: 관련 소스 변경됨: 재검토 필요 @@ -794,16 +794,16 @@ Android 의존성이 없는 러너와 평가 로직은 JVM 단위 테스트로 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `data-flow` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 구조 원본 `state-transitions` | 최신 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `data-flow` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `overall-architecture` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `state-transitions` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | | 구조 원본 `ui-camera-label` | 최신 | 검토 2026-10-10 @ `93385443` · Codex (mode reset, labels and numeric ID selection review) | -| 구조 원본 `ui-tool-handoff` | 최신 | 검토 2026-10-18 @ `e4bc487a` · codex-multi-cli-code-review | -| 구조 원본 `ui-zoom` | 최신 | 검토 2026-10-18 @ `3e7627e0` · claude-cli-specs-refactor | -| 원고 `overview` | 최신 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | -| 원고 `module-roles` | 최신 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | -| 원고 `runtime-flow` | 최신 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | -| 원고 `constraints` | 최신 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | +| 구조 원본 `ui-tool-handoff` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e4bc487a` · codex-multi-cli-code-review | +| 구조 원본 `ui-zoom` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `3e7627e0` · claude-cli-specs-refactor | +| 원고 `overview` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | +| 원고 `module-roles` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | +| 원고 `runtime-flow` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | +| 원고 `constraints` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | diff --git a/guide/live.md b/guide/live.md index 9c4d3d56..d6b3a5a7 100644 --- a/guide/live.md +++ b/guide/live.md @@ -25,6 +25,19 @@ Photo로 한 장을 찍고, Video로 움직임을 담아 보세요. 처음에는 **모드나 엔진을 바꾸면 새 촬영으로 시작합니다.** PIP·스트림·줌·촬영 제어는 초기화됩니다. Callback의 고정 시간은 사용자 설정으로 유지합니다. +### Depth 맵을 보세요 + +1. `Lab → Probe`에서 카메라의 `Depth` 섹션을 확인합니다. +2. Live로 돌아와 카메라를 선택합니다. +3. 하단의 `Depth`를 누르고 `DEPTH16` 해상도를 선택합니다. 지원하지 않거나 정보를 읽지 못한 카메라는 이유를 표시합니다. +4. 컬러 화면으로 돌아가려면 `Photo` 또는 `Video`를 누릅니다. `Depth → Off`로도 Photo로 돌아갈 수 있습니다. + +**Depth는 Camera2의 깊이 맵만 표시하는 보기 모드입니다.** 선택하면 기존 카메라를 닫은 뒤 Depth 전용 세션을 엽니다. 컬러와 Depth를 같은 요청에서 받을 수 없는 기기에서도 사용할 수 있으며, 컬러와 정렬된 합성 화면은 제공하지 않습니다. 사진·동영상 저장, 줌·터치 측광·수동 제어와 PIP는 사용할 수 없습니다. + +가까운 곳은 밝고 먼 곳은 어둡습니다. 표시 범위는 0–8.191 m이며, 거리가 0이거나 신뢰도가 50% 미만인 픽셀은 검게 표시합니다. 중앙 거리와 유효 픽셀 비율도 표시합니다. 비율은 화면에 표시할 표본을 기준으로 계산합니다. 표시용 맵은 긴 변이 최대 640픽셀이 되도록 표본을 추출하며, 갱신은 최대 초당 10회입니다. + +선택한 해상도로 세션을 열지 못하거나 8초 동안 첫 Depth 프레임을 받지 못하면 이유를 표시합니다. 이때 다른 해상도를 선택하거나 `Photo`로 돌아가세요. 맵은 센서 방향과 전면 카메라의 좌우 반전을 반영하며 전체 영역을 잘라내지 않고 보여줍니다. Depth 픽셀을 Benchmark JSON이나 진단 ZIP에 저장하지 않습니다. + ### 동영상을 찍으세요 1. 하단에서 `Video`를 선택합니다. diff --git a/guide/probe.md b/guide/probe.md index 2870ec24..bb9c4321 100644 --- a/guide/probe.md +++ b/guide/probe.md @@ -28,13 +28,14 @@ title: Probe - **카메라 목록:** 논리 카메라와 그 안의 물리 카메라를 구분합니다. 사양이 보여도 단독으로 열 수 없는 물리 카메라가 있습니다. - **섹션:** 제목을 눌러 접거나 펼칩니다. 출력 형식별 크기는 STREAMS에서 확인합니다. +- **DEPTH:** `DEPTH_OUTPUT` 지원 여부와 `DEPTH16` 해상도, 컬러와 Depth를 같은 요청에 포함할 수 있는지를 확인합니다. `Allowed by HAL`은 기기의 선언이며 특정 출력 조합의 동작을 보장하지 않습니다. `Unknown`은 해당 정보를 읽지 못한 상태입니다. 단독으로 열 수 없는 물리 카메라는 LIVE에서 직접 선택할 수 없습니다. - **필터:** 단어가 들어간 줄을 찾습니다. 결과를 누르면 해당 항목으로 이동합니다. - **REQUEST · RESULT KEYS / SESSION KEYS:** 요청·결과에서 지원하는 key 이름입니다. 실제 촬영값은 아닙니다.
    섹션 이름과 API별 표시 조건 -IDENTITY, CAPABILITIES, SENSOR, LENS, CONTROL, PROCESSING, REQUEST 뒤에 REQUEST · RESULT KEYS가 나옵니다. +IDENTITY, CAPABILITIES, DEPTH, SENSOR, LENS, CONTROL, PROCESSING, REQUEST 뒤에 REQUEST · RESULT KEYS가 나옵니다. SESSION KEYS는 API 28 이상, MANDATORY STREAM COMBINATIONS는 API 29 이상에서 표시합니다. diff --git a/tools/docgen/regression.test.mjs b/tools/docgen/regression.test.mjs index 0cec2db1..e92f96ab 100644 --- a/tools/docgen/regression.test.mjs +++ b/tools/docgen/regression.test.mjs @@ -114,7 +114,7 @@ test('all configured elements fit the prompt budget and exclude descendant field assert.ok(input.files.length > 0); count++; } } - assert.equal(count, 111); // Includes Multi's separate CLI adapter, session and split-layout evidence. + assert.equal(count, 112); // Includes the LIVE depth engine's own evidence. `)); }); diff --git a/tools/docgen/state/evidence.json b/tools/docgen/state/evidence.json index 986baf01..ab3f6e88 100644 --- a/tools/docgen/state/evidence.json +++ b/tools/docgen/state/evidence.json @@ -3,7 +3,7 @@ "entries": { "omm:overall-architecture": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "4ee54ca1bee6a0f5", @@ -282,7 +282,7 @@ }, "omm:data-flow": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "22eb6a5c54fd7836", @@ -333,7 +333,7 @@ }, "omm:state-transitions": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "98c3b8dd8a671c51", @@ -377,7 +377,7 @@ }, "content:architecture.md/overview": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "17867e1678c12800", @@ -659,7 +659,7 @@ }, "content:architecture.md/runtime-flow": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "d8bf9992cd2c94cb", @@ -985,7 +985,7 @@ } }, "observed": { - "state": "fresh" + "state": "stale" } }, "content:architecture.md/constraints": { @@ -1264,7 +1264,7 @@ } }, "observed": { - "state": "fresh" + "state": "stale" } }, "omm:ui-camera-label": { @@ -1285,7 +1285,7 @@ }, "omm:ui-tool-handoff": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "9723c8ef764a7680", @@ -1301,7 +1301,7 @@ }, "omm:ui-zoom": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "3d7b55295e557886", @@ -1318,7 +1318,7 @@ }, "content:_reference/engine.md/contract": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "4ee54ca1bee6a0f5", @@ -1597,7 +1597,7 @@ }, "content:_reference/engine.md/camera2": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "4ee54ca1bee6a0f5", @@ -1876,7 +1876,7 @@ }, "content:_reference/engine.md/camerax": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "4ee54ca1bee6a0f5", @@ -2155,7 +2155,7 @@ }, "content:_reference/engine.md/comparison": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "4ee54ca1bee6a0f5", @@ -2434,7 +2434,7 @@ }, "content:_reference/troubleshooting.md/layer-isolation": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "127e509c8189a9ce", @@ -2496,7 +2496,7 @@ }, "content:_reference/evidence.md/device-notes": { "observed": { - "state": "fresh" + "state": "stale" }, "accepted": { "codeHash": "4ee54ca1bee6a0f5", From 742c68aa7353888cb79da0aabb078183f3e08b6b Mon Sep 17 00:00:00 2001 From: TTolsun <112919054+TTolsun@users.noreply.github.com> Date: Tue, 20 Oct 2026 00:59:11 +0900 Subject: [PATCH 2/5] Record authorized depth documentation review --- docs/.site-manifest.json | 2 +- docs/architecture.html | 52 ++-- docs/design/APP-UI.md | 8 +- docs/validation/depth-20261020/README.md | 4 +- guide/_reference/engine.md | 27 +- guide/_reference/evidence.md | 6 +- guide/_reference/troubleshooting.md | 8 +- guide/architecture.md | 36 +-- tools/docgen/state/evidence.json | 312 +++++++++++++---------- 9 files changed, 263 insertions(+), 192 deletions(-) diff --git a/docs/.site-manifest.json b/docs/.site-manifest.json index 95b72f5f..2e4e2a8b 100644 --- a/docs/.site-manifest.json +++ b/docs/.site-manifest.json @@ -4,7 +4,7 @@ ".nojekyll": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "_inputs/decisions.html": "aadc3cad5fb3b8e37af148aa62ae79f9be0ba19a076fd2837f85c471b1629ded", "_inputs/device-verification.yaml": "1852f48d52f75733b4db973418fc7fad1f0f9d340a8b4b555cf9d49aa7016215", - "architecture.html": "25ce19c49718bb2926310d4f8bc048e628f5bb237f331a1ea6e5927f937547ff", + "architecture.html": "556ca4149bbf8c0f359b1d7fec63861bdb7766383a9a4c0704520aa4ab34b44e", "assets/docflow-design.css": "1cc4f34d8df94abdcf70ab2e9c51e456d8ef7f52283a2ef3adb986a6bd38d44c", "assets/media/automation/bridge.png": "bdbd7cbdc28010caa9b8e320e2d311efd35bb2f66cbb9b5cb322af638b7ccbff", "assets/media/automation/opening-sensor.mp4": "8e26f5eeeb0b92cd241b2235aab7ffd122cbf2ac94b66c37fafb440da4ae1178", diff --git a/docs/architecture.html b/docs/architecture.html index fc02274f..a8580ed2 100644 --- a/docs/architecture.html +++ b/docs/architecture.html @@ -79,7 +79,7 @@

    One system.
    Clear responsibilities.

    측정·판 Live · MainActivity -앱을 열면 나오는 화면입니다. 프리뷰를 보고 사진·동영상을 촬영합니다. +앱을 열면 나오는 화면입니다. 프리뷰를 보고 사진·동영상을 촬영하며 지원 카메라의 Depth 맵을 봅니다. Multi · ConcurrentCameraActivity @@ -113,7 +113,7 @@

    코드를 처음 읽는 순서

    근거와 검토 정보
    • 근거 파일: app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, tools/halcam/halcam/cli.py, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt, app/src/main/java/dev/halcamera/WorkbenchActivity.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/telemetry/Telemetry.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt
    • 근거 수준: 코드 확인
    • -
    • 검토 상태: 관련 소스 변경됨: 재검토 필요
    • +
    • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review

    전체 구조도

    화살표는 코드를 사용하는 방향입니다. 이벤트와 파일이 이동하는 순서는 데이터 흐름에서 확인하세요.

    @@ -208,7 +208,7 @@

    코드를 처음 읽는 순서

    camera/
      -
    • 엔진 계약, Camera2·CameraX 구현, 엔드포인트 열거를 제공합니다.

      +
    • 엔진 계약, Camera2·CameraX 구현, 엔드포인트 열거를 제공합니다. DepthCameraEngine은 컬러 출력 없이 DEPTH16 맵만 받으며 DepthFrame이 순수 Kotlin으로 표시용 표본을 만듭니다.

    • close(done) 완료 전에 다음 카메라를 열지 않습니다.

    • @@ -292,7 +292,7 @@

      코드를 처음 읽는 순서

      근거와 검토 정보
      • 근거 파일: app/src/main/java/dev/halcamera/camera/MultiSession.kt, app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt, app/src/main/java/dev/halcamera/camera/MultiRecording.kt, app/src/main/java/dev/halcamera/camera/SplitDragGesture.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, app/src/main/java/dev/halcamera/cli/LiveController.kt, app/src/main/java/dev/halcamera/cli/BenchmarkController.kt, app/src/main/java/dev/halcamera/cli/CliLibrary.kt, app/src/main/java/dev/halcamera/MainCliBridge.kt, app/src/main/java/dev/halcamera/DualCliBridge.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt, app/src/main/java/dev/halcamera/benchmark/platform/EnvironmentProbe.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunIndex.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkCsv.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt, app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt, app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt, app/src/main/java/dev/halcamera/ui/RecentMediaButton.kt, app/src/main/java/dev/halcamera/ui/Look.kt, app/src/main/java/dev/halcamera/cts/recording/BasicRecordingRules.kt, app/src/main/java/dev/halcamera/cts/CtsEntryActivity.kt, app/src/main/java/dev/halcamera/cts/vendored/VendoredCaseActivity.kt, app/src/main/java/dev/halcamera/cts/vendored/VendoredCtsListActivity.kt, app/src/main/java/dev/halcamera/cts/CtsCaseActivity.kt, app/src/main/java/dev/halcamera/cts/CtsCaseListActivity.kt, app/src/main/java/dev/halcamera/cts/suite/CtsChecklistActivity.kt, app/src/main/java/dev/halcamera/cts/suite/CtsSuiteRunActivity.kt, app/src/main/java/dev/halcamera/cts/suite/SuitePlan.kt, app/src/main/java/dev/halcamera/cts/suite/SuiteReport.kt, app/src/main/java/dev/halcamera/cts/CtsCatalog.kt, app/src/main/java/dev/halcamera/cts/CtsRunner.kt, app/src/main/java/dev/halcamera/cts/CameraCaseRunner.kt, app/src/main/java/dev/halcamera/cts/Camera2Ops.kt, app/src/main/java/dev/halcamera/cts/onoff/FastOnOffRules.kt, app/src/main/java/dev/halcamera/cts/switching/SwitchingRules.kt, app/src/main/java/dev/halcamera/cts/sizes/AllSizeOnOffRules.kt, app/src/main/java/dev/halcamera/cts/combination/StillPreviewCombinationRules.kt, app/src/main/java/dev/halcamera/cts/snapshot/VideoSnapshotRules.kt, app/src/main/java/dev/halcamera/CameraProbeActivity.kt, app/src/main/java/dev/halcamera/camera/CameraProbe.kt, app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt
      • 근거 수준: 코드 확인
      • -
      • 검토 상태: 관련 소스 변경됨: 재검토 필요
      • +
      • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review

    CLI 책임을 따라가세요

    CliCommands는 명령별 필수 인자·허용 옵션·기본 제한·실행 대상과 Live에서 실행되는 방식(flow)·녹화 여부를 한곳에서 정의하고 hello.command_specs로 제공합니다.

    @@ -309,6 +309,7 @@

    주요 실행 흐름

    결과 화면과 실행 기록은 Benchmark, 사양 표는 Probe, 케이스 실행과 판정은 CTS, 프레임별 그래프는 Callback, ADB 명령의 사용법은 CLI에서 확인하세요. Live 조작은 Live에 있습니다.

    배치·간격·애니메이션·접근성 문구 같은 앱의 조작 규칙은 APP-UI.md가 관리합니다.

    Live 셔터 조작은 MainActivity에서 선택한 엔진의 촬영·녹화 동작으로 이어집니다.

    +

    Live의 Depth 보기는 DepthCameraEngine → ImageReader → DepthFrame → DepthMapView로 연결합니다. 컬러 촬영과 분리된 보기이며, Telemetry에는 버퍼의 시각·크기·형식과 capture 콜백만 기록합니다. 맵 픽셀을 벤치마크나 incident ZIP의 입력으로 전달하지 않습니다. 사용 순서는 Depth 맵 보기에 있습니다.

    벤치마크는 별도 화면인 BenchmarkActivity가 준비를 마친 뒤 BenchmarkRunner.start()를 호출하여 시작합니다.

    Telemetry.callback(...)이 반환한 Camera2 콜백의 onCaptureStarted는 프레임워크 신호를 기록하며, Live 셔터와 벤치마크 시작을 연결하는 메서드가 아닙니다.

    실행에서 저장까지

    @@ -437,7 +438,7 @@

    CLI 요청과 결과 수집

    근거와 검토 정보
    • 근거 파일: app/src/main/java/dev/halcamera/cli/CliProvider.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, tools/halcam/halcam/cli.py, tools/halcam/halcam/download.py, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/GalleryActivity.kt, app/src/main/java/dev/halcamera/camera/MediaLibrary.kt, app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt, app/src/main/java/dev/halcamera/telemetry/Telemetry.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/metrics/MetricExtractor.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunRetention.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/platform/LaunchDiagnostics.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt
    • 근거 수준: 코드 확인
    • -
    • 검토 상태: 관련 소스 변경됨: 재검토 필요
    • +
    • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review

    이벤트와 결과가 전달되는 경로

    graph TB
    @@ -575,7 +576,7 @@ 

    카메라 이름을 적는 방법

    줌 컨트롤의 상태

    현재 배율을 누르면 지원 배율이 펼쳐집니다. 처음에는 현재 배율 하나만 보입니다.

    Live 프리뷰에서 두 손가락을 벌리거나 모으면 지원 범위 안에서 연속으로 줌을 바꿉니다. 가장 가까운 프리셋의 원에 현재 배율을 소수 첫째 자리까지 표시하며, 펼친 상태에서 그 원을 누르면 해당 프리셋 배율로 돌아갑니다. 화면의 카메라 선택 정보를 갱신해도 중간 배율은 유지합니다.

    -

    핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다.

    +

    핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. Depth 보기, 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다.

    @@ -630,6 +631,7 @@

    실행과 측정의 제약

  3. 벤치마크 JSON과 incident ZIP에는 관측 이벤트·메타데이터를 저장하며 이미지 픽셀을 저장하지 않습니다.

  4. +

    Depth 보기는 컬러와 Depth를 같은 요청에 포함하지 않는 별도 Camera2 세션입니다. HAL의 동시 요청 허용 선언은 특정 출력 조합의 성공을 보장하지 않습니다. DepthCameraEngine은 촬영·녹화·수동 제어·줌·터치 측광을 제공하지 않으며 CLI 제어 변경도 거절합니다. Photo·Video 또는 CLI 촬영 준비로 전환하면 Depth를 해제합니다.

    Multi 모드의 MultiSession은 CameraEngine과 별도입니다. Camera2는 선택한 독립 장치를 연 뒤 세션을 구성하며, CameraX는 광고된 동시 조합을 바인딩합니다.

    모든 장치의 종료 통지를 확인해야 출력을 해제하고 다음 동시 세션을 열 수 있습니다. 한 명령의 여러 사진을 센서 동기 촬영으로 해석하지 않습니다.

    Multi V의 MicrophoneCapture는 AudioRecord의 MONOTONIC 하드웨어 시각과 PCM 프레임 위치로 오디오 원점을 구합니다.

    @@ -670,7 +672,7 @@

    CLI의 접근과 완료 경계

    근거와 검토 정보
    • 근거 파일: app/src/main/java/dev/halcamera/camera/MultiSession.kt, app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt, app/src/main/java/dev/halcamera/camera/MultiRecording.kt, app/src/main/java/dev/halcamera/camera/MicrophoneCapture.kt, app/src/main/java/dev/halcamera/camera/TimestampedVideoRecording.kt, app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt, app/src/main/java/dev/halcamera/cli/CliProvider.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, app/src/main/java/dev/halcamera/cli/CommandStore.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt, app/src/main/java/dev/halcamera/camera/CameraEndpointResolver.kt, app/src/main/java/dev/halcamera/telemetry/IncidentExporter.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionRules.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkStore.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkIndex.kt, app/src/main/java/dev/halcamera/benchmark/domain/AtomicFiles.kt
    • 근거 수준: 코드 확인
    • -
    • 검토 상태: 관련 소스 변경됨: 재검토 필요
    • +
    • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review

    변경 후 검증

    Android 의존성이 없는 러너와 평가 로직은 JVM 단위 테스트로 확인할 수 있습니다. 저장소 루트에서 실행하세요.

    @@ -709,18 +711,18 @@

    미완성 기능과 추가 검증

    - - + + - - + + - - + + @@ -729,33 +731,33 @@

    미완성 기능과 추가 검증

    - - + + - - + + - - + + - - + + - - + + - - + +
    구조 원본 data-flow관련 소스 변경됨: 재검토 필요검토 2026-10-18 @ e9d3233c · codex-multi-cli-code-review최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    구조 원본 overall-architecture관련 소스 변경됨: 재검토 필요검토 2026-10-18 @ e9d3233c · codex-multi-cli-code-review최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    구조 원본 state-transitions관련 소스 변경됨: 재검토 필요검토 2026-10-18 @ e9d3233c · codex-multi-cli-code-review최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    구조 원본 ui-camera-label
    구조 원본 ui-tool-handoff관련 소스 변경됨: 재검토 필요검토 2026-10-18 @ e4bc487a · codex-multi-cli-code-review최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    구조 원본 ui-zoom관련 소스 변경됨: 재검토 필요검토 2026-10-18 @ 3e7627e0 · claude-cli-specs-refactor최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    원고 overview관련 소스 변경됨: 재검토 필요검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    원고 module-roles관련 소스 변경됨: 재검토 필요검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    원고 runtime-flow관련 소스 변경됨: 재검토 필요검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    원고 constraints관련 소스 변경됨: 재검토 필요검토 2026-10-19 @ cc58ea27 · codex-editorial-formatting-only최신검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review

    표의 최신은 기록된 근거와 원고가 검토 이후 바뀌지 않았다는 뜻입니다. 모든 기기에서 동작을 검증했다는 뜻은 아닙니다.

    diff --git a/docs/design/APP-UI.md b/docs/design/APP-UI.md index a03267a3..13508f48 100644 --- a/docs/design/APP-UI.md +++ b/docs/design/APP-UI.md @@ -22,6 +22,12 @@ AEB가 꺼져 있을 때 셔터를 길게 누르면 연사하고 손을 떼면 셔터 위에는 `AEB 0/3`, `Burst · 2`, `HDR…`처럼 현재 상태만 표시합니다. 결과는 같은 자리에 기본 5초 동안 표시하고 접근성 시간 연장 설정을 따릅니다. 상태 변화로 셔터 위치가 움직이지 않도록 한 줄 높이를 확보하며 긴 실패 이유는 줄바꿈합니다. TalkBack은 `Start burst` 동작과 `Stop burst` 셔터로 연사를 조작합니다. 합성 중 다음 AEB는 시작하지 않습니다. +## Live Depth + +Live 하단의 Depth는 Camera2의 DEPTH16 해상도 선택창을 엽니다. 미지원 카메라는 이유를 표시합니다. 선택한 맵은 잘라내지 않고 표시하며 가까운 곳은 밝게, 먼 곳은 어둡게, 거리 0 또는 신뢰도 50% 미만은 검게 표시합니다. 중앙 거리와 표시 표본의 유효 비율도 읽을 수 있어야 합니다. + +Depth에서는 촬영·녹화·PIP·줌·수동 제어·터치 측광을 비활성화합니다. Photo·Video로 돌아가거나 Depth에서 Off를 선택해 컬러 보기로 복귀합니다. 세션 실패 뒤에도 복귀 동작을 사용할 수 있어야 합니다. + ## Lab과 기기 식별 Live의 `Lab`에서 기기 모델과 Android 정보를 확인하고, 기기 행을 눌러 SoC와 OS 빌드 등 상세 정보를 엽니다. Lab 자체는 카메라를 열거나 촬영 권한을 요구하지 않습니다. SoC는 기기가 보고한 값을 사용하며 Exynos로 가정하지 않습니다. API 31 미만에서는 `Build.HARDWARE`를 표시합니다. @@ -163,7 +169,7 @@ Live의 카메라 선택창은 아래쪽 조작부를 숨기고 위쪽을 흐리 Live 프리뷰에서 두 손가락을 벌리거나 모으면 지원 범위 안에서 연속으로 줌을 바꿉니다. 가장 가까운 프리셋의 원에 현재 배율을 소수 첫째 자리까지 표시하며, 펼친 상태에서 그 원을 누르면 해당 프리셋 배율로 돌아갑니다. 화면의 카메라 선택 정보를 갱신해도 중간 배율은 유지합니다. -핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다. +핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. Depth 보기, 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다. | 조건 | 동작 | | --- | --- | diff --git a/docs/validation/depth-20261020/README.md b/docs/validation/depth-20261020/README.md index 5b02e1fe..a563717e 100644 --- a/docs/validation/depth-20261020/README.md +++ b/docs/validation/depth-20261020/README.md @@ -7,8 +7,8 @@ - `testDebugUnitTest`: 앱 JVM 테스트 907개가 통과했습니다. Depth 신뢰도 코드, 거리 0, stride·crop·버퍼 위치, 잘린 plane, 표시 표본 제한, 지원 여부와 Unknown 구분, TXT·JSON 내보내기와 Depth 스트림 표시를 포함합니다. - `lintDebug`: 오류와 경고가 없습니다. - `assembleDebug`, `assembleDebugAndroidTest`: APK를 생성했습니다. -- 문서 회귀 검사에서 새 요소 수를 112개로 반영했습니다. 입력 크기 한도와 dry-run 검사를 포함한 검사를 실행했으며, 한도 초과를 수정한 두 검사는 재실행하여 통과했습니다. -- 문서 coverage, 생성 일치와 사이트 산출물 일치 검사를 통과했습니다. 후속 문서 검토에서는 사용자가 승인한 범위에서 원본 최신성 기록을 갱신하고 전체 `docflow check --build`와 `check --ci`를 확인합니다. +- 문서 회귀 검사 37개가 모두 통과했습니다. 새 요소 수 112개, 입력 크기 한도, dry-run, 앱 UI 규칙 사본 일치와 배포 링크를 포함합니다. +- 사용자 요청에 따라 코드를 대조하고 원본 최신성 15개 항목의 검토 기록을 `codex-user-authorized-depth-review`로 갱신했습니다. 기존 최신 항목의 검토자는 보존했습니다. 전체 `docflow check --build` 6단계와 coverage·생성 일치·사이트 산출물 일치 검사를 통과했습니다. ## 에뮬레이터 확인 diff --git a/guide/_reference/engine.md b/guide/_reference/engine.md index acc99f20..aecf88d8 100644 --- a/guide/_reference/engine.md +++ b/guide/_reference/engine.md @@ -23,6 +23,7 @@ nav_order: 5 | 항목 | Camera2 | CameraX | | --- | --- | --- | +| Depth 보기 | DEPTH_OUTPUT과 DEPTH16 해상도를 공개한 카메라에서 별도 Depth 전용 세션을 엽니다. 맵 표시만 제공합니다. | Depth 해상도를 선택하면 Camera2로 전환합니다. | | 수동 촬영 | ISO·노출 시간·초점과 WB를 프리뷰·사진·녹화에 적용합니다. 지원 여부와 실제 적용값을 표시합니다. | Manual 버튼을 미지원 상태로 비활성화합니다. | | YUV를 JPEG로 선택 | 요청한 YUV 이미지와 최종 CaptureResult의 센서 시각을 맞춥니다. | 촬영 뒤 받은 analysis 프레임 하나를 변환합니다. | | JPEG 출처 | YUV 앱 변환 또는 HAL JPEG 중 하나와 촬영 JSON을 저장합니다. | YUV 앱 변환 또는 ImageCapture JPEG 중 하나와 촬영 JSON을 저장합니다. | @@ -59,7 +60,7 @@ PIP와 Multi는 Android 11 이상에서 제공합니다. 저장물과 설정 방 - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/Camera2StillCapture.kt`, `app/src/main/java/dev/halcamera/camera/Camera2LiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeterRequests.kt`, `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXPipSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/LivePipSession.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -177,7 +178,7 @@ classDiagram 종료 통지와 다음 엔진의 대기 순서는 [엔진 전환 그림](architecture.md#카메라-열기와-닫기)을 확인하세요. -Photo·Video·Multi · P·Multi · V 사이에서 모드를 바꾸면 기존 세션을 닫고 스트림을 다시 구성합니다. 같은 모드를 다시 누르면 유지합니다. 단일 카메라는 새 프리뷰의 첫 화면 갱신 뒤, Multi는 모든 장치의 합성 프리뷰가 준비된 뒤에 촬영 버튼을 활성화합니다. CLI 호환용 Dual도 두 프리뷰가 모두 갱신된 뒤에 촬영할 수 있습니다. 모드 선택 자체로 사진이나 녹화를 시작하지는 않습니다. +Photo·Video·Depth·Multi · P·Multi · V 사이에서 모드를 바꾸면 기존 세션을 닫고 스트림을 다시 구성합니다. 같은 모드를 다시 누르면 유지하며 Depth 버튼은 해상도 선택창을 엽니다. 일반 단일 카메라는 새 프리뷰의 첫 화면 갱신 뒤, Multi는 모든 장치의 합성 프리뷰가 준비된 뒤에 촬영 버튼을 활성화합니다. Depth는 첫 맵 수신 후에도 촬영 버튼을 비활성화합니다. CLI 호환용 Dual도 두 프리뷰가 모두 갱신된 뒤에 촬영할 수 있습니다. 모드 선택 자체로 사진이나 녹화를 시작하지는 않습니다. ### Benchmark와 CLI가 쓰는 엔진 @@ -187,7 +188,7 @@ CLI의 `preview`·`capture`·`record.start`는 `LiveController`를 통해 Camera ### 두 엔진이 함께 남기는 기록 -두 엔진은 세션을 열 때 `Telemetry.registerSession`에 엔진 이름(`Camera2` 또는 `CameraX`)을 남기고, 같은 `Telemetry.callback`으로 capture 콜백을 기록합니다. 그래서 `capture_started`, `capture_result` 같은 이벤트 종류가 엔진과 관계없이 같습니다. 엔진별로 요청을 만드는 방법이 다르므로, 같은 이벤트라도 요청에 들어간 키는 엔진마다 다를 수 있습니다. +일반 컬러 엔진은 세션을 열 때 `Telemetry.registerSession`에 엔진 이름(`Camera2` 또는 `CameraX`)을 남기고, 같은 `Telemetry.callback`으로 capture 콜백을 기록합니다. Depth 전용 엔진은 이름을 `Camera2 · Depth`로 남기며 같은 콜백 경로를 사용합니다. 그래서 `capture_started`, `capture_result` 같은 이벤트 종류가 엔진과 관계없이 같습니다. 엔진별로 요청을 만드는 방법이 다르므로, 같은 이벤트라도 요청에 들어간 키는 엔진마다 다를 수 있습니다. Live 제어와 터치 측광은 다음 이벤트를 추가로 남깁니다. @@ -218,7 +219,7 @@ Live 제어와 터치 측광은 다음 이벤트를 추가로 남깁니다. - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ui/LiveControlBar.kt`, `app/src/main/java/dev/halcamera/ui/FocusRing.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/StartCardPresenter.kt`, `app/src/main/java/dev/halcamera/cli/LiveController.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -235,6 +236,8 @@ Live 제어와 터치 측광은 다음 이벤트를 추가로 남깁니다. **Camera2Engine은 앱에서 CaptureRequest를 직접 구성합니다.** `request_observed`에 기록한 키를 HAL 로그와 대조할 수 있습니다. 엔진 자체는 세션, 요청 구성, 줌, Live 제어를 담당하고, 사진은 `Camera2StillCapture`, Live 녹화는 `Camera2LiveRecorder`, 터치 측광은 `Camera2TouchFocus`, 벤치마크 녹화는 `BenchmarkRecorder`가 맡습니다. 카메라 요청과 capture 콜백은 엔진이 만든 카메라 스레드 하나에서 처리하고, 버퍼 relay와 파일 저장은 각자의 스레드에서 처리합니다. +Depth 보기는 일반 `Camera2Engine`과 별도인 `DepthCameraEngine`이 담당합니다. 컬러·사진·녹화 출력 대신 DEPTH16 ImageReader 하나만 사용하며, 기존 엔진을 닫은 뒤 선택한 해상도로 엽니다. 사용 방법과 표시 범위는 [Depth 맵 보기](live.md#depth-맵을-보세요)를 확인하세요. + ### PIP 지원을 미리 확인하세요 **현재 해상도와 유지되는 YUV·JPEG·RAW 출력, 보조 카메라의 Preview·사진 출력으로 PIP 지원 여부를 조회합니다.** 선택창을 열 때와 적용 직전에 검사하며 제조사·칩셋·ID별 예외는 두지 않습니다. Physical은 열린 카메라의 `isSessionConfigurationSupported`, Service는 `CameraManager.isConcurrentSessionConfigurationSupported`를 사용합니다. 합성 녹화의 인코더는 GL 출력을 받으므로 카메라 세션 조회에 넣지 않습니다. @@ -600,7 +603,7 @@ Camera2에서 짧게 터치한 경우입니다. 긴 누르기는 별도의 AE - 근거 파일: `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/LivePipSession.kt`, `app/src/main/java/dev/halcamera/camera/PipSessionQuery.kt`, `app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt`, `app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt`, `app/src/main/java/dev/halcamera/camera/LiveStreamSettings.kt`, `app/src/main/java/dev/halcamera/camera/LiveStabilization.kt`, `app/src/main/java/dev/halcamera/camera/LiveStreamCapabilities.kt`, `app/src/main/java/dev/halcamera/camera/LiveSessionCheck.kt`, `app/src/main/java/dev/halcamera/camera/Camera2StillCapture.kt`, `app/src/main/java/dev/halcamera/camera/Camera2LiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/Camera2VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt`, `app/src/main/java/dev/halcamera/camera/PreviewBufferRelay.kt`, `app/src/main/java/dev/halcamera/camera/RecordingBufferRelay.kt`, `app/src/main/java/dev/halcamera/camera/StreamConfiguration.kt`, `app/src/main/java/dev/halcamera/camera/StillPair.kt`, `app/src/main/java/dev/halcamera/camera/YuvPacking.kt`, `app/src/main/java/dev/halcamera/camera/RawFrame.kt`, `app/src/main/java/dev/halcamera/camera/DngOutput.kt`, `app/src/main/java/dev/halcamera/camera/StillEncoding.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/camera/LiveControlRequests.kt`, `app/src/main/java/dev/halcamera/camera/ManualControls.kt`, `app/src/main/java/dev/halcamera/camera/ManualControlRequests.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeter.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeterRequests.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -617,6 +620,8 @@ Camera2에서 짧게 터치한 경우입니다. 긴 누르기는 별도의 AE **CameraXEngine은 CameraX use case로 Live 촬영과 제어를 제공하지만, 요청 키 일부는 CameraX가 정합니다.** Live 스트림 설정에서 Preview·YUV·JPEG 크기와 출력 활성화를 선택할 수 있습니다. 앱이 CameraX 1.6.2에 직접 넣는 Camera2 키에는 AE 잠금(`CONTROL_AE_LOCK`), AF 잠금 해제용 cancel trigger, 광학 보정(`LENS_OPTICAL_STABILIZATION_MODE`)이 있습니다. 엔진 자체는 use case bind, 줌, 수명 주기를 담당하고, 사진은 `CameraXStillCapture`, 녹화는 `CameraXLiveRecorder`, Live 제어와 터치 측광은 `CameraXControls`가 맡습니다. +Depth 해상도를 선택하면 CameraX 세션을 해제하고 Camera2의 `DepthCameraEngine`으로 전환합니다. CameraX use case에 Depth 출력을 추가하지 않습니다. 표시와 촬영 제한은 [Depth 맵 보기](live.md#depth-맵을-보세요)를 확인하세요. + ### CameraX PIP **PIP 목록에는 모든 후보를 표시하고 지원 불가가 확인된 항목만 비활성화합니다.** Physical 후보는 `Camera2 only`로 표시합니다. Service 후보는 CameraX가 제공하는 동시 조합에 포함되어야 합니다. 제조사·칩셋·카메라 ID에 따른 예외는 두지 않습니다. @@ -817,7 +822,7 @@ AE 재잠금은 Camera2와 같은 [AeRelock 상태도](#노출은-언제-다시- - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXPipSession.kt`, `app/src/main/java/dev/halcamera/camera/PipSessionQuery.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/CameraXVideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/camera/StillEncoding.kt`, `app/src/main/java/dev/halcamera/camera/YuvPacking.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/StreamConfiguration.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeter.kt`, `app/build.gradle.kts` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -837,11 +842,11 @@ AE 재잠금은 Camera2와 같은 [AeRelock 상태도](#노출은-언제-다시- | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `overall-architecture` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `contract` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `camera2` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `camerax` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `comparison` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `contract` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `camera2` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `camerax` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `comparison` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | diff --git a/guide/_reference/evidence.md b/guide/_reference/evidence.md index 4c5b79eb..856fed9f 100644 --- a/guide/_reference/evidence.md +++ b/guide/_reference/evidence.md @@ -80,7 +80,7 @@ Galaxy S25+·Android 16에서 2026년 9월 17~19일, versionCode 106~108로 수 - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt` - 기기 검증: `V-002` - 근거 수준: 기기 검증 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -98,8 +98,8 @@ Galaxy S25+·Android 16에서 2026년 9월 17~19일, versionCode 106~108로 수 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `overall-architecture` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `device-notes` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `device-notes` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | diff --git a/guide/_reference/troubleshooting.md b/guide/_reference/troubleshooting.md index 0efef4aa..0cb500ca 100644 --- a/guide/_reference/troubleshooting.md +++ b/guide/_reference/troubleshooting.md @@ -140,7 +140,7 @@ PC의 대기 시간이 끝나도 앱 작업은 계속될 수 있습니다. 요 - 근거 파일: `app/src/main/java/dev/halcamera/cli/CommandStore.kt`, `tools/halcam/halcam/cli.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/ManualControlRequests.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/metrics/MetricExtractor.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -172,9 +172,9 @@ PC의 대기 시간이 끝나도 앱 작업은 계속될 수 있습니다. 요 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `data-flow` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 구조 원본 `state-transitions` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 원고 `layer-isolation` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `data-flow` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `state-transitions` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `layer-isolation` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | diff --git a/guide/architecture.md b/guide/architecture.md index 9f9da4f1..32028d90 100644 --- a/guide/architecture.md +++ b/guide/architecture.md @@ -32,7 +32,7 @@ nav_order: 4 | 화면 | 할 수 있는 일 | | --- | --- | -| Live · `MainActivity` | 앱을 열면 나오는 화면입니다. 프리뷰를 보고 사진·동영상을 촬영합니다. | +| Live · `MainActivity` | 앱을 열면 나오는 화면입니다. 프리뷰를 보고 사진·동영상을 촬영하며 지원 카메라의 Depth 맵을 봅니다. | | Multi · `ConcurrentCameraActivity` | 독립 카메라 장치별 사진·영상을 제공합니다. Live의 Multi · P와 Multi · V에서 엽니다. | | Lab · `WorkbenchActivity` | 기기 정보, 검사 도구, 저장된 결과와 설정을 엽니다. | | Benchmark · `BenchmarkActivity` | 정해진 조건(profile)으로 측정하고 결과를 저장합니다. | @@ -57,7 +57,7 @@ PC에서 같은 기능을 실행하려면 [CLI](cli.md)를 사용합니다. `Cli - 근거 파일: `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `tools/halcam/halcam/cli.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt`, `app/src/main/java/dev/halcamera/WorkbenchActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -135,7 +135,7 @@ flowchart TB
    camera/ -- 엔진 계약, Camera2·CameraX 구현, 엔드포인트 열거를 제공합니다. +- 엔진 계약, Camera2·CameraX 구현, 엔드포인트 열거를 제공합니다. `DepthCameraEngine`은 컬러 출력 없이 DEPTH16 맵만 받으며 `DepthFrame`이 순수 Kotlin으로 표시용 표본을 만듭니다. - `close(done)` 완료 전에 다음 카메라를 열지 않습니다. - 엔진 계약(`MediaCapture`, `LiveTuning`, `TouchMetering`)과 두 엔진의 구현, 두 엔진의 차이는 [Engine Comparison](engine.md)에 있습니다. - 벤치마크 RECORD 단계의 recorder 상태 기계는 `BenchmarkRecorder`가 담당하고 `Camera2Engine`은 그 호출을 위임합니다. @@ -252,7 +252,7 @@ Camera2의 RAW (DNG)는 `RawFrame`이 RAW 샘플을 복사하고 `DngOutput`이 - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/SplitDragGesture.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `app/src/main/java/dev/halcamera/cli/LiveController.kt`, `app/src/main/java/dev/halcamera/cli/BenchmarkController.kt`, `app/src/main/java/dev/halcamera/cli/CliLibrary.kt`, `app/src/main/java/dev/halcamera/MainCliBridge.kt`, `app/src/main/java/dev/halcamera/DualCliBridge.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/EnvironmentProbe.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunIndex.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkCsv.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt`, `app/src/main/java/dev/halcamera/ui/RecentMediaButton.kt`, `app/src/main/java/dev/halcamera/ui/Look.kt`, `app/src/main/java/dev/halcamera/cts/recording/BasicRecordingRules.kt`, `app/src/main/java/dev/halcamera/cts/CtsEntryActivity.kt`, `app/src/main/java/dev/halcamera/cts/vendored/VendoredCaseActivity.kt`, `app/src/main/java/dev/halcamera/cts/vendored/VendoredCtsListActivity.kt`, `app/src/main/java/dev/halcamera/cts/CtsCaseActivity.kt`, `app/src/main/java/dev/halcamera/cts/CtsCaseListActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/CtsChecklistActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/CtsSuiteRunActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/SuitePlan.kt`, `app/src/main/java/dev/halcamera/cts/suite/SuiteReport.kt`, `app/src/main/java/dev/halcamera/cts/CtsCatalog.kt`, `app/src/main/java/dev/halcamera/cts/CtsRunner.kt`, `app/src/main/java/dev/halcamera/cts/CameraCaseRunner.kt`, `app/src/main/java/dev/halcamera/cts/Camera2Ops.kt`, `app/src/main/java/dev/halcamera/cts/onoff/FastOnOffRules.kt`, `app/src/main/java/dev/halcamera/cts/switching/SwitchingRules.kt`, `app/src/main/java/dev/halcamera/cts/sizes/AllSizeOnOffRules.kt`, `app/src/main/java/dev/halcamera/cts/combination/StillPreviewCombinationRules.kt`, `app/src/main/java/dev/halcamera/cts/snapshot/VideoSnapshotRules.kt`, `app/src/main/java/dev/halcamera/CameraProbeActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraProbe.kt`, `app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review
    @@ -290,6 +290,8 @@ Live·CTS·Benchmark 컨트롤러는 `CliCompletion` 또는 `CliExecution`을 Live 셔터 조작은 `MainActivity`에서 선택한 엔진의 촬영·녹화 동작으로 이어집니다. +Live의 Depth 보기는 `DepthCameraEngine → ImageReader → DepthFrame → DepthMapView`로 연결합니다. 컬러 촬영과 분리된 보기이며, Telemetry에는 버퍼의 시각·크기·형식과 capture 콜백만 기록합니다. 맵 픽셀을 벤치마크나 incident ZIP의 입력으로 전달하지 않습니다. 사용 순서는 [Depth 맵 보기](live.md#depth-맵을-보세요)에 있습니다. + 벤치마크는 별도 화면인 `BenchmarkActivity`가 준비를 마친 뒤 `BenchmarkRunner.start()`를 호출하여 시작합니다. `Telemetry.callback(...)`이 반환한 Camera2 콜백의 `onCaptureStarted`는 프레임워크 신호를 기록하며, Live 셔터와 벤치마크 시작을 연결하는 메서드가 아닙니다. @@ -471,7 +473,7 @@ CliLaunchActivity는 Dual·Multi에서 Live로 돌아갈 때 CliNavigationHost - 근거 파일: `app/src/main/java/dev/halcamera/cli/CliProvider.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `tools/halcam/halcam/cli.py`, `tools/halcam/halcam/download.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/GalleryActivity.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/metrics/MetricExtractor.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunRetention.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/LaunchDiagnostics.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -641,7 +643,7 @@ sequenceDiagram Live 프리뷰에서 두 손가락을 벌리거나 모으면 지원 범위 안에서 연속으로 줌을 바꿉니다. 가장 가까운 프리셋의 원에 현재 배율을 소수 첫째 자리까지 표시하며, 펼친 상태에서 그 원을 누르면 해당 프리셋 배율로 돌아갑니다. 화면의 카메라 선택 정보를 갱신해도 중간 배율은 유지합니다. -핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다. +핀치와 버튼 선택은 같은 MainActivity.applyZoom 경로로 엔진과 표시를 갱신합니다. Depth 보기, 프리뷰 준비 전, 일시정지·종료 처리·CLI 작업·연사 중에는 변경하지 않으며 녹화 중에는 허용합니다. 두 손가락 입력이 시작되면 대기 중인 터치 초점과 길게 누르기 인식을 취소하고, 마지막 손가락을 뗄 때까지 초점 터치로 처리하지 않습니다. | 조건 | 동작 | | --- | --- | @@ -683,6 +685,8 @@ Photo·Video 프리뷰와 녹화 중에 두 손가락을 벌리거나 모아 연 3. 카메라 열거에는 공개 Camera2 API만 사용합니다. 논리 카메라의 물리 endpoint를 독립적으로 열 수 있다고 가정하지 않습니다. 4. 벤치마크 JSON과 incident ZIP에는 관측 이벤트·메타데이터를 저장하며 이미지 픽셀을 저장하지 않습니다. +Depth 보기는 컬러와 Depth를 같은 요청에 포함하지 않는 별도 Camera2 세션입니다. HAL의 동시 요청 허용 선언은 특정 출력 조합의 성공을 보장하지 않습니다. `DepthCameraEngine`은 촬영·녹화·수동 제어·줌·터치 측광을 제공하지 않으며 CLI 제어 변경도 거절합니다. Photo·Video 또는 CLI 촬영 준비로 전환하면 Depth를 해제합니다. + Multi 모드의 `MultiSession`은 `CameraEngine`과 별도입니다. Camera2는 선택한 독립 장치를 연 뒤 세션을 구성하며, CameraX는 광고된 동시 조합을 바인딩합니다. 모든 장치의 종료 통지를 확인해야 출력을 해제하고 다음 동시 세션을 열 수 있습니다. 한 명령의 여러 사진을 센서 동기 촬영으로 해석하지 않습니다. @@ -742,7 +746,7 @@ Live 카메라 종료 후 벤치마크 화면으로 이동하고 기존 측정· - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/MicrophoneCapture.kt`, `app/src/main/java/dev/halcamera/camera/TimestampedVideoRecording.kt`, `app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt`, `app/src/main/java/dev/halcamera/cli/CliProvider.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `app/src/main/java/dev/halcamera/cli/CommandStore.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraEndpointResolver.kt`, `app/src/main/java/dev/halcamera/telemetry/IncidentExporter.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionRules.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkStore.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkIndex.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/AtomicFiles.kt` - 근거 수준: 코드 확인 -- 검토 상태: 관련 소스 변경됨: 재검토 필요 +- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review @@ -794,16 +798,16 @@ Android 의존성이 없는 러너와 평가 로직은 JVM 단위 테스트로 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `data-flow` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 구조 원본 `overall-architecture` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | -| 구조 원본 `state-transitions` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e9d3233c` · codex-multi-cli-code-review | +| 구조 원본 `data-flow` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `state-transitions` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | | 구조 원본 `ui-camera-label` | 최신 | 검토 2026-10-10 @ `93385443` · Codex (mode reset, labels and numeric ID selection review) | -| 구조 원본 `ui-tool-handoff` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `e4bc487a` · codex-multi-cli-code-review | -| 구조 원본 `ui-zoom` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-18 @ `3e7627e0` · claude-cli-specs-refactor | -| 원고 `overview` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | -| 원고 `module-roles` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | -| 원고 `runtime-flow` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | -| 원고 `constraints` | 관련 소스 변경됨: 재검토 필요 | 검토 2026-10-19 @ `cc58ea27` · codex-editorial-formatting-only | +| 구조 원본 `ui-tool-handoff` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `ui-zoom` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `overview` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `module-roles` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `runtime-flow` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `constraints` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | diff --git a/tools/docgen/state/evidence.json b/tools/docgen/state/evidence.json index ab3f6e88..f653f896 100644 --- a/tools/docgen/state/evidence.json +++ b/tools/docgen/state/evidence.json @@ -3,14 +3,14 @@ "entries": { "omm:overall-architecture": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "418ed3d6b45cba29", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "0f722523cc241bb1", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -20,8 +20,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -75,7 +76,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -93,6 +94,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -238,6 +243,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -255,7 +261,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -282,17 +288,17 @@ }, "omm:data-flow": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "22eb6a5c54fd7836", - "modelHash": "9c9db2cb22824dcb", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "97b991ec49bfd746", + "modelHash": "9dbb60c0c18065a2", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", "app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt": "fc28cf52692a271225524bfa045dc2e232d0ba45", "app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt": "3ce60c16472f2ed3e100034c62feee32f13236d3", @@ -333,16 +339,16 @@ }, "omm:state-transitions": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "98c3b8dd8a671c51", - "modelHash": "32a6fe2cd2a86e7a", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "47bddf1bbf31016c", + "modelHash": "258630c74fc0a4f4", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", "app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt": "fc28cf52692a271225524bfa045dc2e232d0ba45", "app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt": "3ce60c16472f2ed3e100034c62feee32f13236d3", @@ -377,14 +383,14 @@ }, "content:architecture.md/overview": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "17867e1678c12800", - "modelHash": "52012a5183697d02", + "codeHash": "b744f92eb02a420a", + "modelHash": "66bd16d22ce9ca3f", "at": "2026-10-19", - "commit": "cc58ea27", - "reviewer": "codex-editorial-formatting-only", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -394,8 +400,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -449,7 +456,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -467,6 +474,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -612,6 +623,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -629,7 +641,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -659,17 +671,17 @@ }, "content:architecture.md/runtime-flow": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "d8bf9992cd2c94cb", - "modelHash": "8baed94c0132e532", + "codeHash": "1bbf79a32baf27f3", + "modelHash": "2f360beb8b83bf25", "at": "2026-10-19", - "commit": "cc58ea27", - "reviewer": "codex-editorial-formatting-only", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", "app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt": "fc28cf52692a271225524bfa045dc2e232d0ba45", "app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt": "3ce60c16472f2ed3e100034c62feee32f13236d3", @@ -711,11 +723,11 @@ }, "content:architecture.md/module-roles": { "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "f0177f51617171de", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "8ffefe5ee952f837", "at": "2026-10-19", - "commit": "cc58ea27", - "reviewer": "codex-editorial-formatting-only", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -725,8 +737,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -780,7 +793,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -798,6 +811,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -943,6 +960,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -960,7 +978,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -985,16 +1003,16 @@ } }, "observed": { - "state": "stale" + "state": "fresh" } }, "content:architecture.md/constraints": { "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "09630393d3c7be02", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "90c7c730cb5e8337", "at": "2026-10-19", - "commit": "cc58ea27", - "reviewer": "codex-editorial-formatting-only", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -1004,8 +1022,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1059,7 +1078,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -1077,6 +1096,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -1222,6 +1245,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -1239,7 +1263,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -1264,7 +1288,7 @@ } }, "observed": { - "state": "stale" + "state": "fresh" } }, "omm:ui-camera-label": { @@ -1285,32 +1309,32 @@ }, "omm:ui-tool-handoff": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "9723c8ef764a7680", - "modelHash": "735607d172653acf", - "at": "2026-10-18", - "commit": "e4bc487a", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "5733479109e046e8", + "modelHash": "9d479f2b55b0b1b7", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127" + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da" } } }, "omm:ui-zoom": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "3d7b55295e557886", - "modelHash": "c4c3b1236181dcfb", - "at": "2026-10-18", - "commit": "3e7627e0", - "reviewer": "claude-cli-specs-refactor", + "codeHash": "0c74536c0bae608f", + "modelHash": "231d9c4ddb3622f9", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", "app/src/main/java/dev/halcamera/ui/FocusRing.kt": "e129ce223edde62c329a15b5662fa34f9f6a6918" } @@ -1318,14 +1342,14 @@ }, "content:_reference/engine.md/contract": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "f461c36a13caa3ff", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "a882f52b4155cd27", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -1335,8 +1359,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1390,7 +1415,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -1408,6 +1433,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -1553,6 +1582,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -1570,7 +1600,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -1597,14 +1627,14 @@ }, "content:_reference/engine.md/camera2": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "89c890e64681f1fd", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "a1c4cf8671b1c8c4", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -1614,8 +1644,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1669,7 +1700,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -1687,6 +1718,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -1832,6 +1867,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -1849,7 +1885,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -1876,14 +1912,14 @@ }, "content:_reference/engine.md/camerax": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "bc131fb4883c6822", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "ab1f7e43500f5869", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -1893,8 +1929,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1948,7 +1985,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -1966,6 +2003,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -2111,6 +2152,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -2128,7 +2170,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -2155,14 +2197,14 @@ }, "content:_reference/engine.md/comparison": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "d7255688da5f38c4", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "1ac54c16fae61b66", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -2172,8 +2214,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -2227,7 +2270,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -2245,6 +2288,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -2390,6 +2437,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -2407,7 +2455,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", @@ -2434,17 +2482,17 @@ }, "content:_reference/troubleshooting.md/layer-isolation": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "127e509c8189a9ce", - "modelHash": "2d4f51d2d054e8c9", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "9edb9935832a8bbc", + "modelHash": "20708f2ee142c5a7", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", "app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt": "fc28cf52692a271225524bfa045dc2e232d0ba45", "app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkEvaluator.kt": "3ce60c16472f2ed3e100034c62feee32f13236d3", @@ -2496,14 +2544,14 @@ }, "content:_reference/evidence.md/device-notes": { "observed": { - "state": "stale" + "state": "fresh" }, "accepted": { - "codeHash": "4ee54ca1bee6a0f5", - "modelHash": "cb4d87333b72f2fe", - "at": "2026-10-18", - "commit": "e9d3233c", - "reviewer": "codex-multi-cli-code-review", + "codeHash": "025f44d5f3c7e34f", + "modelHash": "ab3da8834574c341", + "at": "2026-10-19", + "commit": "14ca1ae2", + "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", "app/src/main/AndroidManifest.xml": "394f1ceb67558a1400f691c3eb3157f7be783960", @@ -2513,8 +2561,9 @@ "app/src/main/java/dev/halcamera/DualPreviewActivity.kt": "93bf6e4bb3e10601631adcf12824164a06dc990e", "app/src/main/java/dev/halcamera/GalleryActivity.kt": "d220302a8e9dd392cf1560e5b28dc5aa6378202f", "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", - "app/src/main/java/dev/halcamera/MainActivity.kt": "6dea5501360372fa3ae1ce5f176be9191544d152", - "app/src/main/java/dev/halcamera/MainCliBridge.kt": "51714cbb146d31b940b6cf81e3f54011cda31127", + "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", + "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -2568,7 +2617,7 @@ "app/src/main/java/dev/halcamera/camera/CameraEngine.kt": "7441e69d8ef8394db42448a69abd9fa688167c70", "app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt": "65d85b90a24ff613324cceb838f963028e1d5daa", "app/src/main/java/dev/halcamera/camera/CameraProbe.kt": "c7bc7ce608c811830e4a88e913e0593ad15b0528", - "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "34992e8456e43c174ed65b8964281b7b3b8ef8dc", + "app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt": "5da08af7e2f1b94dc6bf09fd3f94f01fed86c7f9", "app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt": "cd2fb3f441229ac0e4a4d4f09ce7b27de5e64d4e", "app/src/main/java/dev/halcamera/camera/CameraXControls.kt": "2bdcc32c326a7685cb34ac5a59f2665cce940fc8", "app/src/main/java/dev/halcamera/camera/CameraXEngine.kt": "c885e0bb38e481d45fda923dbea1d03e60a1a2b7", @@ -2586,6 +2635,10 @@ "app/src/main/java/dev/halcamera/camera/ConcurrentPhotoStore.kt": "62d925a86f82fc14c62f8fc5114b2d237579321e", "app/src/main/java/dev/halcamera/camera/ConcurrentPlan.kt": "1c9c43c4519dcc619ec711e2dcfc5cd288014fa9", "app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt": "7d4f69e446d9c4a4cc8b756dc2cca0e483841aae", + "app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt": "be3c0e9b1c9081ca426f2b48619b9f04e9888290", + "app/src/main/java/dev/halcamera/camera/DepthCapabilities.kt": "1c8b524293c58b7de5e1d98e2f874c9a2591df95", + "app/src/main/java/dev/halcamera/camera/DepthFrame.kt": "afa6b06b888773e845baf86d52503a6d47b26b98", + "app/src/main/java/dev/halcamera/camera/DepthSupport.kt": "5206985fdeb532bfe5ecf91d7d1624ce59c00fff", "app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt": "266223bc206069ecc0c3d0282c36b006426ec1b2", "app/src/main/java/dev/halcamera/camera/DisplayRotation.kt": "c4d0f95d9566afe62dbcf943ab5c163ccaef6e99", "app/src/main/java/dev/halcamera/camera/DngOutput.kt": "fe89b853141b0fc0dd898570c50ff6718dc6d234", @@ -2731,6 +2784,7 @@ "app/src/main/java/dev/halcamera/ui/BenchmarkResultCards.kt": "743c60bd7877908b05b50f2dceaa309ea4b55344", "app/src/main/java/dev/halcamera/ui/CameraWidgets.kt": "5ff28a3023ab38034e6322214e29ef066e671435", "app/src/main/java/dev/halcamera/ui/CaptureFeedback.kt": "d7c54ea31ebe7827ca434f2d1c9ab2eb21114c5c", + "app/src/main/java/dev/halcamera/ui/DepthMapView.kt": "e4cdc1cec83c492dee00d3f028816d235c9f1258", "app/src/main/java/dev/halcamera/ui/DeviceIdentity.kt": "df26ad999c1f19768883838d61ac8a6eb78aa34d", "app/src/main/java/dev/halcamera/ui/EvRuler.kt": "365ee3af8ab4bae41e9cbf39a107afeb31c0d539", "app/src/main/java/dev/halcamera/ui/ExpandingZoomControl.kt": "e93a1cc7727b9200fa6aaf31d8210050a0b6acf9", @@ -2748,7 +2802,7 @@ "app/src/main/java/dev/halcamera/ui/LivePipController.kt": "7f706fae51c274c351cee16032a7d1b300563828", "app/src/main/java/dev/halcamera/ui/LiveReadings.kt": "5fb091d0da47c97dee10c62d79492b83c382bf3e", "app/src/main/java/dev/halcamera/ui/LiveReadout.kt": "3f599e31c9eecd3f48c7467632c1c948f02bbdfc", - "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "1a2fa3a58175bf2e28c579f53bfb6a62b7db6dd3", + "app/src/main/java/dev/halcamera/ui/LiveStreamReadout.kt": "976ee52adcfec7b08dc0571ff9bdde7d36e1f72a", "app/src/main/java/dev/halcamera/ui/LiveStreamSettingsView.kt": "d47f8595645c0af61d3bc088c0b6f6773de6dd8d", "app/src/main/java/dev/halcamera/ui/Look.kt": "51326eb313529537407c10dae5e721eb153a9f53", "app/src/main/java/dev/halcamera/ui/ManualControlPanel.kt": "baa1572bd2a5db79b016d066a6d5b5d1105a326b", From 58b2c447e358fe14e155371f1329901195d36e04 Mon Sep 17 00:00:00 2001 From: TTolsun <112919054+TTolsun@users.noreply.github.com> Date: Tue, 20 Oct 2026 01:08:31 +0900 Subject: [PATCH 3/5] Record SM-S936N depth validation --- docs/validation/depth-20261020/README.md | 21 +++ .../sm-s936n-depth-summary.json | 168 ++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 docs/validation/depth-20261020/sm-s936n-depth-summary.json diff --git a/docs/validation/depth-20261020/README.md b/docs/validation/depth-20261020/README.md index a563717e..09c603ca 100644 --- a/docs/validation/depth-20261020/README.md +++ b/docs/validation/depth-20261020/README.md @@ -30,6 +30,27 @@ Depth 지원 선언과 Unknown 처리, confidence 비트·stride·crop 해석, U 이 검토는 사용자 요청에 따른 Codex의 코드 대조 기록입니다. 실제 Depth 센서 실측이나 별도 사람의 독립 코드 리뷰를 뜻하지 않습니다. +## SM-S936N 실기기 확인 + +2026-10-20에 Samsung SM-S936N, Android 16 / API 36에서 앱 0.30.0(691)을 기존 데이터 삭제 없이 갱신했습니다. 아래 결과는 에뮬레이터 결과와 별개입니다. + +PROBE 요청 `0be1d193-a8ac-4ee0-8c88-f9bec825c01b`는 `succeeded`로 끝났으며 메타데이터 읽기 오류가 없었습니다. JSON 367,246바이트와 TXT 261,858바이트를 PC로 회수하고 manifest의 SHA-256과 일치하는지 확인했습니다. [Depth 항목 발췌와 원본 해시](sm-s936n-depth-summary.json)를 보존했습니다. + +| 카메라 ID | 구분 | DEPTH_OUTPUT | DEPTH16 해상도 | 컬러 동시 요청 | +| --- | --- | --- | --- | --- | +| 0 | 후면 Wide, 공개 ID | 미지원 | 없음 | 해당 없음 | +| 1 | 전면 25 mm, 공개 ID | 미지원 | 없음 | 해당 없음 | +| 2 | 후면 UWide, 공개 ID | 미지원 | 없음 | 해당 없음 | +| 3 | 전면 30 mm, 공개 ID | 미지원 | 없음 | 해당 없음 | +| 5 | 카메라 0의 물리 Wide | 미지원 | 없음 | 해당 없음 | +| 6 | 카메라 0의 물리 Tele | 미지원 | 없음 | 해당 없음 | + +이 기기에서 앱에 공개된 Camera2 Depth 스트림은 없습니다. 실제 Depth 센서의 프레임 수신이나 컬러·Depth 조합 검증 결과로 해석하면 안 됩니다. + +실기기에서 `depth_checks=true` instrumentation도 `DEPTH_MAP_CHECKS_OK`로 통과했습니다. 합성 DEPTH16의 stride 해석, 중앙 거리 1.000 m, Android View 렌더링 및 접근성 설명을 확인한 결과이며 센서 출력 검증은 아닙니다. + +기기가 잠금 화면에 있어 LIVE의 미지원 선택 화면, 일반 프리뷰 유지 및 복귀 동작에 대한 실기기 UI 검증은 아직 완료하지 못했습니다. 잠금 해제 후 이어서 확인해야 합니다. + ## 실제 기기에서 남은 확인 DEPTH_OUTPUT 지원 기기에서 해상도별 세션 구성과 지속 수신, 컬러 보기와의 반복 전환, 백그라운드 복귀와 회전, 카메라 해제 완료를 확인해야 합니다. Depth 전용 세션이므로 컬러와 Depth를 같은 요청으로 받는 조합이나 Bokeh 합성은 이번 검증 범위에 포함하지 않습니다. diff --git a/docs/validation/depth-20261020/sm-s936n-depth-summary.json b/docs/validation/depth-20261020/sm-s936n-depth-summary.json new file mode 100644 index 00000000..03989cab --- /dev/null +++ b/docs/validation/depth-20261020/sm-s936n-depth-summary.json @@ -0,0 +1,168 @@ +{ + "captured_at": "2026-10-20T01:05:38.0000000+09:00", + "device": { + "Manufacturer": "samsung", + "Model": "SM-S936N", + "Device": "pa2q", + "Android": "16 (API 36)", + "Build": "BP4A.251205.006.S936NKSSCCZH2", + "Security patch": "2026-08-05", + "SoC": "QTI SM8750", + "ABIs": "arm64-v8a" + }, + "request_id": "0be1d193-a8ac-4ee0-8c88-f9bec825c01b", + "state": "succeeded", + "errors": [], + "original_artifacts": [ + { + "name": "camera-probe-SM-S936N-20261020_010538.json", + "size_bytes": 367246, + "sha256": "8675661879a0fb6f6b5e2a90ae25bfa6ceb1cb39b60bd55e41d74ba17acdea9c" + }, + { + "name": "camera-probe-SM-S936N-20261020_010538.txt", + "size_bytes": 261858, + "sha256": "1dc6a056f2ed73328d390bebb655e41ef254bd96f5ba900f087b7c5926753044" + } + ], + "cameras": [ + { + "camera_id": "0", + "physical_of": null, + "title": "Camera · 0 (Wide · Rear) · LEVEL_3", + "depth": [ + { + "key": "DEPTH_OUTPUT", + "value": "Not supported" + }, + { + "key": "DEPTH16 resolutions", + "value": "None reported" + }, + { + "key": "Color + depth (same request)", + "value": "Not applicable: no DEPTH_OUTPUT" + }, + { + "key": "LIVE depth map", + "value": "This camera does not advertise DEPTH_OUTPUT." + } + ] + }, + { + "camera_id": "5", + "physical_of": "0", + "title": "Camera · 0.5 (Wide · Rear) · physical · LEVEL_3", + "depth": [ + { + "key": "DEPTH_OUTPUT", + "value": "Not supported" + }, + { + "key": "DEPTH16 resolutions", + "value": "None reported" + }, + { + "key": "Color + depth (same request)", + "value": "Not applicable: no DEPTH_OUTPUT" + }, + { + "key": "LIVE depth map", + "value": "Physical camera: select a publicly listed camera ID in LIVE" + } + ] + }, + { + "camera_id": "6", + "physical_of": "0", + "title": "Camera · 0.6 (Tele · Rear) · physical · LIMITED", + "depth": [ + { + "key": "DEPTH_OUTPUT", + "value": "Not supported" + }, + { + "key": "DEPTH16 resolutions", + "value": "None reported" + }, + { + "key": "Color + depth (same request)", + "value": "Not applicable: no DEPTH_OUTPUT" + }, + { + "key": "LIVE depth map", + "value": "Physical camera: select a publicly listed camera ID in LIVE" + } + ] + }, + { + "camera_id": "1", + "physical_of": null, + "title": "Camera · 1 (Front · 25 mm) · FULL", + "depth": [ + { + "key": "DEPTH_OUTPUT", + "value": "Not supported" + }, + { + "key": "DEPTH16 resolutions", + "value": "None reported" + }, + { + "key": "Color + depth (same request)", + "value": "Not applicable: no DEPTH_OUTPUT" + }, + { + "key": "LIVE depth map", + "value": "This camera does not advertise DEPTH_OUTPUT." + } + ] + }, + { + "camera_id": "2", + "physical_of": null, + "title": "Camera · 2 (UWide · Rear) · LIMITED", + "depth": [ + { + "key": "DEPTH_OUTPUT", + "value": "Not supported" + }, + { + "key": "DEPTH16 resolutions", + "value": "None reported" + }, + { + "key": "Color + depth (same request)", + "value": "Not applicable: no DEPTH_OUTPUT" + }, + { + "key": "LIVE depth map", + "value": "This camera does not advertise DEPTH_OUTPUT." + } + ] + }, + { + "camera_id": "3", + "physical_of": null, + "title": "Camera · 3 (Front · 30 mm) · FULL", + "depth": [ + { + "key": "DEPTH_OUTPUT", + "value": "Not supported" + }, + { + "key": "DEPTH16 resolutions", + "value": "None reported" + }, + { + "key": "Color + depth (same request)", + "value": "Not applicable: no DEPTH_OUTPUT" + }, + { + "key": "LIVE depth map", + "value": "This camera does not advertise DEPTH_OUTPUT." + } + ] + } + ] +} From b0648a05c68c375056fbca2988c6c1bfa15a1b96 Mon Sep 17 00:00:00 2001 From: TTolsun <112919054+TTolsun@users.noreply.github.com> Date: Tue, 20 Oct 2026 01:18:57 +0900 Subject: [PATCH 4/5] Restore Photo when leaving Depth choices from Video --- app/src/main/java/dev/halcamera/MainDepthBridge.kt | 6 +++--- docs/validation/depth-20261020/README.md | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/dev/halcamera/MainDepthBridge.kt b/app/src/main/java/dev/halcamera/MainDepthBridge.kt index 372ebb8c..1d8d7f6f 100644 --- a/app/src/main/java/dev/halcamera/MainDepthBridge.kt +++ b/app/src/main/java/dev/halcamera/MainDepthBridge.kt @@ -9,7 +9,7 @@ import androidx.core.view.ViewCompat import dev.halcamera.camera.* import dev.halcamera.ui.* -/** LIVE depth selection, display and controls; camera ownership stays with MainActivity. */ +/** LIVE depth UI; MainActivity owns the camera. */ internal fun MainActivity.chooseDepth() { if (!resumed || closing || cli.active != null || recordingVideo || stoppingRecording || mediaBusy() || pendingPermissionAction != null || cameraId.isEmpty()) return @@ -20,11 +20,11 @@ internal fun MainActivity.chooseDepth() { val choices = listOf(LiveChoiceSheet.Choice("Off", "Return to Photo")) + sizes.map { LiveChoiceSheet.Choice("DEPTH16 · $it", "Camera2 · Depth-only view") } + if (support.available) emptyList() else listOf(LiveChoiceSheet.Choice("Depth unavailable", support.unavailableReason.orEmpty(), false)) - LiveChoiceSheet.show(this, "Depth map", choices, sizes.indexOf(depthSize) + 1, + LiveChoiceSheet.show(this, "Depth map", choices, if (videoMode) -1 else sizes.indexOf(depthSize) + 1, content = Look.text(this, "${support.colorSummary}\nNear: bright · Far: dark · Black: invalid\nView only; photos and video are disabled.", 12, Look.onDarkMuted)) { index -> if (!resumed || closing || cli.active != null || recordingVideo || mediaBusy()) return@show val chosen = if (index == 0) null else sizes.getOrNull(index - 1) ?: return@show - if (chosen == depthSize) return@show + if (chosen == depthSize && !videoMode) { return@show } recorder.finish("depth_view_changed")?.let(::exportCliIncident) captureFeedback.clearResult() engineName = "Camera2" diff --git a/docs/validation/depth-20261020/README.md b/docs/validation/depth-20261020/README.md index 09c603ca..e900f7a1 100644 --- a/docs/validation/depth-20261020/README.md +++ b/docs/validation/depth-20261020/README.md @@ -49,7 +49,15 @@ PROBE 요청 `0be1d193-a8ac-4ee0-8c88-f9bec825c01b`는 `succeeded`로 끝났으 실기기에서 `depth_checks=true` instrumentation도 `DEPTH_MAP_CHECKS_OK`로 통과했습니다. 합성 DEPTH16의 stride 해석, 중앙 거리 1.000 m, Android View 렌더링 및 접근성 설명을 확인한 결과이며 센서 출력 검증은 아닙니다. -기기가 잠금 화면에 있어 LIVE의 미지원 선택 화면, 일반 프리뷰 유지 및 복귀 동작에 대한 실기기 UI 검증은 아직 완료하지 못했습니다. 잠금 해제 후 이어서 확인해야 합니다. +잠금 해제 후 실기기 UI에서 다음을 확인했습니다. + +1. 공개 카메라 0·1·2·3 모두 컬러 프리뷰가 준비됐고, `Depth unavailable`과 `This camera does not advertise DEPTH_OUTPUT.` 안내가 표시됐습니다. 미지원 항목을 눌러도 Depth 세션을 시작하지 않았습니다. +2. PROBE에서 `Depth` 검색 시 지원 여부·해상도·컬러 동시 요청·LIVE 안내가 검색됐으며, 검색 결과를 눌러 실제 Depth 사양 섹션으로 이동했습니다. +3. Video에서 `Depth → Off · Return to Photo`를 선택해도 Video에 남는 문제를 발견했습니다. Video에서 Off를 현재 선택으로 표시하지 않도록 고치고, 같은 Depth 크기라는 이유로 Photo 복귀를 건너뛰지 않도록 수정했습니다. +4. 수정한 APK를 재설치한 뒤 `Video → Depth → Off → Photo`를 반복해 Photo 선택과 `Live, preview running`을 확인했습니다. 홈 이동 후 복귀에서도 프리뷰가 다시 준비됐습니다. +5. 회전 설정을 가로로 바꿔도 LIVE는 manifest의 기존 `portrait` 설정대로 세로 화면을 유지했습니다. 검증 후 기기의 원래 `lock 0` 설정을 복원했습니다. 실제 Depth 맵의 센서 방향 보정 검증은 아닙니다. + +수정 후 앱 JVM 테스트 907개와 `lintDebug`(오류·경고 없음), `assembleDebug`가 통과했습니다. 최종 앱 프로세스 로그에서 앱 충돌이나 카메라 세션 실패는 관측하지 않았습니다. `ashmem`의 pinning 폐기 안내와 Adreno/QSPM·`libpenguin.so` 관련 플랫폼 로그는 있었습니다. ## 실제 기기에서 남은 확인 From a9294b3698919aa9921f06e5cdf882ddd910b59d Mon Sep 17 00:00:00 2001 From: TTolsun <112919054+TTolsun@users.noreply.github.com> Date: Tue, 20 Oct 2026 01:20:10 +0900 Subject: [PATCH 5/5] Refresh depth documentation after device validation --- docs/.site-manifest.json | 2 +- docs/architecture.html | 14 ++++----- guide/_reference/engine.md | 18 +++++------ guide/_reference/evidence.md | 6 ++-- guide/architecture.md | 14 ++++----- tools/docgen/state/evidence.json | 54 ++++++++++++++++---------------- 6 files changed, 54 insertions(+), 54 deletions(-) diff --git a/docs/.site-manifest.json b/docs/.site-manifest.json index 2e4e2a8b..97ff5d45 100644 --- a/docs/.site-manifest.json +++ b/docs/.site-manifest.json @@ -4,7 +4,7 @@ ".nojekyll": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "_inputs/decisions.html": "aadc3cad5fb3b8e37af148aa62ae79f9be0ba19a076fd2837f85c471b1629ded", "_inputs/device-verification.yaml": "1852f48d52f75733b4db973418fc7fad1f0f9d340a8b4b555cf9d49aa7016215", - "architecture.html": "556ca4149bbf8c0f359b1d7fec63861bdb7766383a9a4c0704520aa4ab34b44e", + "architecture.html": "c25e2ce64ddb1b47c6c15aabc52c7742a2aed3fb830f72bbbf353d0450624361", "assets/docflow-design.css": "1cc4f34d8df94abdcf70ab2e9c51e456d8ef7f52283a2ef3adb986a6bd38d44c", "assets/media/automation/bridge.png": "bdbd7cbdc28010caa9b8e320e2d311efd35bb2f66cbb9b5cb322af638b7ccbff", "assets/media/automation/opening-sensor.mp4": "8e26f5eeeb0b92cd241b2235aab7ffd122cbf2ac94b66c37fafb440da4ae1178", diff --git a/docs/architecture.html b/docs/architecture.html index a8580ed2..22138c8e 100644 --- a/docs/architecture.html +++ b/docs/architecture.html @@ -113,7 +113,7 @@

    코드를 처음 읽는 순서

    근거와 검토 정보
    • 근거 파일: app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, tools/halcam/halcam/cli.py, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt, app/src/main/java/dev/halcamera/WorkbenchActivity.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/telemetry/Telemetry.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt
    • 근거 수준: 코드 확인
    • -
    • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    • +
    • 검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review

    전체 구조도

    화살표는 코드를 사용하는 방향입니다. 이벤트와 파일이 이동하는 순서는 데이터 흐름에서 확인하세요.

    @@ -292,7 +292,7 @@

    코드를 처음 읽는 순서

    근거와 검토 정보
    • 근거 파일: app/src/main/java/dev/halcamera/camera/MultiSession.kt, app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt, app/src/main/java/dev/halcamera/camera/MultiRecording.kt, app/src/main/java/dev/halcamera/camera/SplitDragGesture.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, app/src/main/java/dev/halcamera/cli/LiveController.kt, app/src/main/java/dev/halcamera/cli/BenchmarkController.kt, app/src/main/java/dev/halcamera/cli/CliLibrary.kt, app/src/main/java/dev/halcamera/MainCliBridge.kt, app/src/main/java/dev/halcamera/DualCliBridge.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt, app/src/main/java/dev/halcamera/benchmark/platform/EnvironmentProbe.kt, app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt, app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunIndex.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkCsv.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt, app/src/main/java/dev/halcamera/MainActivity.kt, app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt, app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt, app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt, app/src/main/java/dev/halcamera/ui/RecentMediaButton.kt, app/src/main/java/dev/halcamera/ui/Look.kt, app/src/main/java/dev/halcamera/cts/recording/BasicRecordingRules.kt, app/src/main/java/dev/halcamera/cts/CtsEntryActivity.kt, app/src/main/java/dev/halcamera/cts/vendored/VendoredCaseActivity.kt, app/src/main/java/dev/halcamera/cts/vendored/VendoredCtsListActivity.kt, app/src/main/java/dev/halcamera/cts/CtsCaseActivity.kt, app/src/main/java/dev/halcamera/cts/CtsCaseListActivity.kt, app/src/main/java/dev/halcamera/cts/suite/CtsChecklistActivity.kt, app/src/main/java/dev/halcamera/cts/suite/CtsSuiteRunActivity.kt, app/src/main/java/dev/halcamera/cts/suite/SuitePlan.kt, app/src/main/java/dev/halcamera/cts/suite/SuiteReport.kt, app/src/main/java/dev/halcamera/cts/CtsCatalog.kt, app/src/main/java/dev/halcamera/cts/CtsRunner.kt, app/src/main/java/dev/halcamera/cts/CameraCaseRunner.kt, app/src/main/java/dev/halcamera/cts/Camera2Ops.kt, app/src/main/java/dev/halcamera/cts/onoff/FastOnOffRules.kt, app/src/main/java/dev/halcamera/cts/switching/SwitchingRules.kt, app/src/main/java/dev/halcamera/cts/sizes/AllSizeOnOffRules.kt, app/src/main/java/dev/halcamera/cts/combination/StillPreviewCombinationRules.kt, app/src/main/java/dev/halcamera/cts/snapshot/VideoSnapshotRules.kt, app/src/main/java/dev/halcamera/CameraProbeActivity.kt, app/src/main/java/dev/halcamera/camera/CameraProbe.kt, app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt
    • 근거 수준: 코드 확인
    • -
    • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    • +
    • 검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review

    CLI 책임을 따라가세요

    CliCommands는 명령별 필수 인자·허용 옵션·기본 제한·실행 대상과 Live에서 실행되는 방식(flow)·녹화 여부를 한곳에서 정의하고 hello.command_specs로 제공합니다.

    @@ -672,7 +672,7 @@

    CLI의 접근과 완료 경계

    근거와 검토 정보
    • 근거 파일: app/src/main/java/dev/halcamera/camera/MultiSession.kt, app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt, app/src/main/java/dev/halcamera/camera/MultiRecording.kt, app/src/main/java/dev/halcamera/camera/MicrophoneCapture.kt, app/src/main/java/dev/halcamera/camera/TimestampedVideoRecording.kt, app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt, app/src/main/java/dev/halcamera/cli/CliProvider.kt, app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt, app/src/main/java/dev/halcamera/cli/CommandStore.kt, app/src/main/java/dev/halcamera/camera/CameraEngine.kt, app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt, app/src/main/java/dev/halcamera/camera/CameraEndpointResolver.kt, app/src/main/java/dev/halcamera/telemetry/IncidentExporter.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt, app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt, app/src/main/java/dev/halcamera/benchmark/domain/RegressionRules.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt, app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkStore.kt, app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkIndex.kt, app/src/main/java/dev/halcamera/benchmark/domain/AtomicFiles.kt
    • 근거 수준: 코드 확인
    • -
    • 검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review
    • +
    • 검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review

    변경 후 검증

    Android 의존성이 없는 러너와 평가 로직은 JVM 단위 테스트로 확인할 수 있습니다. 저장소 루트에서 실행하세요.

    @@ -717,7 +717,7 @@

    미완성 기능과 추가 검증

    구조 원본 overall-architecture 최신 -검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review +검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review 구조 원본 state-transitions @@ -742,12 +742,12 @@

    미완성 기능과 추가 검증

    원고 overview 최신 -검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review +검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review 원고 module-roles 최신 -검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review +검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review 원고 runtime-flow @@ -757,7 +757,7 @@

    미완성 기능과 추가 검증

    원고 constraints 최신 -검토 2026-10-19 @ 14ca1ae2 · codex-user-authorized-depth-review +검토 2026-10-19 @ b0648a05 · codex-user-authorized-depth-review

    표의 최신은 기록된 근거와 원고가 검토 이후 바뀌지 않았다는 뜻입니다. 모든 기기에서 동작을 검증했다는 뜻은 아닙니다.

    diff --git a/guide/_reference/engine.md b/guide/_reference/engine.md index aecf88d8..ea334c84 100644 --- a/guide/_reference/engine.md +++ b/guide/_reference/engine.md @@ -60,7 +60,7 @@ PIP와 Multi는 Android 11 이상에서 제공합니다. 저장물과 설정 방 - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/Camera2StillCapture.kt`, `app/src/main/java/dev/halcamera/camera/Camera2LiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeterRequests.kt`, `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXPipSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/LivePipSession.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -219,7 +219,7 @@ Live 제어와 터치 측광은 다음 이벤트를 추가로 남깁니다. - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/DepthCameraEngine.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ui/LiveControlBar.kt`, `app/src/main/java/dev/halcamera/ui/FocusRing.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/StartCardPresenter.kt`, `app/src/main/java/dev/halcamera/cli/LiveController.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -603,7 +603,7 @@ Camera2에서 짧게 터치한 경우입니다. 긴 누르기는 별도의 AE - 근거 파일: `app/src/main/java/dev/halcamera/camera/Camera2Engine.kt`, `app/src/main/java/dev/halcamera/camera/LivePipSession.kt`, `app/src/main/java/dev/halcamera/camera/PipSessionQuery.kt`, `app/src/main/java/dev/halcamera/camera/CameraOpenRetry.kt`, `app/src/main/java/dev/halcamera/camera/CameraReleaseWait.kt`, `app/src/main/java/dev/halcamera/camera/LiveStreamSettings.kt`, `app/src/main/java/dev/halcamera/camera/LiveStabilization.kt`, `app/src/main/java/dev/halcamera/camera/LiveStreamCapabilities.kt`, `app/src/main/java/dev/halcamera/camera/LiveSessionCheck.kt`, `app/src/main/java/dev/halcamera/camera/Camera2StillCapture.kt`, `app/src/main/java/dev/halcamera/camera/Camera2LiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/Camera2VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt`, `app/src/main/java/dev/halcamera/camera/PreviewBufferRelay.kt`, `app/src/main/java/dev/halcamera/camera/RecordingBufferRelay.kt`, `app/src/main/java/dev/halcamera/camera/StreamConfiguration.kt`, `app/src/main/java/dev/halcamera/camera/StillPair.kt`, `app/src/main/java/dev/halcamera/camera/YuvPacking.kt`, `app/src/main/java/dev/halcamera/camera/RawFrame.kt`, `app/src/main/java/dev/halcamera/camera/DngOutput.kt`, `app/src/main/java/dev/halcamera/camera/StillEncoding.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/camera/LiveControlRequests.kt`, `app/src/main/java/dev/halcamera/camera/ManualControls.kt`, `app/src/main/java/dev/halcamera/camera/ManualControlRequests.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeter.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeterRequests.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -822,7 +822,7 @@ AE 재잠금은 Camera2와 같은 [AeRelock 상태도](#노출은-언제-다시- - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraXEngine.kt`, `app/src/main/java/dev/halcamera/camera/CameraXPipSession.kt`, `app/src/main/java/dev/halcamera/camera/PipSessionQuery.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt`, `app/src/main/java/dev/halcamera/camera/CameraXVideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/VideoSnapshot.kt`, `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/camera/StillEncoding.kt`, `app/src/main/java/dev/halcamera/camera/YuvPacking.kt`, `app/src/main/java/dev/halcamera/camera/MediaLibrary.kt`, `app/src/main/java/dev/halcamera/camera/StreamConfiguration.kt`, `app/src/main/java/dev/halcamera/camera/LiveControls.kt`, `app/src/main/java/dev/halcamera/camera/TouchMeter.kt`, `app/build.gradle.kts` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -842,11 +842,11 @@ AE 재잠금은 Camera2와 같은 [AeRelock 상태도](#노출은-언제-다시- | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `contract` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `camera2` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `camerax` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `comparison` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | +| 원고 `contract` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | +| 원고 `camera2` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | +| 원고 `camerax` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | +| 원고 `comparison` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | diff --git a/guide/_reference/evidence.md b/guide/_reference/evidence.md index 856fed9f..8c5f7f9b 100644 --- a/guide/_reference/evidence.md +++ b/guide/_reference/evidence.md @@ -80,7 +80,7 @@ Galaxy S25+·Android 16에서 2026년 9월 17~19일, versionCode 106~108로 수 - 근거 파일: `app/src/main/java/dev/halcamera/camera/CameraXControls.kt`, `app/src/main/java/dev/halcamera/camera/CameraXStillCapture.kt`, `app/src/main/java/dev/halcamera/camera/CameraXLiveRecorder.kt` - 기기 검증: `V-002` - 근거 수준: 기기 검증 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -98,8 +98,8 @@ Galaxy S25+·Android 16에서 2026년 9월 17~19일, versionCode 106~108로 수 | 항목 | 최신성 | 검토 | | --- | --- | --- | -| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `device-notes` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | +| 원고 `device-notes` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | diff --git a/guide/architecture.md b/guide/architecture.md index 32028d90..2154b888 100644 --- a/guide/architecture.md +++ b/guide/architecture.md @@ -57,7 +57,7 @@ PC에서 같은 기능을 실행하려면 [CLI](cli.md)를 사용합니다. `Cli - 근거 파일: `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `tools/halcam/halcam/cli.py`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt`, `app/src/main/java/dev/halcamera/WorkbenchActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/telemetry/Telemetry.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunAssembler.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionDetector.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -252,7 +252,7 @@ Camera2의 RAW (DNG)는 `RawFrame`이 RAW 샘플을 복사하고 `DngOutput`이 - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/SplitDragGesture.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `app/src/main/java/dev/halcamera/cli/LiveController.kt`, `app/src/main/java/dev/halcamera/cli/BenchmarkController.kt`, `app/src/main/java/dev/halcamera/cli/CliLibrary.kt`, `app/src/main/java/dev/halcamera/MainCliBridge.kt`, `app/src/main/java/dev/halcamera/DualCliBridge.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/BenchmarkRecorder.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/EnvironmentProbe.kt`, `app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/HistoryActivity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunIndex.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkCsv.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/telemetry/FlightRecorder.kt`, `app/src/main/java/dev/halcamera/MainActivity.kt`, `app/src/main/java/dev/halcamera/ConcurrentCameraActivity.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/RecentMediaThumbnail.kt`, `app/src/main/java/dev/halcamera/ui/RecentMediaButton.kt`, `app/src/main/java/dev/halcamera/ui/Look.kt`, `app/src/main/java/dev/halcamera/cts/recording/BasicRecordingRules.kt`, `app/src/main/java/dev/halcamera/cts/CtsEntryActivity.kt`, `app/src/main/java/dev/halcamera/cts/vendored/VendoredCaseActivity.kt`, `app/src/main/java/dev/halcamera/cts/vendored/VendoredCtsListActivity.kt`, `app/src/main/java/dev/halcamera/cts/CtsCaseActivity.kt`, `app/src/main/java/dev/halcamera/cts/CtsCaseListActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/CtsChecklistActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/CtsSuiteRunActivity.kt`, `app/src/main/java/dev/halcamera/cts/suite/SuitePlan.kt`, `app/src/main/java/dev/halcamera/cts/suite/SuiteReport.kt`, `app/src/main/java/dev/halcamera/cts/CtsCatalog.kt`, `app/src/main/java/dev/halcamera/cts/CtsRunner.kt`, `app/src/main/java/dev/halcamera/cts/CameraCaseRunner.kt`, `app/src/main/java/dev/halcamera/cts/Camera2Ops.kt`, `app/src/main/java/dev/halcamera/cts/onoff/FastOnOffRules.kt`, `app/src/main/java/dev/halcamera/cts/switching/SwitchingRules.kt`, `app/src/main/java/dev/halcamera/cts/sizes/AllSizeOnOffRules.kt`, `app/src/main/java/dev/halcamera/cts/combination/StillPreviewCombinationRules.kt`, `app/src/main/java/dev/halcamera/cts/snapshot/VideoSnapshotRules.kt`, `app/src/main/java/dev/halcamera/CameraProbeActivity.kt`, `app/src/main/java/dev/halcamera/camera/CameraProbe.kt`, `app/src/main/java/dev/halcamera/camera/CameraProbeReader.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -746,7 +746,7 @@ Live 카메라 종료 후 벤치마크 화면으로 이동하고 기존 측정· - 근거 파일: `app/src/main/java/dev/halcamera/camera/MultiSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraXMultiSession.kt`, `app/src/main/java/dev/halcamera/camera/MultiRecording.kt`, `app/src/main/java/dev/halcamera/camera/MicrophoneCapture.kt`, `app/src/main/java/dev/halcamera/camera/TimestampedVideoRecording.kt`, `app/src/main/java/dev/halcamera/camera/DeviceCompositor.kt`, `app/src/main/java/dev/halcamera/cli/CliProvider.kt`, `app/src/main/java/dev/halcamera/cli/CommandCoordinator.kt`, `app/src/main/java/dev/halcamera/cli/CommandStore.kt`, `app/src/main/java/dev/halcamera/camera/CameraEngine.kt`, `app/src/main/java/dev/halcamera/camera/ConcurrentSession.kt`, `app/src/main/java/dev/halcamera/camera/CameraEndpointResolver.kt`, `app/src/main/java/dev/halcamera/telemetry/IncidentExporter.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkRunner.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RunValidity.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/RegressionRules.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkReport.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkReportCodec.kt`, `app/src/main/java/dev/halcamera/benchmark/platform/BenchmarkStore.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/BenchmarkIndex.kt`, `app/src/main/java/dev/halcamera/benchmark/domain/AtomicFiles.kt` - 근거 수준: 코드 확인 -- 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review +- 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review @@ -799,15 +799,15 @@ Android 의존성이 없는 러너와 평가 로직은 JVM 단위 테스트로 | 항목 | 최신성 | 검토 | | --- | --- | --- | | 구조 원본 `data-flow` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 구조 원본 `overall-architecture` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | | 구조 원본 `state-transitions` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | | 구조 원본 `ui-camera-label` | 최신 | 검토 2026-10-10 @ `93385443` · Codex (mode reset, labels and numeric ID selection review) | | 구조 원본 `ui-tool-handoff` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | | 구조 원본 `ui-zoom` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `overview` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `module-roles` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `overview` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | +| 원고 `module-roles` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | | 원고 `runtime-flow` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | -| 원고 `constraints` | 최신 | 검토 2026-10-19 @ `14ca1ae2` · codex-user-authorized-depth-review | +| 원고 `constraints` | 최신 | 검토 2026-10-19 @ `b0648a05` · codex-user-authorized-depth-review | diff --git a/tools/docgen/state/evidence.json b/tools/docgen/state/evidence.json index f653f896..35173d0e 100644 --- a/tools/docgen/state/evidence.json +++ b/tools/docgen/state/evidence.json @@ -6,10 +6,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "0f722523cc241bb1", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -22,7 +22,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -386,10 +386,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "b744f92eb02a420a", + "codeHash": "19ab0340fcab873e", "modelHash": "66bd16d22ce9ca3f", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -402,7 +402,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -723,10 +723,10 @@ }, "content:architecture.md/module-roles": { "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "8ffefe5ee952f837", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -739,7 +739,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1008,10 +1008,10 @@ }, "content:architecture.md/constraints": { "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "90c7c730cb5e8337", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -1024,7 +1024,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1345,10 +1345,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "a882f52b4155cd27", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -1361,7 +1361,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1630,10 +1630,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "a1c4cf8671b1c8c4", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -1646,7 +1646,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -1915,10 +1915,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "ab1f7e43500f5869", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -1931,7 +1931,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -2200,10 +2200,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "1ac54c16fae61b66", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -2216,7 +2216,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1", @@ -2547,10 +2547,10 @@ "state": "fresh" }, "accepted": { - "codeHash": "025f44d5f3c7e34f", + "codeHash": "c896f57e566251f5", "modelHash": "ab3da8834574c341", "at": "2026-10-19", - "commit": "14ca1ae2", + "commit": "b0648a05", "reviewer": "codex-user-authorized-depth-review", "files": { "app/build.gradle.kts": "d66d0773b7c3040674518d8a9db04d40fd67ee57", @@ -2563,7 +2563,7 @@ "app/src/main/java/dev/halcamera/LiveStreamsActivity.kt": "71377b456162e55482645967b3d5b22260d91223", "app/src/main/java/dev/halcamera/MainActivity.kt": "0fa42b6713f8b20632ec77a6b4afd57cf3f80ebb", "app/src/main/java/dev/halcamera/MainCliBridge.kt": "fde7bf3ae0a6f1a451fa84718a37d90052efd6da", - "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "372ebb8c3844a595be6b2fb0c58a496d66c0487b", + "app/src/main/java/dev/halcamera/MainDepthBridge.kt": "1d8d7f6f32f0b2feaa59c279bb0d0a31481acf4b", "app/src/main/java/dev/halcamera/MultiCliBridge.kt": "52a5825ca1ec9d495a6ab76f5738bb5e1d7a1004", "app/src/main/java/dev/halcamera/WorkbenchActivity.kt": "f9c6c4c5e045c737e5375f8c3c2ec283b6381891", "app/src/main/java/dev/halcamera/benchmark/BenchmarkActivity.kt": "2c93630441feea87cc093dd8aed8384cf45956f1",