Expand description
상태 값과 리듀서: Session + step / poll / command / finish.
위치 하나의 프레임 묶음(FrameSet)이 들어올 때마다 특징 → 새 짝 매칭 → (첫 모델 / 이어 등록 + 삼각측량)
→ 구역 완료 시 초벌(전경) 조밀화 + 정밀(배경 스레드: BA → GPS ENU 정렬 → 조밀화)을 수행하고,
그 과정을 단계별 Event 로 내보낸다. 파일·로그는 쓰지 않는다(run.log 줄도 Event::Log 로 나간다).
§상태와 공유
Session 은 값이다. step(&s, frames) 는 새 Session 을 돌려주고 s 는 그대로 쓸 수 있다.
모델·영상 목록·대응 그래프 등은 Arc/쓰기 시 복사로 공유한다. 단, 특징 저장소는 추가 전용 공유 자료라
같은 이전 값에서 서로 다른 프레임으로 두 번 step 하면 저장소가 섞인다(되감기는 Command::ResetFrom 으로).
배경 정밀 작업 결과(정밀 모델·점군)와 이벤트 버전 번호도 세션 계열 전체가 공유한다.
§이벤트 전달
- 기본: 전경 이벤트는 그 호출의 반환 벡터로, 배경 정밀 작업 이벤트는 내부 수신함에 쌓였다가 다음
step/poll/command/finish반환 벡터 앞쪽으로 나간다. Session::set_sink로 수신기를 두면 모든 이벤트(전경·배경)가 낸 즉시 버전 순으로 수신기에 전달된다. 이때 반환 벡터의 전경 이벤트는 이미 전달된 것의 사본이다(다시 전달하지 말 것). 수신기는 막히면 안 된다 (내부 잠금 안에서 불린다).meta.version은 세션 계열 전체에서 단조 증가하며 낸 순서(= timeline 순서)를 준다.
§run.log·timeline 재현 규칙(출력 훅용)
- timeline 문구는
Event::timeline_text가 주며, run.log 에도[HH:MM:SS] 문구로 같은 자리에 쓴다. Event::Log는 그 자리의 run.log 한 줄(stamped이면[HH:MM:SS]머리).Event::Warning/Event::Error는 같은 내용의Log와 함께 나가므로 run.log 에 따로 쓰지 않는다.Event::Finished의 단계 시간에는 후처리(“post”) 시간이 없다(후처리는 출력 훅이 한다).
Structs§
- Frame
Image - 위치 하나의 영상 하나.
- Frame
Set - 위치 하나의 프레임 묶음(카메라마다 한 장).
- Preview
Zone - 구역 초벌 결과.
- Refined
Zone - 구역 정밀 결과(자세 확정 시점부터 있다; 점군은 조밀화가 끝나야 생긴다).
- Session
- 점진 재구성 상태 값.
- Session
Config - 세션 설정.
Enums§
- Input
- 리듀서 입력.
Functions§
- command
- 명령 처리.
- finish
- 남은 구역 닫기 → 배경 작업 대기 → 요약.
- pairs_
for - 짝 규칙: 같은 카메라 위치 간격 1..5, 8, 16 / 다른 카메라 위치 차 0..4. 위치 p 의 영상이 낀 짝만, 정렬된 이름 짝.
- poll
- 배경 정밀 작업 이벤트 수거(수신기가 없을 때). 상태는 바뀌지 않는다.
- step
- 다음 프레임 묶음을 처리한 새 상태와 이벤트.
- zones_
upto - 구역: start = 0, span, …; [start−ovl, start+span+ovl) ∩ [0, total). 완료 위치 = hi−1.
Type Aliases§
- Event
Sink - 즉시 전달 수신기.